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 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 }
时间: 2024-08-25 17:13:43

thumbnailator图片处理的相关文章

java 使用Thumbnailator图片处理包装类

Thumbnailator是一个非常好的图片开源工具,可以很好的完成图片处理. 从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量.同时还支持根据一个目录批量生成缩略图. Maven中pom.xml 配置: <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator<

SSM到Spring Boot -从零开发校园商铺平台

第1章 开发准备   1-1 课程导学   1-2 开发准备第2章 项目设计和框架搭建   2-1 系统功能模块划分   2-2 实体类设计与表创建A   2-3 实体类设计与表创建B   2-4 实体类设计与表创建C   2-5 配置Maven   2-6 逐层完成SSM的各项配置   2-7 验证Dao   2-8 验证Sevice   2-9 验证Controller   2-10 彩蛋时间第3章 Logback配置与使用   3-1 logback介绍   3-2 logback的配置 

Java 实现图片等比例缩略图 (Thumbnailator + Jsp+SpringMVC)

Web应用为上传图片生成缩略图是常见的基本功能,通过缩略图生成提高了信息浏览时的性能,在保证用户使用体验的同时减少了数据传输量.本次以实例的方式,讲解如何使用使用Java实现图片等比例缩略图生成功能. 效果查看 代码编写 Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量. 1.导入相关的包 2.配置web.xml we

Thumbnailator压缩图片

Thumbnailator是一款不可多得的处理图片的第三方工具包,它写法简单到让人无法相信,Java本身也有处理图片压缩的方法,但是代码冗长到让人痛不欲生,在篇末会给出Java本身的实现方式,做下对比,已体现Thumbnailator的强大.前段时间做分期的一种相对简单的业务,需要传递用户的身份信息,相关合同信息等相关图片(做个业务传这么多图片,我是用户肯定say goodbye了,不忍吐槽),其实图片上传后不需要显示大图,只需要缩略图而已,在另外的审核页面才需要这样的原图.说了这个背景,那解约

Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理

前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量.还支持对一个目录的所有图片进行批量处理操作,下边就和大家分享一下java中用Thumbnailator做图片各种处理的方法(相关jar包可在最

一:Java使用google的thumbnailator工具对图片压缩水印等做处理

Thumbnailator是一个非常好的图片开源工具 使用方法: 在pom中加入以下jar包 <!-- 图片缩略图 图片压缩 水印 start--> <dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency><!-- 图

图片压缩工具Thumbnailator的使用

Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量.同时还支持根据一个目录批量生成缩略图. package com.zspr.utils.img; import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import net.

springboot整合thumbnailator实现图片压缩

springboot整合thumbnailator实现图片压缩 前言 最近由于首页产品列表图片显示太慢,经过研究发现是用户上传的图片太大. 针对这个问题,想到的解决方案是: 1. 产品上传时,限定图片上传大小不超过2m 2. 上传成功后将产品图片进行压缩,但是保留原图片,压缩后的图片名称添加后缀”-thumbnail” 3. 对已经上传的产品图片全部进行压缩 4. 前端只有在点击查看产品大图时显示原图,其他情况均显示缩略图 实现 根据需求,找到的解决方法是使用net.coobird.thumbn

使用thumbnailator 时部分图片抛异常

net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for source data. at net.coobird.thumbnailator.tasks.io.InputStreamImageSource.read(Unknown Source) at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.re