Java 从 PNG 到 JPG 的转换将白色变为红色
Conversion in Java from PNG to JPG changes white color into red
使用
转换图像时
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
效果如下:
你知道如何处理这个问题吗?
提前感谢您的帮助:)
问题是 PNG 文件中的 alpha 通道,它在 JPG 文件中不存在。因此,alpha 通道正在替换输出中的 red/green/blue 通道之一,并且颜色是错误的。
您可以在此处找到如何正确执行此操作的示例:http://www.mkyong.com/java/convert-png-to-jpeg-image-file-in-java/
试试这个:
BufferedImage bufferedImageUp = (BufferedImage)up;
BufferedImage old = new BufferedImage(bufferedImageUp.getWidth(), bufferedImageUp.getHeight(), bufferedImageUp.TYPE_INT_RGB);
ImageIO.write(old, "jpg", temp);
关键部分是使用白色背景的 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;
}
使用
转换图像时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
效果如下:
你知道如何处理这个问题吗? 提前感谢您的帮助:)
问题是 PNG 文件中的 alpha 通道,它在 JPG 文件中不存在。因此,alpha 通道正在替换输出中的 red/green/blue 通道之一,并且颜色是错误的。 您可以在此处找到如何正确执行此操作的示例:http://www.mkyong.com/java/convert-png-to-jpeg-image-file-in-java/
试试这个:
BufferedImage bufferedImageUp = (BufferedImage)up;
BufferedImage old = new BufferedImage(bufferedImageUp.getWidth(), bufferedImageUp.getHeight(), bufferedImageUp.TYPE_INT_RGB);
ImageIO.write(old, "jpg", temp);
关键部分是使用白色背景的 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;
}