thumbnailator圖片處理

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 }
相關文章
相關標籤/搜索