【问题标题】:Conversion in Java from PNG to JPG changes white color into red [duplicate]Java中从PNG到JPG的转换将白色变为红色[重复]
【发布时间】:2015-08-10 07:53:34
【问题描述】:

使用转换图像时

UploadedFile uf; //as a paremeter in function; PrimeFaces Object;
BufferedImage old = ImageIO.read(uf.getInputstream());
ByteArrayOutputStream temp = new ByteArrayOutputStream();
ImageIO.write(old, "jpg", temp);

白色变成红色..

http://www.primefaces.org/showcase/ui/file/upload/basic.xhtml

效果如下:

你知道如何处理这个问题吗? 提前感谢您的帮助:)

【问题讨论】:

  • 显示你如何阅读 BufferedImage,我认为它是相关的。
  • @ZaidMalhis 感谢您的帮助! :) 我已经编辑了问题
  • 你用字节数组做什么来显示它?

标签: java image io


【解决方案1】:

问题在于 PNG 文件中的 alpha 通道,而 JPG 文件中不存在该通道。因此,alpha 通道正在替换输出中的红色/绿色/蓝色通道之一,并且颜色是错误的。 您可以在此处找到如何正确执行此操作的示例:http://www.mkyong.com/java/convert-png-to-jpeg-image-file-in-java/

【讨论】:

  • 马上检查!非常感谢。还有一件奇怪的事情我刚刚注意到 - 虽然“转换”JPG 到 JPG 有相同的效果......这让我很困惑..
【解决方案2】:

试试这个:

BufferedImage bufferedImageUp = (BufferedImage)up;    
BufferedImage old = new BufferedImage(bufferedImageUp.getWidth(), bufferedImageUp.getHeight(), bufferedImageUp.TYPE_INT_RGB);
ImageIO.write(old, "jpg", temp);

【讨论】:

  • 这需要old.createGraphics().drawImage(bufferedImageUp, 0, 0, Color.WHITE, null);,但感谢您的帮助! :)
【解决方案3】:

关键部分是使用带有白色背景的 RGB 通道将 BufferedImage 写入新的 BufferedImage。这将解决奇怪颜色的问题:

public static InputStream encodeToJpg(String filepath) throws IOException {
    System.out.println("Encoding to JPG...");
    BufferedImage buffImg;
    InputStream origStream = new FileInputStream(new File(filepath));
    buffImg = ImageIO.read(origStream);
    origStream.close();

    // Recreate the BufferedImage to fix channel issues
    BufferedImage newBuffImg = new BufferedImage(buffImg.getWidth(), buffImg.getHeight(), BufferedImage.TYPE_INT_RGB);
    newBuffImg.createGraphics().drawImage(buffImg, 0, 0, Color.WHITE, null);
    buffImg.flush();

    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    ImageIO.write(newBuffImg, "jpg", outStream);

    ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
    return inStream;
}

【讨论】:

    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2012-07-29
    • 2013-08-29
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多