详解java google Thumbnails 图片处理

在后端开发的过程中,都逃不开与文件传输特别是图片的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照片更是越来越清晰,但是照片文件的大小也是越来越大了,手机拍照小则2M大则30M这在网络传输过程中谁顶得住呀!所以在用户发布照片,后端对图像文件进行保存的过程中压缩图像文件是必不可少的一个过程。
Thumbnails就是一个很好的图像处理工具,他把复杂的图像处理封装的很好,只需要短短的一行代码就能完成对图像的压缩。
Thumbnails支持:

  • 指定大小进行缩放
  • 按照比例进行缩放
  • 不按照比例,指定大小进行缩放
  • 旋转
  • 水印
  • 裁剪
  • 转化图像格式
  • 输出到OutputStream
  • 输出到BufferedImage
  • 输出到ByteArrayOutputStream(OutputStream)
  • 输出到ByteArrayInputStream(InputStream)
  • 输出到byte[]

Thumbnails导入依赖

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

一,指定大小进行缩放

//size(宽度, 高度) 

/*
 * 若图片横比200小,高比300小,不变
 * 若图片横比200小,高比300大,高缩小到300,图片比例不变
 * 若图片横比200大,高比300小,横缩小到200,图片比例不变
 * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300
 */
Thumbnails.of("images/a380_1280x1024.jpg")
 .size(200, 300)
 .toFile("c:/a380_200x300.jpg"); 

Thumbnails.of("images/a380_1280x1024.jpg")
 .size(2560, 2048)
 .toFile("c:/a380_2560x2048.jpg");

二,单个图片等比例缩放

File file = new File("c:\\test.png");

Thumbnails.of(new FileInputStream(file)).scale(3.0).toFile(new File("c:\\yyyyy.png"));

3.0是一个double类型的数字,缩放比例,大于1就是变大,小于1就是缩小

三,不按照比例,指定大小进行缩放

//keepAspectRatio(false) 默认是按照比例缩放的
Thumbnails.of("images/a380_1280x1024.jpg")
 .size(200, 200)
 .keepAspectRatio(false)
 .toFile("c:/a380_200x200.jpg");

四,批量产生缩略图

Thumbnails.of(new File("D:\\pics").listFiles()).scale(0.2).outputFormat("png")

.toFiles(Rename.PREFIX_DOT_THUMBNAIL);

五,控制图片质量,图片尺寸不变

File fromPic = new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_1531741954688.jpeg");
File toPic =new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_08.jpeg");
Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);

outputQuality就是用来控制图片质量的

六,给图片加水印

Thumbnails.of(fromPic).scale(0.8)
 .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(waterPic), 0.5f)
 .outputQuality(0.8f).toFile(toPic);

//watermark(位置,水印图,透明度)
Thumbnails.of("images/a380_1280x1024.jpg")
 .size(1280, 1024)
 .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f)
 .outputQuality(0.8f)
 .toFile("c:/a380_watermark_bottom_right.jpg"); 

Thumbnails.of("images/a380_1280x1024.jpg")
 .size(1280, 1024)
 .watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f)
 .outputQuality(0.8f)
 .toFile("c:/a380_watermark_center.jpg");

fromPic是原图,waterPic是水印图片,toPic是生成后的图片

七,旋转图片

Thumbnails.of(fromPic).scale(0.5).rotate(90).toFile(toPic); 

八,图片裁剪

Thumbnails.of(fromPic).sourceRegion(Positions.CENTER, 300, 300).scale(1.0).toFile(toPic);

//sourceRegion() 

//图片中心400*400的区域
Thumbnails.of("images/a380_1280x1024.jpg")
 .sourceRegion(Positions.CENTER, 400,400)
 .size(200, 200)
 .keepAspectRatio(false)
 .toFile("c:/a380_region_center.jpg"); 

//图片右下400*400的区域
Thumbnails.of("images/a380_1280x1024.jpg")
 .sourceRegion(Positions.BOTTOM_RIGHT, 400,400)
 .size(200, 200)
 .keepAspectRatio(false)
 .toFile("c:/a380_region_bootom_right.jpg"); 

//指定坐标
Thumbnails.of("images/a380_1280x1024.jpg")
 .sourceRegion(600, 500, 400, 400)
 .size(200, 200)
 .keepAspectRatio(false)
 .toFile("c:/a380_region_coord.jpg");

九,WEB输出流图片

某些应用上传的图片可能质量比较高,但是用户在列表浏览的时候,又不想原图展示,因为带宽要求较高,此时可以降低图片质量(上面提到的outputQuality),以outputstream输出流的方式response给浏览器去展示

