JAVA用ImageIO处理JPG图片

    Image srcImage = ImageIO.read(srcFile);

// 原始图片大小
int srcImageWidth = srcImage.getWidth(null);
int srcImageHeight = srcImage.getHeight(null);

// 计算图片缩放后的大小
if (srcImageWidth >= srcImageHeight) {
newHeight = (int) Math.round((srcImageHeight * newWidth * 1.0 / srcImageWidth));
} else {
newWidth = (int) Math.round((srcImageWidth * newHeight * 1.0 / srcImageHeight));
}

BufferedImage distImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);

// 缩放图片

distImage.getGraphics().drawImage(srcImage.getScaledInstance(newWidth, newWidth, Image.SCALE_SMOOTH), 0, 0, null);

// 输出
OutputStream os = null;
try {
os = new FileOutputStream(destFile);
ImageIO.write(distImage, "JPG", os);
os.flush();
} finally {
os.close();
}
Java 中,可以使用 `javax.imageio.ImageIO` 类来读取和写入图像文件。如果要设置 JPG 图像的质量,可以通过以下步骤来实现: 1. 读取 JPG 图像文件: ```java BufferedImage image = ImageIO.read(new File("image.jpg")); ``` 2. 创建一个 `javax.imageio.ImageWriter` 对象,并设置输出参数: ```java ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(0.8f); // 设置 JPG 图像的质量 ``` 在上面的代码中,我们使用了 `getImageWritersByFormatName` 方法来获取 JPG 格式的 `ImageWriter` 对象,并使用 `getDefaultWriteParam` 方法来获取默认的输出参数。然后,我们将压缩模式设置为 `MODE_EXPLICIT`,并使用 `setCompressionQuality` 方法设置 JPG 图像的质量,这里设置的是 0.8f。 3. 创建一个 `javax.imageio.IIOImage` 对象,并将图像数据和输出参数传递给它: ```java IIOImage iioImage = new IIOImage(image, null, null); iioImage.setMetadata(null); ``` 在上面的代码中,我们使用 `IIOImage` 类来封装图像数据和输出参数。由于我们不需要元数据,所以将其设置为 `null`。 4. 将图像数据写入文件: ```java File output = new File("output.jpg"); ImageOutputStream outputStream = ImageIO.createImageOutputStream(output); writer.setOutput(outputStream); writer.write(null, iioImage, param); outputStream.close(); writer.dispose(); ``` 在上面的代码中,我们首先创建一个输出文件和一个 `ImageOutputStream` 对象,然后将其传递给 `ImageWriter` 对象。最后,我们调用 `write` 方法将图像数据写入文件,然后关闭输出流和 `ImageWriter` 对象。 完整代码示例: ```java import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.metadata.IIOMetadata; import javax.imageio.stream.ImageOutputStream; import javax.imageio.IIOImage; public class ImageQuality { public static void main(String[] args) throws Exception { BufferedImage image = ImageIO.read(new File("image.jpg")); ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(0.8f); IIOImage iioImage = new IIOImage(image, null, null); iioImage.setMetadata(null); File output = new File("output.jpg"); ImageOutputStream outputStream = ImageIO.createImageOutputStream(output); writer.setOutput(outputStream); writer.write(null, iioImage, param); outputStream.close(); writer.dispose(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值