1、簡介
thumbnailator是一個用來對圖片對象進行操做的Java類庫。經過它咱們能夠很方面的使用代碼的方式,對圖片進行一些操做。如縮放,裁減,旋轉,水印等。thumbnailator項目主頁以下:https://code.google.com/p/thumbnailator/。java
2、示例
如下示例使用maven構建,須要添加以下依賴web
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
示例代碼以下:app
1 package com.demo.test; 2 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 import java.io.IOException; 6 import java.math.BigDecimal; 7 8 import javax.imageio.ImageIO; 9 10 import org.slf4j.Logger; 11 import org.slf4j.LoggerFactory; 12 13 import com.longtime.app.image.web.ImageServlet; 14 15 import net.coobird.thumbnailator.Thumbnails; 16 import net.coobird.thumbnailator.Thumbnails.Builder; 17 import net.coobird.thumbnailator.geometry.Positions; 18 19 public class CovertUtils { 20 21 /** 22 * 23 * @param sourceFile 24 * 源圖片文件 25 * @param targetFile 26 * 目標圖片文件 27 * @param targetWidth 28 * 目標圖片文件寬 高 29 * @param targetHeight 30 * 目標圖片文件 高 31 * @throws IOException 32 * @throws MagickException 33 */ 34 public static void cover(String sourceFile, String targetFile, int targetWidth, int targetHeight) { 35 File fromFile = new File(sourceFile); 36 BufferedImage srcImage = null; 37 int s_height = 0; 38 int s_width = 0; 39 try { 40 srcImage = ImageIO.read(fromFile); 41 // 獲取源文件的寬高 42 s_height = srcImage.getHeight(); 43 s_width = srcImage.getWidth(); 44 System.out.println(s_height + ""); 45 System.out.println(s_width + ""); 46 } catch (IOException e1) { 47 e1.printStackTrace(); 48 } 49 // 判斷是否須要壓縮 50 if (targetWidth != s_width || targetHeight != s_height) {// 須要壓縮 51 BigDecimal n = new BigDecimal(s_height).divide(new BigDecimal(s_width), 10, BigDecimal.ROUND_UP);// 源圖片文件高/寬 的比例 52 BigDecimal m = new BigDecimal(targetHeight).divide(new BigDecimal(targetWidth), 10, BigDecimal.ROUND_UP);// 目標圖片文件高/寬 的比例 53 System.out.println(n+ ""); 54 System.out.println(m+ ""); 55 int flag = n.compareTo(m); //比較源圖片文件和目標圖片 的高/寬 比 56 try { 57 if (flag == 0) {// n == m,高/寬 比一致, 無需裁減, 直接壓縮 58 System.out.println("flag: " + flag); 59 Thumbnails.of(sourceFile).forceSize(targetWidth, targetHeight).toFile(targetFile); 60 } else { // 高/寬 比不一致,須要裁減 61 if (flag > 0) {// 高的比例 > 寬的比例,以寬的比例進行縮放, 須要裁減高 62 srcImage = Thumbnails.of(sourceFile).width(targetWidth).asBufferedImage();//以寬的比例進行縮放 63 } else if (flag < 0) {// n < m 高的比例 < 寬的比例,以高的比例進行縮放, 須要裁減寬 64 srcImage = Thumbnails.of(sourceFile).height(targetHeight).asBufferedImage();//以高的比例進行縮放 65 } 66 // 居中裁減 67 Builder<BufferedImage> builder = Thumbnails.of(srcImage) 68 .sourceRegion(Positions.CENTER, targetWidth, targetHeight).size(targetWidth, targetHeight); 69 builder.toFile(targetFile); 70 } 71 } catch (IOException e) { 72 // TODO Auto-generated catch block 73 e.printStackTrace(); 74 } 75 } 76 } 77 78 public static void main(String[] args) throws IOException { 79 String sourceFile = "E://uploadimg//2014//12//6972df55641a4c5ca287a2cb1a86627c.png";//源文件 80 String targetFile = "E://uploadimg//2014//12//6972df55641a4c5ca287a2cb1a86627c_400x800.png"; //處理以後的文件 81 int width = 400; //處理以後文件的寬 82 int height = 800; //處理以後文件的高 83 try { 84 cover(sourceFile, targetFile, width, height); 85 } catch (Exception e) { 86 e.printStackTrace(); 87 } 88 89 } 90 }