java 实现图片压缩
本文内容纲要:
转载https://www.cnblogs.com/strongmore/p/14158639.html
添加依赖
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
按质量压缩
importjava.io.File;
importjava.io.FileOutputStream;
importnet.coobird.thumbnailator.Thumbnails;
publicclassClient{
publicstaticvoidmain(String[]args)throwsException{
Thumbnails.of(newFile("D:/showqrcode.jpg"))
.scale(1f)//图片大小(长宽)压缩比例从0-1,1表示原图
.outputQuality(0.5f)//图片质量压缩比例从0-1,越接近1质量越好
.toOutputStream(newFileOutputStream("D:/showqrcode_50.jpg"));
}
}
按比例缩放
importjava.io.File;
importjava.io.FileOutputStream;
importnet.coobird.thumbnailator.Thumbnails;
publicclassClient2{
publicstaticvoidmain(String[]args)throwsException{
Thumbnails.of(newFile("D:/showqrcode.jpg"))
.scale(0.5f)//图片大小(长宽)压缩从0按照
.outputQuality(0.5f)//图片质量压缩比例从0-1,越接近1质量越好
.toOutputStream(newFileOutputStream("D:/showqrcode_50%.jpg"));
}
}
按大小和比例缩放
importjava.io.File;
importjava.io.FileOutputStream;
importnet.coobird.thumbnailator.Thumbnails;
publicclassClient21{
publicstaticvoidmain(String[]args)throwsException{
Thumbnails.of(newFile("D:/showqrcode.jpg"))
.size(500,300)//图片比例不变
.toOutputStream(newFileOutputStream("D:/showqrcode_500_300.jpg"));
}
}
按大小缩放
importjava.io.File;
importjava.io.FileOutputStream;
importnet.coobird.thumbnailator.Thumbnails;
publicclassClient22{
publicstaticvoidmain(String[]args)throwsException{
Thumbnails.of(newFile("D:/showqrcode.jpg"))
.forceSize(500,300)//不保持图片比例
.toOutputStream(newFileOutputStream("D:/showqrcode_500_300.jpg"));
}
}
旋转
importjava.io.File;
importjava.io.FileOutputStream;
importnet.coobird.thumbnailator.Thumbnails;
publicclassClient3{
publicstaticvoidmain(String[]args)throwsException{
Thumbnails.of(newFile("D:/showqrcode.jpg"))
.forceSize(500,300)
.rotate(90f)//向右旋转
.toOutputStream(newFileOutputStream("D:/showqrcode+90.jpg"));
}
}
加水印
importjava.io.File;
importjava.io.IOException;
importjavax.imageio.ImageIO;
importnet.coobird.thumbnailator.Thumbnails;
importnet.coobird.thumbnailator.geometry.Positions;
publicclassClient4{
publicstaticvoidmain(String[]args)throwsIOException{
Thumbnails.of("D:/showqrcode.jpg")
.size(1280,1024)
.watermark(Positions.BOTTOM_RIGHT,ImageIO.read(newFile("D:/watermark.jpg")),
0.5f)//位置,水印来源,透明度
.outputQuality(0.8f)
.toFile("D:/showqrcode_watermark_bottom_right.jpg");
}
}
裁剪
importjava.io.IOException;
importnet.coobird.thumbnailator.Thumbnails;
importnet.coobird.thumbnailator.geometry.Positions;
publicclassClient5{
publicstaticvoidmain(String[]args)throwsIOException{
Thumbnails.of("D:/showqrcode.jpg")
.sourceRegion(Positions.CENTER,800,600)//位置,宽,高
.size(800,600)
.keepAspectRatio(false)
.toFile("D:/showqrcode_region_center.jpg");
}
}
拼接
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Objects;
importjavax.imageio.ImageIO;
publicclassClient6{
publicstaticvoidmain(String[]args)throwsException{
byte[]bytes=joinImages(false,newFile("D:/showqrcode.jpg"),newFile("D:/showqrcode.jpg"));
if(Objects.nonNull(bytes)){
newByteArrayInputStream(bytes).transferTo(newFileOutputStream("D:/showqrcode_join.jpg"));
}
}
/**
*将多张图片拼接成一张
*
*@paramhorizontal是否为水平拼接
*@paramfiles文件列表
*@return拼接后的文件字节数组
*/
privatestaticbyte[]joinImages(booleanhorizontal,File...files)throwsIOException{
if(Objects.isNull(files)||files.length==0){
returnnull;
}
List<BufferedImage>imageList=newArrayList<>();
for(Filefile:files){
BufferedImageimage=ImageIO.read(file);
imageList.add(image);
}
intheight=imageList.get(0).getHeight();
intwidth=imageList.get(0).getWidth();
if(horizontal){
width=imageList.stream().mapToInt(BufferedImage::getWidth).sum();
}else{
height=imageList.stream().mapToInt(BufferedImage::getHeight).sum();
}
//创建拼接后的图片画布,参数分别为宽,高,类型,这里我们使用RGB3元色类型
BufferedImageresultImage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphicsgraphics=resultImage.getGraphics();
intpreviousWidth=0;
intpreviousHeight=0;
for(BufferedImageimage:imageList){
//向画布上画图片
graphics.drawImage(image,previousWidth,previousHeight,null);
if(horizontal){
previousWidth+=image.getWidth();
}else{
previousHeight+=image.getHeight();
}
}
ByteArrayOutputStreamoutput=newByteArrayOutputStream();
ImageIO.write(resultImage,"jpg",output);
returnoutput.toByteArray();
}
}
本文内容总结:
原文链接:https://www.cnblogs.com/aknife/p/14676674.html