3

我在整个应用程序中使用通用格式的图像作为 png。上传的任何 jpg 图像仍然使用以下代码保存为 png。

java.awt.image.BufferedImage bufferedImage = ImageIO.read(jpgImagePAth);

 if(!IsExtensionPng(jpgImagePath)){
        ImageIO.write(bufferedImage, "png", new File(pptFolder, justNamePng));
  }

但这会保留 alpha,即使它不在 jpg 中,所以 2MB 图像 7MB 和 6MB 到 16MB 。无论如何在不保持 alpha 的情况下保存 png 吗?

我需要转换为 PNG 的原因是,稍后当我在图像上添加文本时,它会失去实际分辨率。我已经尝试过没有修复它的无损 JPEG。

4

2 回答 2

2

导致文件大小增长的不是 Alpha 通道,而是文件类型。JPG 使用有损压缩;PNG是无损压缩。换句话说,JPG 正在丢弃一些数据以减小文件的大小。这就是为什么您在保存为 JPG 时选择“质量”级别的原因 - 这决定了丢弃的数量。

你怎么知道你得到了 alpha 通道?如果您仍然想要 PNG 并且想确保要删除 alpha 通道,请将图像类型设置为 BufferedImage.TYPE_RGB,例如

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_RGB);

您必须获取与新 BufferedImage 关联的图形对象并将 jpg 复制到其上,然后将其写出。 这个问题与您的问题不完全相同,但您可能会发现有用的示例代码。

保罗

于 2011-05-18T17:40:50.620 回答
1

不知道你具体是什么情况。但我应该保留 JPEG JPEG。将 JPEG 转换为 PNG 的唯一优点是浪费硬盘空间。

于 2011-05-18T17:25:50.193 回答