首页 > 代码库 > thumbnailator图片处理
thumbnailator图片处理
一、简介
thumbnailator是一个用来对图片对象进行操作的Java类库。通过它我们可以很方面的使用代码的方式,对图片进行一些操作。如缩放,裁减,旋转,水印等。thumbnailator项目主页如下:https://code.google.com/p/thumbnailator/。
二、示例
以下示例使用maven构建,需要添加如下依赖
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version></dependency>
示例代码如下:
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 sourceFile24 * 源图片文件25 * @param targetFile26 * 目标图片文件27 * @param targetWidth28 * 目标图片文件宽 高29 * @param targetHeight30 * 目标图片文件 高31 * @throws IOException32 * @throws MagickException33 */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 block73 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 }
thumbnailator图片处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。