前言

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

测试图片

1.测试图片1024px-768px.jpg:

2.作为水印的图片:

根据路径创建图片文件

package ThumbnaillatorTest;import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;import javax.imageio.ImageIO;import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.Thumbnails.Builder;
import net.coobird.thumbnailator.geometry.Positions;import org.junit.Test;public class ThumbTest {@Testpublic void testHandlePicture() throws IOException{//创建图片文件(此处为1024×768px的图片)和处理后的图片文件File fromPic=new File("picture/测试图片1024px-768px.jpg");File toPic=new File("picture/结果图片.jpg");File waterPic=new File("picture/水印图片.jpg");//作为水印的图片

注意:以上代码程序未结束,由下边粘贴代码不断追加。

按指定大小把图片进行缩放(会遵循原图高宽比例)

     //按指定大小把图片进行缩和放(会遵循原图高宽比例) //此处把图片压成400×500的缩略图Thumbnails.of(fromPic).size(400,500).toFile(toPic);//变为400*300,遵循原图比例缩或放到400*某个高度

效果如下:

按照指定比例进行缩小和放大

     //按照比例进行缩小和放大Thumbnails.of(fromPic).scale(0.2f).toFile(toPic);//按比例缩小Thumbnails.of(fromPic).scale(2f);//按比例放大

缩小效果如下:

放大由于过大,不再展示效果。

按指定的大小进行缩放(不遵循原图比例)

     //不按比例,就按指定的大小进行缩放Thumbnails.of(fromPic).size(100, 100).keepAspectRatio(false).toFile(toPic);//或者Thumbnails.of(fromPic).forceSize(100,100).toFile(toPic);

效果如下:

旋转图片

     //旋转图片,rotate(角度),正数则为顺时针,负数则为逆时针Thumbnails.of(fromPic).size(200,200).rotate(90).toFile(toPic);

效果如下:

图片尺寸不变,压缩图片文件大小

     //图片尺寸不变,压缩图片文件大小outputQuality实现,参数1为最高质量Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);

效果是图片的大小由原来的2M多,变为十几K的,图片还是较清晰。

给图片加水印

     //给图片加水印,watermark(位置,水印图,透明度)Positions.CENTER表示加在中间Thumbnails.of(fromPic).size(400,400).watermark(Positions.CENTER,ImageIO.read(waterPic),0.5f).outputQuality(0.8f).toFile(toPic);

效果如下:

图片裁剪

1.

     //用sourceRegion()实现图片裁剪//图片中心300*300的区域,Positions.CENTER表示中心,还有许多其他位置可选Thumbnails.of(fromPic).sourceRegion(Positions.CENTER,300,300).size(300,300).toFile(toPic);

效果如下:

2.

     //图片中上区域300*300的区域Thumbnails.of(fromPic).sourceRegion(Positions.TOP_CENTER,300,300).size(300,300).toFile(toPic);

效果如下:

3.

     Thumbnails.of(fromPic).sourceRegion(0,0,200,200).size(300,300).toFile(toPic);

效果如下:

转换图片格式

     //用outputFormat(图像格式)转换图片格式,保持原尺寸不变Thumbnails.of(fromPic).scale(1f).outputFormat("png").toFile("picture/png格式的图片.png");

效果就是格式由jpg变为png,图片大小没变。

输出成文件流OutputStream

     //输出成文件流OutputStreamOutputStream os=new FileOutputStream(toPic);Thumbnails.of(fromPic).size(120,120).toOutputStream(os);

输出成BufferedImage

     //输出BufferedImage,asBufferedImage()返回BufferedImageBufferedImage bi=Thumbnails.of(fromPic).size(120,120).asBufferedImage();ImageIO.write(bi,"jpg",toPic);

压缩至指定图片尺寸,保持图片不变形,多余部分裁剪掉

     //压缩至指定图片尺寸(例如:横400高300),保持图片不变形,多余部分裁剪掉(这个是引的网友的代码)BufferedImage image = ImageIO.read(fromPic);Builder<BufferedImage> builder = null;int imageWidth = image.getWidth();int imageHeitht = image.getHeight();if ((float)300 / 400 != (float)imageWidth / imageHeitht) {if (imageWidth > imageHeitht) {image = Thumbnails.of(fromPic).height(300).asBufferedImage();} else {image = Thumbnails.of(fromPic).width(400).asBufferedImage();}builder = Thumbnails.of(image).sourceRegion(Positions.CENTER, 400, 300).size(400, 300);} else {builder = Thumbnails.of(image).size(400, 300);}builder.outputFormat("jpg").toFile(toPic);

测试over!

 }}

相关jar下载

