Hello大家好,本章我们添加图片压缩处理功能 。有问题可以联系我mr_beany@163.com。另求各路大神指点,感谢
现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的都是高清图片,分辨率也很高,当然占用的存储空间也就大了。问题也就产生了,你每个用户都上传个3M的图片怎么办?
用户如果加载你的网页加载个半天,就是因为图片太大导致的那就不是钱能解决的问题了。
因为用户的网络环境你是不可控制的。所以本章我们添加图片压缩,添加水印,格式转换等功能。
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
创建core→utils→ImageUtils.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("压缩后文件的路径");
具体示例大家可自行查看
帮助文档
gitee.com/beany/mySpr…
写文章不易,如对您有帮助,请帮忙点下star
添加图片压缩处理功能已完成,后续功能接下来陆续更新,有问题可以联系我mr_beany@163.com。另求各路大神指点,感谢大家。