当前位置: 首页 > article >正文

Java使用Thumbnails进行图片处理

一、前言

在做网站的时候经常会遇到图片加载的比较慢的问题,希望能够快一些。大多数情况下,我们在上传图片的时候是将原图片上传上去了,也就是图片实际多大就会显示多大。

很多情况中,网站的图片是非常大的,有的时候回超过10M甚至更大,那么网页在加载的时候当然会比较慢。

那么有没有什么方法既可以保证我们的图片清晰度又可以让我们的图片小一些呢?当然有,Thumbnails提供了图片的缩放、旋转、水印以及裁剪的功能

参考链接

名称地址
官方地址http://code.google.com/p/thumbnailator/

二、API介绍

API说明
Thumbnails.of(src).scale(0.2f).toFile(desc)按比例缩小
Thumbnails.of(src).scale(2f).toFile(desc)按比例放大

Thumbnails.of(src).size(100,100).keepAspectRatio(false).toFile(desc) 

Thumbnails.of(src).forceSize(100,100).toFile(desc)

不按比例,就按指定的大小进行缩放 
Thumbnails.of(src).scale(1f).outputQuality(0.25f).toFile(desc)图片尺寸不变,压缩图片文件大小 outputQuality(图像质量)   1为最高质量
Thumbnails.of(src).size(400,400).watermark(Positions.CENTER,ImageIO.read(waterPic),0.5f) .outputQuality(0.8f).toFile(desc)给图片加水印,watermark(位置,水印图,透明度)      Positions.CENTER 表示加在中间
Thumbnails.of(src).scale(1f).outputFormat("png") .toFile(desc)转换图片格式,用 outputFormat(图像格式) 转换图片格式,保持原尺寸不变 
Thumbnails.of(src).size(120,120).toOutputStream(os)输出成文件流OutputStream
Thumbnails.of(src).size(120,120).asBufferedImage()输出成BufferedImage  asBufferedImage() 返回BufferedImage BufferedImage

三、操作流程

1.引入依赖

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

2.代码演示

图片功能裁剪

//保持图片不变形,多余部分裁剪掉
//压缩至指定图片尺寸(例如:横400高300)
BufferedImage image = ImageIO.read(fromPic); 
Builder 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); //注意:scale、width|height、size三者不能同时共存,但必须要有一个

web端传输

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


http://www.kler.cn/a/393430.html

相关文章:

  • Spring Boot实现文件上传与OSS集成:从基础到应用
  • 比ChatGPT更酷的AI工具
  • Spring Boot 1.x 版本可以集成 Spring Cloud Sleuth
  • 深入解析 OpenHarmony 构建系统-4-OHOSLoader类
  • jmeter常用配置元件介绍总结之后置处理器
  • R语言机器学习与临床预测模型77--机器学习预测常用R语言包
  • 《C++跨平台编译:打破系统边界,释放代码潜能》
  • pytest执行用例时从conftest.py抛出ModuleNotFoundError:No module named ‘XXX‘异常的解决办法
  • YOLOv8进阶实战:融合SAHI超推理算法,在无人机应用中精准捕捉视频与图片中的微小目标
  • 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊
  • Avalonia UI 框架教程
  • Docker安装部署RabbitMQ(详细教程)
  • 【Java多线程】单例模式(饿汉模式和懒汉模式)
  • Docker 镜像和容器的导入导出及常用命令
  • 网络安全之SQL初步注入
  • Locally Linear Embedding (LLE)
  • 文件fd内容
  • 洛谷 P3043 [USACO12JAN] Bovine Alliance G
  • Python练习19
  • Nginx中使用keepalive实现保持上游长连接实现提高吞吐量示例与测试
  • 如何为 SeaTunnel 配置 MySQL 用户并授予权限
  • 实景三维赋能智慧公安建设
  • sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?
  • 爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)
  • ODOO学习笔记(8):模块化架构的优势
  • Java与HTML:构建静态网页