java压缩图片内存大小,但不改变分辨率大小,第二种方式

本文介绍了一种通过调整图片质量来压缩图片的方法,同时保持图片原始尺寸不变。该方法使用Java实现,涉及读取图片、按比例缩放并重新编码为JPEG格式。
/**
* @Title: compressPic 
* @Description: 压缩图片,通过压缩图片质量,保持原图大小
* @param  quality:0-1    
* @return byte[] 
* @throws
*/
public static byte[] compressPic(byte[] imageByte,float quality) {
byte[] inByte = null;
try {
ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte);
Image img = ImageIO.read(byteInput);
float newWidth = img.getWidth(null);
float newHeight = img.getHeight(null);


Image image = img.getScaledInstance((int) newWidth,(int) newHeight, Image.SCALE_SMOOTH);


// 缩放图像
BufferedImage tag = new BufferedImage((int) newWidth,
(int) newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = tag.createGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
ByteArrayOutputStream out = new ByteArrayOutputStream(imageByte.length);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
            JPEGEncodeParam jep=JPEGCodec.getDefaultJPEGEncodeParam(tag); 
            /* 压缩质量 */ 
            jep.setQuality((float)0.6, true); 
            encoder.encode(tag, jep); 
            inByte = out.toByteArray();
            out.close(); 

} catch (IOException ex) {
ex.printStackTrace();
}
return inByte;
}
### 使用Java压缩图片大小 为了实现图像尺寸的有效减小,可以采用多种方法和技术。一种常见的做法是调整图像分辨率和质量设置来减少文件体积而显著影响视觉效果。 #### 方法一:使用`ImageIO`类与自定义渲染参数 通过内置的 `javax.imageio.ImageIO` 类读取并写入图像数据,在保存过程中指定同的压缩级别: ```java import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import java.awt.image.BufferedImage; import java.io.File; public class ImageCompressor { public static void main(String[] args) throws Exception { File input = new File("input.jpg"); BufferedImage image = ImageIO.read(input); float compressionQuality = 0.7f; // Quality ranges from 0.0 to 1.0 Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg"); ImageWriter writer = writers.next(); ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(compressionQuality); File output = new File("output_compressed.jpg"); try (FileOutputStream fos = new FileOutputStream(output)) { writer.setOutput(ImageIO.createImageOutputStream(fos)); writer.write(null, new IIOImage(image, null, null), param); } System.out.println("Image compressed successfully."); } } ``` 此代码片段展示了如何利用 `ImageIO` 和其关联接口完成基本的JPEG格式图片压缩操作[^1]。 #### 方法二:借助第三方库Thumbnails 对于更复杂的需求或者希望简化编码工作量的情况,可以选择引入专门处理多媒体资源的开源项目如 Thumbnails 库来进行高效便捷的操作: 首先需添加Maven依赖项至项目的pom.xml 文件内: ```xml <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.17</version> </dependency> ``` 接着编写如下所示的核心逻辑部分用于执行实际的任务: ```java import net.coobird.thumbnailator.Thumbnails; import java.io.File; public class ThumbnailExample { public static void main(String[] args)throws IOException{ int width = 800; double quality = 0.9d; Thumbnails.of(new File("source_image_path")) .size(width, Integer.MAX_VALUE) .outputQuality(quality) .toFile(new File("destination_file_path")); System.out.println("Thumbnail created!"); } } ``` 上述例子说明了怎样运用 Thumbnailator 工具包快速生成固定宽度缩略图的同时保持较高的画质水平[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值