日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 图片压缩100k_java实现图片压缩

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 图片压缩100k_java实现图片压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

我們在項目中經常會遇到圖片上傳的需求,如商品圖片,但圖片太大的話,在客戶端加載太慢影響用戶體驗,所有一般會將圖片進行壓縮。

實現

原圖

添加依賴

net.coobird

thumbnailator

0.4.8

按質量壓縮

import java.io.File;

import java.io.FileOutputStream;

import net.coobird.thumbnailator.Thumbnails;

public class Client {

public static void main(String[] args) throws Exception {

Thumbnails.of(new File("D:/showqrcode.jpg"))

.scale(1f) //圖片大小(長寬)壓縮比例 從0-1,1表示原圖

.outputQuality(0.5f) //圖片質量壓縮比例 從0-1,越接近1質量越好

.toOutputStream(new FileOutputStream("D:/showqrcode_50.jpg"));

}

}

壓縮后圖片

圖片大小從665KB壓縮到了77KB。

按比例縮放

import java.io.File;

import java.io.FileOutputStream;

import net.coobird.thumbnailator.Thumbnails;

public class Client2 {

public static void main(String[] args) throws Exception {

Thumbnails.of(new File("D:/showqrcode.jpg"))

.scale(0.5f) //圖片大小(長寬)壓縮 從0按照

.outputQuality(0.5f) //圖片質量壓縮比例 從0-1,越接近1質量越好

.toOutputStream(new FileOutputStream("D:/showqrcode_50%.jpg"));

}

}

按大小和比例縮放

import java.io.File;

import java.io.FileOutputStream;

import net.coobird.thumbnailator.Thumbnails;

public class Client21 {

public static void main(String[] args) throws Exception {

Thumbnails.of(new File("D:/showqrcode.jpg"))

.size(500, 300) // 圖片比例不變

.toOutputStream(new FileOutputStream("D:/showqrcode_500_300.jpg"));

}

}

按大小縮放

import java.io.File;

import java.io.FileOutputStream;

import net.coobird.thumbnailator.Thumbnails;

public class Client22 {

public static void main(String[] args) throws Exception {

Thumbnails.of(new File("D:/showqrcode.jpg"))

.forceSize(500, 300) //不保持圖片比例

.toOutputStream(new FileOutputStream("D:/showqrcode_500_300.jpg"));

}

}

旋轉

import java.io.File;

import java.io.FileOutputStream;

import net.coobird.thumbnailator.Thumbnails;

public class Client3 {

public static void main(String[] args) throws Exception {

Thumbnails.of(new File("D:/showqrcode.jpg"))

.forceSize(500, 300)

.rotate(90f) //向右旋轉

.toOutputStream(new FileOutputStream("D:/showqrcode+90.jpg"));

}

}

加水印

水印圖片

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;

import net.coobird.thumbnailator.geometry.Positions;

public class Client4 {

public static void main(String[] args) throws IOException {

Thumbnails.of("D:/showqrcode.jpg")

.size(1280, 1024)

.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("D:/watermark.jpg")),

0.5f) //位置,水印來源,透明度

.outputQuality(0.8f)

.toFile("D:/showqrcode_watermark_bottom_right.jpg");

}

}

裁剪

import java.io.IOException;

import net.coobird.thumbnailator.Thumbnails;

import net.coobird.thumbnailator.geometry.Positions;

public class Client5 {

public static void main(String[] args) throws IOException {

Thumbnails.of("D:/showqrcode.jpg")

.sourceRegion(Positions.CENTER, 800, 600) //位置,寬,高

.size(800, 600)

.keepAspectRatio(false)

.toFile("D:/showqrcode_region_center.jpg");

}

}

拼接

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.Objects;

import javax.imageio.ImageIO;

public class Client6 {

public static void main(String[] args) throws Exception {

byte[] bytes = joinImages(false, new File("D:/showqrcode.jpg"), new File("D:/showqrcode.jpg"));

if (Objects.nonNull(bytes)) {

new ByteArrayInputStream(bytes).transferTo(new FileOutputStream("D:/showqrcode_join.jpg"));

}

}

/**

* 將多張圖片拼接成一張

*

* @param horizontal 是否為水平拼接

* @param files 文件列表

* @return 拼接后的文件字節數組

*/

private static byte[] joinImages(boolean horizontal, File... files) throws IOException {

if (Objects.isNull(files) || files.length == 0) {

return null;

}

List imageList = new ArrayList<>();

for (File file : files) {

BufferedImage image = ImageIO.read(file);

imageList.add(image);

}

int height = imageList.get(0).getHeight();

int width = imageList.get(0).getWidth();

if (horizontal) {

width = imageList.stream().mapToInt(BufferedImage::getWidth).sum();

} else {

height = imageList.stream().mapToInt(BufferedImage::getHeight).sum();

}

//創建拼接后的圖片畫布,參數分別為寬,高,類型,這里我們使用RGB3元色類型

BufferedImage resultImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics graphics = resultImage.getGraphics();

int previousWidth = 0;

int previousHeight = 0;

for (BufferedImage image : imageList) {

//向畫布上畫圖片

graphics.drawImage(image, previousWidth, previousHeight, null);

if (horizontal) {

previousWidth += image.getWidth();

} else {

previousHeight += image.getHeight();

}

}

ByteArrayOutputStream output = new ByteArrayOutputStream();

ImageIO.write(resultImage, "jpg", output);

return output.toByteArray();

}

}

更多用法請參考官方文檔

總結

圖片經過以上處理之后都會去除EXIF信息,關于EXIF詳情,請查看java獲取圖片的GPS信息

參考

總結

以上是生活随笔為你收集整理的java 图片压缩100k_java实现图片压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。