轉載https://www.cnblogs.com/strongmore/p/14158639.html
添加依賴 <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> 按質量壓縮 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")); } }
按比例縮放 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<BufferedImage> 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(); } }
