thumbnailator图片处理

简介: 一、简介   thumbnailator是一个用来对图片对象进行操作的Java类库。通过它我们可以很方面的使用代码的方式,对图片进行一些操作。如缩放,裁减,旋转,水印等。thumbnailator项目主页如下:https://code.google.com/p/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 }
目录
相关文章
|
1天前
|
API
图片压缩+格式转换免费API接口教程
这是一个免费的图片压缩和格式转换API接口,支持GET和POST请求。请求地址为 `https://cn.apihz.cn/api/img/yasuo.php`,需提供 `id`、`key`、`img` 等参数。返回数据包含处理后的图片URL和其他相关信息。更多详情请参考:https://www.apihz.cn/api/imgyasuo.html
|
存储 数据可视化 安全
一张图的七十二变——阿里云OSS图片处理实践
      小张是某视频网站的新入职的UED,日常工作就是创作各式各样的海报banner。踌躇满志的小张,上了三天班就蔫了。因为他在完成一张图的创作后,还需要考虑:• 同一张图会以不同的形式应用于网站各处:有时候需裁剪成不同形状,有时需要加水印,有时需转换格式....• 为了风格统一,不同的图需要保持样式统一:不同图片排列组成成一组,每组图片风格(
2400 0
|
存储 XML 编解码
探索现代图片格式:从GIF到HEIF,优势与适用场景一览-2
使用场景: JPEG适用于各种需要高度压缩、广泛兼容性以及不需要透明背景的场景。它特别适用于摄影、照片、艺术品等复杂图像的存储和展示。
411 0
|
数据安全/隐私保护
图片一键添加水印工具V1.0-免费版
该图片一键添加水印工具V1.0可以批量把常见图片格式('.bmp', '.png', '.jpg', '.jpeg', '.dib', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')一键添加水印。默认在图片右下角添加水印。
328 0
图片一键添加水印工具V1.0-免费版
|
算法 Linux 对象存储
推荐几款免费的图床和图片处理工具
博客存图一直是个较大的问题,最理想的情况下,我们选择的图床最好是免费(哪有这种好事?)、支持 https 、访问速度快,而我们在上传图片这个操作时,最好是能够直接在客户端拖拽上传,并且能快速拿到上传后图片的 URL。
3099 0
推荐几款免费的图床和图片处理工具
|
异构计算 Python
|
计算机视觉 异构计算
|
存储 域名解析 缓存
使用 OSS 图片处理服务|学习笔记
快速学习使用 OSS 图片处理服务
1241 0
|
存储 人工智能 自然语言处理
关于图片处理的那些事
修饰照片俗称修图,是指使用各种方式和技术修改照片以达到预期的目的。在这个过程中,必不可少的会使用到图片工具,市面上的图片工具很多,然而大部分都是商用化较高的,在其中找到...
115 0
|
编解码 弹性计算 Serverless
FGAP加速图片和视频转码
场景1:图片转码 移动互联网早已进入读图时代,目前的图片都是JPEG格式,尺寸太大,导致传输占用更多的网络带宽,花费更多的传输时间并占用更多的存储空间。JPEG图片转码为WebP/HEIF需要消耗大量的计算能力。使用阿里云FaaS加速图片转码解决方案将使客户TCO降低约40%。 场景2:视频转码 到2022年,82%的IP流量都将来自于视频的录制、上传和播放。HEVC/H.265无论从画质还是码率,都比H.264有明显的优势,但是将视频将H.264编码为H.265将消耗巨大的算力。使用阿里云FaaS加速视频转码将显著降低视频大小,节省网络流量,降低成本。
637 0
FGAP加速图片和视频转码