Thumbnails使用方法(图片处理工具类)
我们在java开发时,使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤能用一行代码就完成。
Thumbnails支持:
·指定大小进行缩放
·按照比例进行缩放
·不按照比例,指定大小进行缩放
·旋转
·水印
·裁剪
·转化图像格式
·输出到OutputStream
·输出到BufferedImage
使用步骤
- 导入架包
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>
2.具体使用方法
/*** 指定大小进行缩放* * @throws IOException*/private void test1() throws IOException {/** size(width,height) 若图片横比200小,高比300小,不变* 若图片横比200小,高比300大,高缩小到300,图片比例不变 若图片横比200大,高比300小,横缩小到200,图片比例不变* 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300*/Thumbnails.of("images/test.jpg").size(200, 300).toFile("C:/image_200x300.jpg");Thumbnails.of("images/test.jpg").size(2560, 2048).toFile("C:/image_2560x2048.jpg");}/*** 按照比例进行缩放* * @throws IOException*/private void test2() throws IOException {/*** scale(比例)*/Thumbnails.of("images/test.jpg").scale(0.25f).toFile("C:/image_25%.jpg");Thumbnails.of("images/test.jpg").scale(1.10f).toFile("C:/image_110%.jpg");}/*** 不按照比例,指定大小进行缩放* * @throws IOException*/private void test3() throws IOException {/*** keepAspectRatio(false) 默认是按照比例缩放的*/Thumbnails.of("images/test.jpg").size(120, 120).keepAspectRatio(false).toFile("C:/image_120x120.jpg");}/*** 旋转* * @throws IOException*/private void test4() throws IOException {/*** rotate(角度),正数:顺时针 负数:逆时针*/Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(90).toFile("C:/image+90.jpg");Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(-90).toFile("C:/iamge-90.jpg");}/*** 水印* * @throws IOException*/private void test5() throws IOException {/*** watermark(位置,水印图,透明度)*/Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("C:/image_watermark_bottom_right.jpg");Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("C:/image_watermark_center.jpg");}/*** 裁剪* * @throws IOException*/private void test6() throws IOException {/*** 图片中心400*400的区域*/Thumbnails.of("images/test.jpg").sourceRegion(Positions.CENTER, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_center.jpg");/*** 图片右下400*400的区域*/Thumbnails.of("images/test.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_bootom_right.jpg");/*** 指定坐标*/Thumbnails.of("images/test.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_coord.jpg");}/*** 转化图像格式* * @throws IOException*/private void test7() throws IOException {/*** outputFormat(图像格式)*/Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("png").toFile("C:/image_1280x1024.png");Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("gif").toFile("C:/image_1280x1024.gif");}/*** 输出到OutputStream* * @throws IOException*/private void test8() throws IOException {/*** toOutputStream(流对象)*/OutputStream os = new FileOutputStream("C:/image_1280x1024_OutputStream.png");Thumbnails.of("images/test.jpg").size(1280, 1024).toOutputStream(os);}/*** 输出到BufferedImage* * @throws IOException*/private void test9() throws IOException {/*** asBufferedImage() 返回BufferedImage*/BufferedImage thumbnail = Thumbnails.of("images/test.jpg").size(1280, 1024).asBufferedImage();ImageIO.write(thumbnail, "jpg", new File("C:/image_1280x1024_BufferedImage.jpg"));}
压缩图片至指定大小
一开始没有思路在网上搜,发现google有个插件叫Thumbnails,然后看到了这篇文章:
https://blog.csdn.net/u010355502/article/details/77197616
思路很简单,按一定的比例压缩图片,如果压缩完大小达不到要求,就把压缩后的结果继续压缩,直到符合要求为止
本文可以说是对原文作者代码的改进,去除了一些多余的IO过程,把递归改成了循环,并且把文件操作改为了流和字节数组的操作(也是更符合公司的业务代码一些)
在此感谢原文作者
import net.coobird.thumbnailator.Thumbnails;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;/*** 图片压缩Utils** @author worstEzreal* @version V1.1.0* @date 2018/3/12*/
public class PicUtils {private static Logger logger = LoggerFactory.getLogger(PicUtils.class);// public static void main(String[] args) throws IOException {
// byte[] bytes = FileUtils.readFileToByteArray(new File("D:\\1.jpg"));
// long l = System.currentTimeMillis();
// bytes = PicUtils.compressPicForScale(bytes, 300, "x");// 图片小于300kb
// System.out.println(System.currentTimeMillis() - l);
// FileUtils.writeByteArrayToFile(new File("D:\\dd1.jpg"), bytes);
// }/*** 根据指定大小压缩图片** @param imageBytes 源图片字节数组* @param desFileSize 指定图片大小,单位kb* @param imageId 影像编号* @return 压缩质量后的图片字节数组*/public static byte[] compressPicForScale(byte[] imageBytes, long desFileSize, String imageId) {if (imageBytes == null || imageBytes.length <= 0 || imageBytes.length < desFileSize * 1024) {return imageBytes;}long srcSize = imageBytes.length;double accuracy = getAccuracy(srcSize / 1024);try {while (imageBytes.length > desFileSize * 1024) {ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);ByteArrayOutputStream outputStream = new ByteArrayOutputStream(imageBytes.length);Thumbnails.of(inputStream).scale(accuracy).outputQuality(accuracy).toOutputStream(outputStream);imageBytes = outputStream.toByteArray();}logger.info("【图片压缩】imageId={} | 图片原大小={}kb | 压缩后大小={}kb",imageId, srcSize / 1024, imageBytes.length / 1024);} catch (Exception e) {logger.error("【图片压缩】msg=图片压缩失败!", e);}return imageBytes;}/*** 自动调节精度(经验数值)** @param size 源图片大小* @return 图片压缩质量比*/private static double getAccuracy(long size) {double accuracy;if (size < 900) {accuracy = 0.85;} else if (size < 2047) {accuracy = 0.6;} else if (size < 3275) {accuracy = 0.44;} else {accuracy = 0.4;}return accuracy;}}
Thumbnails使用方法(图片处理工具类)相关推荐
- Java实现pdf转图片的工具类(三种方法实现PDF转图片的案例)【亲测可用】
提示:有些时候我们需要在项目中展示PDF,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好.Java使用各种技术将pdf转换成图片格式,并且内容不失帧.清晰可见,该工具类也是开发中常用到的 ...
- 图片处理工具类 - ImageUtils.java
纯JAVA实现的图片处理工具类,提供图片的裁剪.压缩.获取尺寸.制作圆角等方法. 源码如下:(点击下载 -ImageUtils.java .FolderUtils.java .commons-io-2 ...
- Android 图片处理工具类封装2
http://www.2cto.com/kf/201312/263638.html Android 图片处理工具类封装 2013-12-10 0个评论 来源:Wiker Yong 的专栏 ...
- linux 图片编辑 java_Java的图片处理工具类
Java的图片处理工具类: 可实现以下常用功能:缩放图像.切割图像.图像类型转换.彩色转黑白.文字水印.图片水印等 import java.awt.AlphaComposite; import jav ...
- java图片处理工具类,很实用哦
笔者以前在项目里要求处理图片,当时在博客里看到这篇不错的帖子,但是没有看到原作的出处,于是就不客气的转载下来了...同时感谢原创写出这么好的东西. 这个图像工具类可实现以下常用功能:缩放图像.切割图像 ...
- 阿里的图片剪裁工具类及依赖的jar包
阿里的图片剪裁工具类包含以下7个方法,这都好理解,关键是这个jar包的maven依赖不好找,有人卖这个依赖已经卖到50个下载币,黑心啊,我找了很久终于找到了. 1.按固定长宽进行缩放 2.按固定文件大 ...
- ImageView可直接调用的,根据URL设置图片的工具类
ImageView 是Android编程中最常用的组件之一. 但是根据图片的URL设置图片却很麻烦.因为获取网络图片的操作必须在异步线程中进行,根据URL设置ImageView图片就可能需要进行线程间 ...
- java 图片合成 工具类_Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】...
本文实例讲述了Java实现的微信图片处理工具类.分享给大家供大家参考,具体如下: 现在 外面核心,图片文章比较少,看了拷贝代码,而用不了,用相应jar包处理,很多等比例缩放,达不到 想要的给予的期望: ...
- validate方法中校验工具类
日常Java开发中,我们使用validate的校验是很方便的,但是也有一些特殊情况需要单独处理, 例如:导入Excel校验,传入的是MultipartFile文件类型,我们不能使用注解进行校验实体信息 ...
- java 图片image工具类,ImageUtil.java
1.java 图片image工具类,ImageUtil.java package com.broadway.numpeople.utils;import java.awt.Color; import ...
最新文章
- 使用Eclipse更新软件时出现Unable to locate secure storage module错误的解决方法
- javascript 窗口加载事件相关问题
- Promise、Promise.all和Promise.race实现
- Spring Boot Transaction 源码解析(一)
- JavaScript--数据结构与算法之二叉树
- 所有受限制的应用程序包_您需要了解的有关Mac的Apple新款M1芯片的所有信息
- 快速批量一个半小时插入1亿条数据到mysql
- (八)mybatis之映射器
- 浮点数 字符串 java_Java如何将浮点数转换为字符串
- 云计算更适合小公司的八条原因
- 交换机路由器常用命令
- unity 走马灯packageManager
- 检验检测系统管理服务器,检验检测管理平台
- 斑马标签打印机蛋疼的打印错误处理方法
- mysql crud,mysql的CRUD操作实现
- ps图片拖不进去_win10中ps图片不能拖进去怎么办-修复ps无法直接拖入的教程 - 河东软件园...
- c语言hypot函数,hypot ( )【C语言库函数源代码】
- Apache服务器访问过慢分析及解决
- 黑马程序员java学习打卡----程序流程控制
- 解密NFT区块链游戏和收藏品市场