Hello 大家好, 本章我们添加图片压缩处理功能 . 有问题可以联系我 mr_beany@163.com. 另求各路大神指点, 感谢
现在很多网站上, 都有上传图片这个功能, 而图片对于现在的很多手机来说, 拍摄出来的都是高清图片, 分辨率也很高, 当然占用的存储空间也就大了. 问题也就产生了, 你每个用户都上传个 3M 的图片怎么办?
用户如果加载你的网页加载个半天, 就是因为图片太大导致的那就不是钱能解决的问题了.
因为用户的网络环境你是不可控制的. 所以本章我们添加图片压缩, 添加水印, 格式转换等功能.
一: 添加 thumbnailator 依赖
- <dependency>
- <groupId>net.coobird</groupId>
- <artifactId>thumbnailator</artifactId>
- <version>0.4.8</version>
- </dependency>
二: 创建图片处理类
创建 coreutilsImageUtils.java
- package com.example.demo.core.utils;
- import net.coobird.thumbnailator.Thumbnails;
- import net.coobird.thumbnailator.geometry.Positions;
- import net.coobird.thumbnailator.name.Rename;
- import net.coobird.thumbnailator.resizers.configurations.ScalingMode;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import javax.imageio.ImageIO;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- /**
- * 图片处理工具类, 主要压缩, 添加 logo 等
- * @author 张瑶
- */
- public class ImageUtils {
- public static Logger logger = LoggerFactory.getLogger(ImageUtils.class);
- public static void main(String[] args) {
- // 使用给定的图片生成指定大小的图片
- //generateFixedSizeImage();
- // 对原图加水印, 然后顺时针旋转 90 度, 最后压缩为 80% 保存
- //generateRotationWatermark();
- // 转换图片格式, 将流写入到输出流
- //generateOutputstream();
- // 按比例缩放图片
- //generateScale();
- // 生成缩略图到指定的目录
- //generateThumbnail2Directory();
- // 将指定目录下所有图片生成缩略图
- //generateDirectoryThumbnail();
- }
- /**
- * 使用给定的图片生成指定大小的图片
- */
- public static void generateFixedSizeImage(){
- try {
- Thumbnails.of("C:\\Users\\Administrator\\Desktop\\ 微信图片_20180129100019.jpg").size(80,80).toFile("C:\\Users\\Administrator\\Desktop\\newmeinv.jpg");
- } catch (IOException e) {
- logger.error(e.getMessage());
- }
- }
- /**
- * 对原图加水印, 然后顺时针旋转 90 度, 最后压缩为 80% 保存
- */
- public static void generateRotationWatermark(){
- try {
- Thumbnails.of("C:\\Users\\Administrator\\Desktop\\ 微信图片_20180129100019.jpg").
- // 缩放大小
- size(1600,1600).
- // 顺时针旋转 90 度
- rotate(90).
- // 水印位于右下角, 半透明
- watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\ 微信图片_20180329153521.png")),1f).
- // 图片压缩 80% 质量
- outputQuality(0.8).
- toFile("C:\\Users\\Administrator\\Desktop\\2016010208_new.jpg");
- } catch (IOException e) {
- logger.error(e.getMessage());
- }
- }
- /**
- * 转换图片格式, 将流写入到输出流
- */
- public static void generateOutputstream(){
- try(OutputStream outputStream = new FileOutputStream("data/2016010208_outputstream.png")) {
- Thumbnails.of("data/2016010208.jpg").
- size(500,500).
- // 转换格式
- outputFormat("png").
- // 写入输出流
- toOutputStream(outputStream);
- } catch (IOException e) {
- logger.error(e.getMessage());
- }
- }
- /**
- * 按比例缩放图片
- */
- public static void generateScale(){
- try {
- Thumbnails.of("data/2016010208.jpg").
- scalingMode(ScalingMode.BICUBIC).
- // 图片缩放 80%, 不能和 size() 一起使用
- scale(0.8).
- // 图片质量压缩 80%
- outputQuality(0.8).
- toFile("data/2016010208_scale.jpg");
- } catch (IOException e) {
- logger.error(e.getMessage());
- }
- }
- /**
- * 生成缩略图到指定的目录
- */
- public static void generateThumbnail2Directory(){
- try {
- Thumbnails.of("data/2016010208.jpg","data/meinv.jpg").
- // 图片缩放 80%, 不能和 size() 一起使用
- scale(0.8).
- // 指定的目录一定要存在, 否则报错
- toFiles(new File("data/new/"), Rename.NO_CHANGE);
- } catch (IOException e) {
- logger.error(e.getMessage());
- }
- }
- /**
- * 将指定目录下所有图片生成缩略图
- */
- public static void generateDirectoryThumbnail(){
- try {
- Thumbnails.of(
- new File("data/new").listFiles()).
- scale(0.8).
- toFiles(new File("data/new/"), Rename.SUFFIX_HYPHEN_THUMBNAIL);
- } catch (IOException e) {
- logger.error(e.getMessage());
- }
- }
- }
三: 基本使用方法介绍
- Thumbnails.of("原图文件的路径")
- // 生成图片大小
- .size(100,100)
- // 缩放比例 0-1 之间
- .scale(1f)
- // 图片质量 0-1 之间 1 最好
- .outputQuality(0.5f)
- // 顺时针旋转度数
- .rotate(90)
- // 水印 第一个参数: 水印位置 第二个: 水印所在路径 第三个: 水印透明度
- .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("水印所在路径")),1f).
- .toFile("压缩后文件的路径");
四: 文档地址
具体示例大家可自行查看
帮助文档 https://github.com/coobird/thumbnailator/wiki/Examples
项目地址
https://gitee.com/beany/mySpringBoot
写文章不易, 如对您有帮助, 请帮忙点下 star
结尾
添加图片压缩处理功能已完成, 后续功能接下来陆续更新, 有问题可以联系我 mr_beany@163.com. 另求各路大神指点, 感谢大家.
来源: https://juejin.im/post/5b138045f265da6e603934ab