首页 文章资讯内容详情

java 实现图片压缩

2026-06-01 4 花语

本文内容纲要:

转载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