搞網站開發,常常要用到的一個功能是生成縮略圖。若是對縮略圖的質量要求不高,直接用JDK提供的Image API就能夠搞定,簡單示例: java
File _file = new File("/Order005-0001.jpg"); //讀入文件 Image src = javax.imageio.ImageIO.read(_file); //構造Image對象 int wideth=src.getWidth(null); //獲得源圖寬 int height=src.getHeight(null); //獲得源圖長 BufferedImage tag = new BufferedImage(wideth/2,height/2,BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(src,0,0,wideth/2,height/2,null); //繪製縮小後的圖 FileOutputStream out=new FileOutputStream("newfile.jpg"); //輸出到文件流 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); //近JPEG編碼 //System.out.print(width+"*"+height); out.close();
注意: 算法
在Eclipse中運行上面這段代碼,須要引入兩個包:
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
可能會報錯:
Access restriction: The type JPEGImageEncoder is not accessible due to restriction on required library C:\Java\jre1.6.0_07\lib\rt.jar
這是由於這兩個類在rt.jar包中,屬於受訪問的API,Eclipse 默認把這些受訪問限制的API設成了ERROR。 ide
解決辦法: 工具
只要把Windows-Preferences-Java-Complicer- Errors/Warnings裏面的Deprecated and restricted API中的Forbidden references(access rules)選爲Warning就能夠編譯經過。 網站
若是對縮略圖的質量要求高,這時候就須要本身寫算法來實現了。網上能夠找到不少有關縮略圖的算法,其中有些效果仍是不錯的,你們能夠去試一下。今天要介紹的是一個開源的java縮略圖工具,名叫Thumbnailator,使用起來很是簡單,兩三行代碼就可以從現有圖片生成縮略圖,且容許微調縮略圖生成,同時保持了須要寫入到最低限度的代碼量。同時還支持根據一個目錄批量生成縮略圖。如下是代碼示例: ui
1.指定大小進行縮放 google
/* * 若圖片橫比300小,高比300小,不變 * 若圖片橫比300小,高比300大,高縮小到300,圖片比例不變 * 若圖片橫比300大,高比300小,橫縮小到300,圖片比例不變 * 若圖片橫比300大,高比300大,圖片按比例縮小,橫爲300或高爲300 */ Thumbnails.of("D:\\fen.jpg") .size(300, 300) //.keepAspectRatio(false) //默認是true,按比例縮小 .outputQuality(0.95f)//設置壓縮比,決定壓縮後圖片的質量 .outputFormat("JPEG") .toFile("D:\\fen_300.jpeg");
原圖: 編碼
生成的縮略圖: spa
2.旋轉 .net
//rotate(角度),正數:順時針 負數:逆時針 Thumbnails.of("D:\\fen.jpg") .size(1280, 1024) .rotate(90) .toFile("D:\\rotate_90.jpg");
3.裁剪
//指定座標 Thumbnails.of("D:\\fen.jpg") .sourceRegion(600, 500, 400, 400) .size(200, 200) .keepAspectRatio(false) .toFile("D:\\fen_cut.jpg");
4.水印
//watermark(位置,水印圖,透明度) Thumbnails.of("D:\\fen.jpg") .size(1280, 1024) .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("D:\\logo.png")), 0.5f) .outputQuality(0.8f) .toFile("D:\\fen_watermark.jpg");
更多的例子請看Thumbnails Demo
總結:以上僅是Thumbnails的一小部分功能,從中能夠看出Thumbnails的功能強大,並且使用極其方便,對於通常的圖片處理足夠了,若是想對圖片進行更加複雜的處理,則須要用到ImageMagick或者了GraphicsMagick了。下一篇文章將介紹GraphicsMagick的基本用法。