這個可以做什麼運用呢?沒錯,可以拿來做浮水印。
方法很簡單,先開啟一張圖當基底,取得此基底的長寬建立一個BufferedImage,再拿這個BufferImage的畫筆Graphics,把基底圖畫上去,再來取得要放置在這張基底圖上的圖,依照設定坐標,畫在BufferedImage上,再來只要輸出就可以了。
首先先找二張圖,如果找不到的話可以下載下面二張圖
1.jpg 是高雄的旗津,這張當基底圖
Read More這個可以做什麼運用呢?沒錯,可以拿來做浮水印。
方法很簡單,先開啟一張圖當基底,取得此基底的長寬建立一個BufferedImage,再拿這個BufferImage的畫筆Graphics,把基底圖畫上去,再來取得要放置在這張基底圖上的圖,依照設定坐標,畫在BufferedImage上,再來只要輸出就可以了。
首先先找二張圖,如果找不到的話可以下載下面二張圖
1.jpg 是高雄的旗津,這張當基底圖
Read More這是一個十分簡單的程式,主要的功用在於把二張size一樣的圖,合成在一張圖的左右二邊,程式寫的蠻死的,一定要size一樣,有興趣的人可以自己改成動態的二張圖。
首先我們先找了二張圖,就下面二張,如果突然找不到圖的朋友們,可以直接下載下面二張來使用。
圖一,1.jpg
Read More前一篇資料(教學)在Ubuntu裡建立Apache with Tomcat 服務-1
再來要介紹JMagick及ImageMagick的安裝 in Ubuntu 9.10(Linux)
包含jpeg及png支援
1.安裝zlib ->jpeg需使用
#cd /opt/ #sudo wget http://www.zlib.net/zlib-1.2.3.tar.gz #sudo tar zxvf zlib-1.2.3.tar.gz #cd /opt/zlib-1.2.3 #sudo ./configure #sudo make #sudo make install
2.安裝jpeg lib 使其支援jpeg jpg格式
#sudo mkdir /usr/local/modules #sudo mkdir /usr/local/modules/jpeg6 #sudo mkdir /usr/local/modules/jpeg6/bin #sudo mkdir /usr/local/modules/jpeg6/lib #sudo mkdir /usr/local/modules/jpeg6/include #sudo mkdir /usr/local/modules/jpeg6/man #sudo mkdir /usr/local/modules/jpeg6/man/man1 #cd /opt/ #sudo wget http://ftp.ntu.edu.tw/gnu/pub/gnu/ghostscript/jpegsrc.v6b.tar.gz #sudo tar zxvf jpegsrc.v6b.tar.gz #cd /opt/jpeg-6b #sudo ./configure --prefix=/usr/local/modules/jpeg6 --enable-shared --enable-static #sudo make #sudo make install
3.安裝png lib 使其支援png格式
Read More程式很簡單 ,只需要在利用command在程式目錄下執行
java -jar ReSizeImage.jar
就可以啦!
預設是縮成以寬為500px基準,如果要改變寬可以利用
java -jar ReSizeImage.jar 數字
縮完的圖會放到程式目錄的resize目錄裡
我Blog都是以500寬為基準,我想應該夠用了吧^^
程式目錄結構
記得要先下載Imagick來安裝才能使用喔
按裝方法如下:
範例圖檔可以按圖下載,放置於程式目錄
class Tool整個壓縮以外的實作均在此
package image; import java.io.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; public class Tool { public Tool(int width) { // 取得class路徑所有檔案 File f = new File("."); File[] list = f.listFiles(); for (int i = 0; i < list.length; i++) { // 是否為圖檔,是的話進行縮圖 if (isImg(getFileType(list[i].getName()))) { System.out.println("處理檔案名稱:" + list[i].getName()); toCompressImg(list[i].getAbsolutePath(), getRealDir(list[i] .getAbsolutePath()) + "resize" + File.separator + list[i].getName(), width); } } } // 取得副檔名 private String getFileType(String str) { int startIndex = str.lastIndexOf(46) + 1; int endIndex = str.length(); return str.substring(startIndex, endIndex); // 副檔名 } // 傳入副檔名 檢查是否為指定圖檔jpg gif png private boolean isImg(String str) { return (("jpg,gif,png").indexOf(str.toLowerCase())) > -1; } // 找目錄 private String getRealDir(String str) { int endIndex = str.lastIndexOf(File.separator) + 1; int startIndex = 0; return str.substring(startIndex, endIndex); // 副檔名 } public void toCompressImg(String iFile, String oFile, int newWidth) { try { File fi = new File(iFile); // 大圖文件 if (!fi.exists()) return; String oPath = oFile .substring(0, oFile.lastIndexOf(File.separator)); File foPath = new File(oPath); if (!foPath.exists()) if (foPath.mkdir()) System.out.println("ooo toCompressImg() File out path:" + oPath + " mkdir成功!"); File fo = new File(oFile); // 將要轉換出的小圖文件 int nw = newWidth; // AffineTransform transform = new AffineTransform(); BufferedImage bis = ImageIO.read(fi); int w = 0, h = 0; try { w = bis.getWidth(); h = bis.getHeight(); } catch (Exception e) { fileCopy(fi, fo); return; } if (nw > (w < h ? h : w)) { fileCopy(fi, fo); return; } // 壓縮寬度比原始檔大,那就不壓縮了; int nh = (nw * h) / w; // double sx = (double) nw / w; // double sy = (double) nh / h; JMagickScale.Compress(fi.getAbsolutePath(), fo.getAbsolutePath(), nw, nh); /* * transform.setToScale(sx, sy); //System.out.println(w + ", " + h); * AffineTransformOp ato = new AffineTransformOp(transform, null); * BufferedImage bid = new BufferedImage(nw, nh, * BufferedImage.TYPE_3BYTE_BGR); ato.filter(bis, bid); * ImageIO.write(bid, "jpeg", fo); */ } catch (Exception e) { e.printStackTrace(); } } public void fileCopy(File inputFile, File outputFile) { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(inputFile); fos = new FileOutputStream(outputFile); int c; while ((c = fis.read()) != -1) fos.write(c); fis.close(); fos.close(); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String args[]) { int width = 500; try { width = Integer.parseInt(args[0]); } catch (Exception e) { } if (width <= 0) { System.out.println("Width Error"); } else { new Tool(width); } } }
class JmagickScale壓縮的實作
package image; import magick.ImageInfo; import magick.MagickException; import magick.MagickImage; public class JMagickScale { public static void Compress(String source, String To, int width, int height) throws MagickException { if (System.getProperty("jmagick.systemclassloader") == null) { System.setProperty("jmagick.systemclassloader", "no"); } ImageInfo info = new ImageInfo(source); MagickImage image = new MagickImage(info); // resize image MagickImage scaleImg = image.scaleImage(width, height); // write image to file scaleImg.setFileName(To); scaleImg.writeImage(info); } }
成功的圖,可以按進去flickr看壓好的圖效果
構想:
在現有的圖片裡,列如樣版票圖,再加入亂數碼,以區別每個票圖的唯一性。
想法:
取得亂數碼,打開樣版票圖,取得畫筆(Graphics2D),把亂數碼設定到TextLayout圖層上,
計算放置TextLayout圖層的x及y坐標,把圖層draw到樣版圖上,輸出到以亂數碼為名稱之圖檔。
以下是範例程式:
程式大樣分成二大部份,一是圖形的加註文字,二是取得亂數編號的方式。
Read More