Java JPG转PNG

标签 java image-processing awt image-editor

我在整个应用程序中使用通用格式作为 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,但没有修复它。

最佳答案

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

你怎么知道你得到的是 alpha channel ?如果您仍然想要 PNG 并希望确保您正在删除 alpha channel ,请将图像类型设置为 BufferedImage.TYPE_RGB,例如

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

您必须获取与新 BufferedImage 关联的图形对象并将 jpg 复制到它上面,然后将其写出。 This question与您的不完全相同,但包含您可能会觉得有用的示例代码。

保罗

关于Java JPG转PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6048559/

相关文章:

java - Java 中的通配符匹配和替换

java - 如何设置要在 JTextPane 中键入的文本的样式

java - 从java执行时如何为runas命令提供密码

iphone - iOS:裁剪从带有叠加层的 UIImagePickerController 相机抓取的静止图像

opencv - 来自 solvePnP 的 rvec/tvec 与来自 calibrateCamera 的 rvec/tvec

java - 调用 java "from Python"时分配超过 4 GB 的堆空间时出现问题

matlab - 如何在图像中找到子图像 3x3 的标准偏差

java - 为什么 MouseMotionListener 不起作用?

java - 类转换异常 - 鼠标事件

java - 如何在涵盖的 JPanel 上调用 MotionListener