Thumbnailator压缩图片

  Thumbnailator是一款不可多得的处理图片的第三方工具包,它写法简单到让人无法相信,Java本身也有处理图片压缩的方法,但是代码冗长到让人痛不欲生,在篇末会给出Java本身的实现方式,做下对比,已体现Thumbnailator的强大。前段时间做分期的一种相对简单的业务,需要传递用户的身份信息,相关合同信息等相关图片(做个业务传这么多图片,我是用户肯定say goodbye了,不忍吐槽),其实图片上传后不需要显示大图,只需要缩略图而已,在另外的审核页面才需要这样的原图。说了这个背景,那解约图片太大传输太慢,严重影响体验(这样说显得高大上,其实我们部署了四个节点,而且对用户资质要求严格,用户量不会很大......),就拿时间解决下图片压缩的问题,就查到了这个Thumbnailator工具包,今天顺便就把这个的主要用法写下来,以后遇到直接拿来了,原图就用女神-斯嘉丽约翰逊吧,哈哈哈。

  好,上一张原图

  其余压缩或者处理过的图片就放到demo目录下,在文末会给出地址

  这里方便都直接转换成文件了,其实可以转成流的用于传输(我是废话了...)

一.  Thumbnailator对图片的处理 

  1.Thumbnailator对图片进行指定尺寸的压缩。

1 String result = "src/main/resources/images/";
2 Thumbnails.of(result + "sijili.jpg").size(200, 300).toFile(result + "image_200x300.jpg");

  2.Thumbnailator对图片进行指定比例的压缩。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(0.5f).toFile(result + "image_0.5f.jpg");

  3.Thumbnailator对图片进行旋转。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).rotate(180).toFile(result + "image_r180.jpg");

4.Thumbnailator对图片进行格式转换。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).outputFormat("png").toFile(result + "image_sijiali.png");

5.Thumbnailator对图片进行剪裁。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).sourceRegion(Positions.CENTER, 400, 400).toFile(result + "image_center.png");
Thumbnails.of(result + "sijili.jpg").sourceRegion(100, 100, 100, 100).scale(1.0f).toFile(result + "image_100_4.jpg");

6.Thumbnailator对图片进行加水印操作。

String result = "src/main/resources/images/";
 // watermark 参数 1.位置 2.水印图片 3.透明度
Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, ImageIO.read(new File(result + "warter.jpg")), 0.25f).toFile(result + "image_warter.jpg");

  7.Thumbnailator对图片进行加文字水印操作。

String result = "src/main/resources/images/";
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setColor(Color.LIGHT_GRAY);
g.drawRect(0, 0, 10, 10);
char[] data = "liudTest".toCharArray();
g.drawChars(data, 0, data.length, 5, 32);

// watermark 参数 1.位置 2.水印 3.透明度
Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, bi, 1.0f).toFile(result + "image_warter_liud.jpg");

Thumbnailator对图片进行加文字水印的方式,并不推荐,可以先对文字处理成图片之后在加水印,看上面代码的冗长也不符合Thumbnailator的风格不是。

二 . Java原生对图片的处理

String result = "src/main/resources/images/";
OutputStream os = new FileOutputStream(result + "sijili_out.jpg");

Image image = ImageIO.read(new File(result + "sijili.jpg"));

BufferedImage bufferedImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
        bufferedImage.getGraphics().drawImage(image.getScaledInstance(100, 100, image.SCALE_SMOOTH), 0, 0, null);

ImageIO.write(bufferedImage, "jpg",os);
os.close();

关于图片处理就先总结到这,代码的地址就放到我的github下了,地址是https://github.com/liujava/myDailyNote,欢迎下载,并提出意见。

时间: 2024-11-05 02:35:05

Thumbnailator压缩图片的相关文章

springboot整合thumbnailator实现图片压缩

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

java上传图片并压缩图片大小

Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量.还支持对一个目录的所有图片进行批量处理操作.支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例.另外值得一提的是,Thumbnailator至今仍不断更新,怎么样,感觉很有保障吧!Thumbnailator官网:h

Android压缩图片和libjpeg库

前言 Fjpeg使用 Fjpeg 注意 如何使用 如何压缩图片只改变在硬盘的存储大小 如何改变图片分辨率让其Bitmap对象可以加载到内存中 关于重载版本 开始学习之旅 补充知识的结论 修改图片分辨率 防止在Android加载Bitmap的时候oom内存溢出 解决方案1 解决方案2 希望压缩图片方便网络传输 第一种方案利用Bitmapcompress方法压缩 第二种利用libjpeg压缩 在Android50测试两个 图片压缩 在Android60测试两个 图片压缩 解释Android50和60

Grunt压缩图片

今天我们来说一下用Grunt来压缩图片和JS吧! 首先要安装插件: 这是压缩图片的; npm install --save-dev gulp-imagemin 这是压缩JS的: npm install --save-dev gulp-imagemin 然后引入依赖: var gulp = require("gulp"); 在引入插件: var imagemin = require('gulp-imagemin');//压缩图片 var uglifyJS = require('gulp-

android压缩图片,解决oom错误

你的ImageView只有128*96像素的大小,只是为了显示一张缩略图,这时候把一张1024*768像素的图片完全加载到内存中显然是不值得的. 所以我们需要一个方法来解决这个问题. [java] view plaincopy public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { // 源图片的高度和宽度 final int height = op

压缩图片

NSData *data = UIImageJPEGRepresentation(image, 0.001); UIImage * preImage = [UIImage imageWithData:data]; [preImage drawInRect:CGRectMake(0, 0, ScreenWidth, ScreenHeight)]; 压缩图片分压和缩 如果只压,压到一定比例就不能再压了 所以还要缩

iOS一行代码压缩图片大小

现在基本所有应用都与图片相关联,这就必然涉及到上传下载图片,而用户的流量又迟迟没有被解放,因此图片就不能太大,我们知道iPhone一张照片动辄几M,如果都传原图那流量就会爆炸,粗暴地缩小又会影响图片的分辨率.那有没有办法在保持一定分辨率的情况下压缩图片呢?有的,而且非常简单,一行代码搞定,是苹果自带的压缩函数: UIImageJPEGRepresentation UIImagePNGRepresentation 这两个函数都是iOS自带的图片压缩工具.一个是压成JPEG格式,一个是压成PNG格式

Fastdfs与nginx进行压缩图片比率随记

前阵子,工作搞了一下Fastdfs与nginx进行压缩图片比率存储在server中,今天应用下工作时间记录下.本打算周六,老是由于一些事情给耽搁,眼下正在搞一个XMPP消息通讯协议,眼下还是一头雾水.没有实现什么功能,在此勉励,加油好好搞搞,搞好了记录下一些登录.退出.发送.接收的一些接口给client使用. 在此先把前面自己做的那个功能在此分享下.是一个模仿淘宝的,希望大神们有什么想法能够指教: 參考:http://www.v2ex.com/t/113845 http://blog.sina.

Android 高清加载巨图方案 拒绝压缩图片

Android 高清加载巨图方案 拒绝压缩图片