Hello大家好,本章我們新增圖片壓縮處理功能 。有問題可以聯絡我mr_beany@163.com。另求各路大神指點,感謝
現在很多網站上,都有上傳圖片這個功能,而圖片對於現在的很多手機來說,拍攝出來的都是高清圖片,解析度也很高,當然佔用的儲存空間也就大了。問題也就產生了,你每個使用者都上傳個3M的圖片怎麼辦?
使用者如果載入你的網頁載入個半天,就是因為圖片太大導致的那就不是錢能解決的問題了。
因為使用者的網路環境你是不可控制的。所以本章我們新增圖片壓縮,新增水印,格式轉換等功能。
一:新增thumbnailator依賴
<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…
GitHub地址: github.com/MyBeany/myS…
寫文章不易,如對您有幫助,請幫忙點下star
結尾
新增圖片壓縮處理功能已完成,後續功能接下來陸續更新,有問題可以聯絡我mr_beany@163.com。另求各路大神指點,感謝大家。