@RequestMapping("/getImages")
 public void getImages(HttpServletRequest request, HttpServletResponse response) throws IOException {
 Thumbnails.of("images/a380_1280x1024.jpg").
  scale(1f).
  outputQuality(0.5f).
  outputFormat("jpg").toOutputStream(response.getOutputStream());
 }

十,图像的格式转换

//outputFormat(图像格式)
Thumbnails.of("images/a380_1280x1024.jpg")
 .size(1280, 1024)
 .outputFormat("png")
 .toFile("c:/a380_1280x1024.png"); 

Thumbnails.of("images/a380_1280x1024.jpg")
 .size(1280, 1024)
 .outputFormat("gif")
 .toFile("c:/a380_1280x1024.gif");

十一,输出到BufferedImage

//asBufferedImage() 返回BufferedImage
BufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg")
 .size(1280, 1024)
 .asBufferedImage(); 

ImageIO.write(thumbnail, "jpg", new File("c:/a380_1280x1024_BufferedImage.jpg")); 

十二,输出到ByteArrayOutputStream(OutputStream)

ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();
Thumbnails.of("images/a380_1280x1024.jpg").
   scale(1f).
   outputQuality(0.5f).
   outputFormat("jpg").toOutputStream(thumbnailOutputStream);

十三,输出到ByteArrayInputStream(InputStream)

ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();
Thumbnails.of("images/a380_1280x1024.jpg").
   scale(1f).
   outputQuality(0.5f).
   outputFormat("jpg").toOutputStream(thumbnailOutputStream);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(thumbnailOutputStream.toByteArray());

十三,输出到byte[]

ByteArrayOutputStream handlerOutputStream = new ByteArrayOutputStream();
  Thumbnails.of(inputStream).
   scale(1f).
   outputQuality(0.25f).
   outputFormat("jpg").toOutputStream(handlerOutputStream);
byte[] bytes = handlerOutputStream.toByteArray();