Thumbnailator免费下载

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/44685817

       最后,认真看过的网友们,大神们,如有感觉我这个程序猿有哪个地方说的不对或者不妥或者你有很好的提议或者建议或点子方法,还望您大恩大德施舍n秒的时间留下你的宝贵文字(留言),以便你,我,还有广大的程序猿们更快地成长与进步.......

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

  1. java 图片 缩略图_java 图片缩略图的两种方法

    最近网上看到两种不同的java图片缩略图的绘制方案 第一种,使用Graphics().drawImage按照一定的比例重新绘制图像. package com.image.suoluetu; impor ...

  2. Java图片加文字水印

    Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...

  3. C#开发自动照片(图片)裁剪(缩放)工具

    1.需求分析 用winform窗体程序,开发一个能够自动.批量对图片进行缩放和裁剪的程序. 原本想直接从网上找类型的工具直接用,但是无奈现在网上能找到的工具,要么不能用,要么就是很 恶心的下载完后还有 ...

  4. java 图片添加水印(文字水印+图片水印)

    一.图片水印(水印文件覆盖到源文件上) /*** @param buffImg 源文件(BufferedImage)* @param waterImg 水印文件(BufferedImage)* @pa ...

  5. 使用libjpeg-turbo库中的TurboJPEG API实现图片解压,缩放及压缩功能

    概述:前一篇博客中说到libjpeg-turbo的使用,有一些错误也在前篇博客中纠正了,现在呢,就用TurboJPEG API实现图片的解压,缩放,压缩. 1,直接上代码(简单粗暴,重要代码都加了注释 ...

  6. 网络生成批量配置_GitHub Star 3.2K Java 图片缩略图生成库

    大家好,我是你们的章鱼猫. 最近有一个需求是需要给网站的图片生成一个高质量的缩略图,方便在有些场景中展示.而在 Java 中,如果要对图片进行处理,需要了解和使用 Image I/O API.Java ...

  7. 生成图片_GitHub Star 3.2K Java 图片缩略图生成库

    大家好,我是你们的章鱼猫. 最近有一个需求是需要给网站的图片生成一个高质量的缩略图,方便在有些场景中展示.而在 Java 中,如果要对图片进行处理,需要了解和使用 Image I/O API.Java ...

  8. java 图片缩略图_java 缩略图实现

    用户上传图片然后生成缩略图显示.以下的代码是本人修改后的.提供给需要的朋友参考参考 ImageHandlerServlet 类 package com.web.util; import java.aw ...

  9. java 图片路径裁剪图片,Java中实现图片的裁剪

    我们将通过以下步骤来学习: 输入图像,指定要处理的图像路径 允许用户拖放要剪裁的部分 选择后使用 Robot 类来确定剪裁部分的坐标 剪裁所选图像并保持 代码由两个文件组成,一个是ImagePanel ...

最新文章

  1. Java字节码instrument研究
  2. 【js】四种自定义对象的常见方法
  3. C Check email existance in Outlook
  4. Django 3.2.5博客开发教程:HelloWorld欢迎页面
  5. SAP Hybris Enterprise Commerce Platform ECP和SAP CRM架构比较
  6. java接口抽象方法_Java 接口 抽象类 抽象方法
  7. 使用babel7 和 nodemon 进行node项目开发
  8. Linux:rsync error: remote command not found (code 127) at io.c(226) [sender=3.1.2
  9. 为什么OpenStack与其他开源项目不同
  10. ubuntu保存_Arch与Ubuntu安装软件对比
  11. Intellij IDEA神器居然还藏着这些实用小技巧,爽!!!
  12. 我可以在同一个catch子句中捕获多个Java异常吗?
  13. mysql并行读写_mysql数据库大规模数据读写并行时导致的锁表问题
  14. 开机自动运行记事本病毒的删除
  15. 使用html制作个人简历(新手)
  16. JAVA编写猜拳游戏
  17. 网络安全课第二节 XSS漏洞检测防御
  18. 信噪比(dB)换算公式
  19. java 切图_分布式切图服务——切图篇
  20. ​新型冠状病毒是对未来自我隔离的预演?

热门文章

  1. Keil中代码前进后退跳转快捷键修改
  2. html页面执行sql语句,关于在页面上执行sql语句
  3. sql join备忘
  4. 调用“抱抱脸团队打造的Transformers pipeline API” 通过预训练模型,快速训练和微调自己的模型
  5. 初读Geoffrey Hinton颠覆之作《Dynamic Routing Between Capsules》
  6. OpenCV中图像特征提取与描述
  7. ARM-------->第六天,IRQ中断
  8. 使用Anaconda写Python程序,强烈推荐Spyder
  9. hbase数据库_实验目的
  10. TI mmWave radar sensors Tutorial 笔记 | Module 4 : Some System Design Topics