一、简介
  thumbnailator是一个用来对图片对象进行操作的Java类库。通过它我们可以很方面的使用代码的方式,对图片进行一些操作。如缩放,裁减,旋转,水印等。thumbnailator项目主页如下:https://code.google.com/p/thumbnailator/

二、示例
  以下示例使用maven构建,需要添加如下依赖

<dependency>
  <groupId>net.coobird</groupId>
  <artifactId>thumbnailator</artifactId>
  <version>0.4.8</version>
</dependency>

  示例代码如下:

 package com.demo.test;

 import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal; import javax.imageio.ImageIO; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.longtime.app.image.web.ImageServlet; import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.Thumbnails.Builder;
import net.coobird.thumbnailator.geometry.Positions; public class CovertUtils { /**
*
* @param sourceFile
* 源图片文件
* @param targetFile
* 目标图片文件
* @param targetWidth
* 目标图片文件宽 高
* @param targetHeight
* 目标图片文件 高
* @throws IOException
* @throws MagickException
*/
public static void cover(String sourceFile, String targetFile, int targetWidth, int targetHeight) {
File fromFile = new File(sourceFile);
BufferedImage srcImage = null;
int s_height = 0;
int s_width = 0;
try {
srcImage = ImageIO.read(fromFile);
// 获取源文件的宽高
s_height = srcImage.getHeight();
s_width = srcImage.getWidth();
System.out.println(s_height + "");
System.out.println(s_width + "");
} catch (IOException e1) {
e1.printStackTrace();
}
// 判断是否需要压缩
if (targetWidth != s_width || targetHeight != s_height) {// 需要压缩
BigDecimal n = new BigDecimal(s_height).divide(new BigDecimal(s_width), 10, BigDecimal.ROUND_UP);// 源图片文件高/宽 的比例
BigDecimal m = new BigDecimal(targetHeight).divide(new BigDecimal(targetWidth), 10, BigDecimal.ROUND_UP);// 目标图片文件高/宽 的比例
System.out.println(n+ "");
System.out.println(m+ "");
int flag = n.compareTo(m); //比较源图片文件和目标图片 的高/宽 比
try {
if (flag == 0) {// n == m,高/宽 比一致, 无需裁减, 直接压缩
System.out.println("flag: " + flag);
Thumbnails.of(sourceFile).forceSize(targetWidth, targetHeight).toFile(targetFile);
} else { // 高/宽 比不一致,需要裁减
if (flag > 0) {// 高的比例 > 宽的比例,以宽的比例进行缩放, 需要裁减高
srcImage = Thumbnails.of(sourceFile).width(targetWidth).asBufferedImage();//以宽的比例进行缩放
} else if (flag < 0) {// n < m 高的比例 < 宽的比例,以高的比例进行缩放, 需要裁减宽
srcImage = Thumbnails.of(sourceFile).height(targetHeight).asBufferedImage();//以高的比例进行缩放
}
// 居中裁减
Builder<BufferedImage> builder = Thumbnails.of(srcImage)
.sourceRegion(Positions.CENTER, targetWidth, targetHeight).size(targetWidth, targetHeight);
builder.toFile(targetFile);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} public static void main(String[] args) throws IOException {
String sourceFile = "E://uploadimg//2014//12//6972df55641a4c5ca287a2cb1a86627c.png";//源文件
String targetFile = "E://uploadimg//2014//12//6972df55641a4c5ca287a2cb1a86627c_400x800.png"; //处理之后的文件
int width = 400; //处理之后文件的宽
int height = 800; //处理之后文件的高
try {
cover(sourceFile, targetFile, width, height);
} catch (Exception e) {
e.printStackTrace();
} }
}

thumbnailator图片处理的更多相关文章

  1. 玩转 SpringBoot2.x 之整合 thumbnailator 图片处理

    1.序 在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的.最近,阿淼就被要求实现这个功能,原因是客户那边嫌速度过慢.借此机会,阿淼今儿 ...

  2. 使用第三方工具Thumbnailator动态改变图片尺寸

    Thumbnailator项目git地址:https://github.com/coobird/thumbnailator 使用步骤 1.添加依赖 <!-- Thumbnailator图片处理 ...

  3. java图片压缩工具类(指定压缩大小)

    1:先导入依赖 <!--thumbnailator图片处理--> <dependency> <groupId>net.coobird</groupId> ...

  4. 【Android】Android开源项目精选(一)

    ListView ListView下拉刷新:https://github.com/johannilsson/android-pulltorefresh AndroidPullToRefresh:htt ...

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

    第1章 开发准备 本章包含课程介绍,同时讲解开发网站所需要准备的事情,并且带领大家从零开始搭建一个Maven Web. 1-1 课程导学 1-2 开发准备 第2章 项目设计和框架搭建 本章主要先带领大 ...

  6. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  7. SSM到Spring Boot-校园商铺平台

    第04章 店铺注册功能模块 4-3 Thumbnailator图片处理和封装Util[通过java代码实现给图片打上水印] 4-3 Thumbnailator图片处理和封装Util[通过java代码实 ...

  8. Thumbnailator压缩图片

    Thumbnailator是一款不可多得的处理图片的第三方工具包,它写法简单到让人无法相信,Java本身也有处理图片压缩的方法,但是代码冗长到让人痛不欲生,在篇末会给出Java本身的实现方式,做下对比 ...

  9. java使用Thumbnailator操作图片

    Thumbnailator 是一个用来生成图像缩略图.裁切.旋转.添加水印等操作的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图. Thumbnailato ...

随机推荐

  1. Excel中显示长数字的方法

    主要有以下三种方法: 1.先设置为文本格式,再粘贴2.在另一列输入=CONCATENATE(A1),双击此格右下角得到全部数值,再格式化为文本粘贴回去3.选中数据列,点数据-分列,下一步-下一步,选中 ...

  2. C语言字符串匹配函数

    C语言字符串匹配函数,保存有需要时可以用: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  3. ACM训练场

    http://acm.nyist.net/JudgeOnline/problemset.php http://blog.csdn.net/SJF0115/article/category/910592 ...

  4. csharp: SDK:CAPICOM

    http://www.microsoft.com/zh-cn/download/details.aspx?id=25281 //************************************ ...

  5. LeetCode130:Surrounded Regions

    题目: Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is capt ...

  6. [moka同学笔记]Yii2.0验证码

    1.Model中Code.php <?php /** * Created by PhpStorm. * User: moka同学 * Date: 2016/07/25 * Time: 10:48 ...

  7. js实现向上滚动效果

    源码: <style type="text/css"> #up_zzjs{border:1px solid #ccc;width:170px;height:182px; ...

  8. PHP学习笔记:伪静态规则的书写

    这里以阿帕奇为服务器软件,直接上案例: 1.把index.html重定向到index.php RewriteEngine On Options -Indexes ReWriteRule ^index. ...

  9. mysql=null的优雅解决方法

    对于不是采用所有字段都是not null的mysql表设计而言,mysql提供了一个<=>操作符. 在oracle中我们的处理方式通常类似: where a = #{var} or #{v ...

  10. UML类图相关实践

    最近看了下设计模式,其中无可避免会设计很多类图,UML类图对于学习设计模式很重要,关于设计模式,我也会在这里写上一写,这一篇关于UML类图的就先当个铺垫. 1.先上一个简单的类图来简单说明下: 1). ...