到此这篇关于java google Thumbnails 图片处理的文章就介绍到这了,更多相关java google Thumbnails 图片处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java图片处理 (文字水印、图片水印、缩放、补白)代码实例

    package com.hmw.picMark; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.im

  • Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】

    本文实例讲述了Java实现的微信图片处理工具类.分享给大家供大家参考,具体如下: 现在 外面核心,图片文章比较少,看了拷贝代码,而用不了,用相应jar包处理,很多等比例缩放,达不到 想要的给予的期望:本工具类,是之前做微信打印机写的 基于java自带的类,基于rgb. package com.zjpz.util; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt

  • Java 使用Thumbnails对大图片压缩

    引言 在最近的项目开发中,经常会使用到图片上传,但是过大的图片在查看的时候会影响打开速度,浪费流量以及服务器存储空间,所以需要在后端处理完图片再上传,这里我们用到了Thumbnails图片处理工具类. Thumbnails主要支持以下一些功能 1.指定大小进行缩放 2.按照比例进行缩放 3.不按照比例,指定大小进行缩放 4.旋转 5.水印 6.裁剪 7.转化图片格式 8.输出到OutputStream 9.输出到BufferedImage 使用步骤: 一.添加Maven <dependency>

  • Java图片处理开源框架Thumbnailator

    图片处理是当今软件开发中非常重要的一环,然而处理图片的开源框架却并不多.现金网上流传的Java处理图片的代码,虽然可对图片进行简单处理,但效果并不理想.虽然也有些其他解决方案,但都摆脱不了繁琐,使用起来十分不方便. 为了解决这个问题,我也是在网上找了好久,看了很多资料,功夫不负有心人,最终找到了一个处理图片十分棒的开源框架.特此拿出来与大家分享. Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象

  • 简单的java图片处理类(图片水印 图片缩放)

    复制代码 代码如下: import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Toolkit;import java.awt.color.ColorSpace;import java.awt.geom.AffineTransfo

  • Java图片处理之获取gif图一帧图片的两种方法

    前言 本文主要给大家介绍了关于Java获取gif图一帧图片的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.Java原生代码实现gif获取一帧图片 先看测试代码: public static void main(String[] args) { /*这儿填写你存放要缩小图片的文件夹全地址*/ String src = "c:/5.gif" ; /*这儿填写你转化后的图片存放的文件夹*/ String tar = "c:/5_frame_2.jp

  • 详解java google Thumbnails 图片处理

    在后端开发的过程中,都逃不开与文件传输特别是图片的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照片更是越来越清晰,但是照片文件的大小也是越来越大了,手机拍照小则2M大则30M这在网络传输过程中谁顶得住呀!所以在用户发布照片,后端对图像文件进行保存的过程中压缩图像文件是必不可少的一个过程. 而Thumbnails就是一个很好的图像处理工具,他把复杂的图像处理封装的很好,只需要短短的一行代码就能完成对图像的压缩. Thumbnails支持: 指定大小进行缩放 按照比例进行缩放 不按照比例

  • 详解JAVA生成将图片存入数据库的sql语句实现方法

    详解JAVA生成将图片存入数据库的sql语句实现方法 实现代码: 注释很清楚,不在重述~ public class Image2Hex { public static void main(String[] args) { try{ //存放图片的文件夹 File list = new File("d:/qmx"); File[] lists = list.listFiles(); String name; //生成的语句存放文件 PrintWriter pw = new PrintWr

  • 详解Java中的OkHttp JSONP爬虫

    目录 什么是JSOUP 什么是OkHttp 爬虫需要掌握的技术 需要的依赖 JSON入门Demo JSOUP常用方法 使用JSOUP 方式连接 User-Agent(随机) 后台爬虫的三大问题 selenium+phantomjs(维护中…内容重新整理) 什么是JSOUP JSOUP 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. 官网 jsoup实现了WHATWG

  • 详解Java读取本地文件并显示在JSP文件中

    详解Java读取本地文件并显示在JSP文件中 当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相对路径,还可以是网络上的图片路径.在存取少量图片的情况下,采用相对路径存储图片的情况下最方便,也最实用.但是当图片数量过多时,这种方式就显的有些掣肘了. 当系统的图片数量过多时,如果仍把这些图片当做项目的一部分去发布,势必会大大延长项目的发布时间及更新时间.对于某些对于时限性要求特别高的系统来说,采

  • 详解Java的堆内存与栈内存的存储机制

    堆与内存优化     今天测了一个项目的数据自动整理功能,对数据库中几万条记录及图片进行整理操作,运行接近到最后,爆出了java.lang.outOfMemoryError,java heap space方面的错误,以前写程序很少遇到这种内存上的错误,因为java有垃圾回收器机制,就一直没太关注.今天上网找了点资料,在此基础上做了个整理.  一.堆和栈 堆-用new建立,垃圾回收器负责回收 1.程序开始运行时,JVM从OS获取一些内存,部分是堆内存.堆内存通常在存储地址的底层,向上排列. 2.堆

  • 详解Java ArrayList类

    ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素. ArrayList 继承了 AbstractList ,并实现了 List 接口. ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下: import java.util.ArrayList; // 引入 ArrayList 类 ArrayList<E> objectName =new ArrayList<>(); // 初始化 E

  • 详解Java中的不可变对象

    不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真正意图和考虑点是什么?可能一些朋友没有细想过这些问题,今天我们就来聊聊跟不可变对象有关的话题. 一.什么是不可变对象 下面是<Effective Java>这本书对于不可变对象的定义: 不可变对象(Immutable Object):对象一旦被创建后,对象所有的状态及属性在其生命周期内不会发生任何变化. 从不可变对象的定义来看,

  • 详解Java 包扫描实现和应用(Jar篇)

    如果你曾经使用过 Spring, 那你已经配过 包扫描路径吧,那包扫描是怎么实现的呢?让我们自己写个包扫描 上篇文章中介绍了使用 File 遍历的方式去进行包扫描,这篇主要补充一下jar包的扫描方式,在我们的项目中一般都会去依赖一些其他jar 包, 比如添加 guava 依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <ve

  • 详解JAVA Spring 中的事件机制

    说到事件机制,可能脑海中最先浮现的就是日常使用的各种 listener,listener去监听事件源,如果被监听的事件有变化就会通知listener,从而针对变化做相应的动作.这些listener是怎么实现的呢?说listener之前,我们先从设计模式开始讲起. 观察者模式 观察者模式一般包含以下几个对象: Subject:被观察的对象.它提供一系列方法来增加和删除观察者对象,同时它定义了通知方法notify().目标类可以是接口,也可以是抽象类或具体类. ConcreteSubject:具体的

  • 详解Java的引用类型及使用场景

    每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过"引用".在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference).软引用(Soft Reference).弱引用(Weak Reference).虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱,今天这篇文章就简单介绍一下这四种类型,并简单说一下他们的使用场景. 1. 强引用(Strong

随机推荐