Image saved in JavaFX as jpg is pink toned

前端 未结 2 1961
无人共我
无人共我 2021-02-09 00:15

I want to save an Image from my ImageView to files with different resolutions. Doing it as .png results as expected. As for .jpg - I get all files pink toned.

相关标签:
2条回答
  • 2021-02-09 01:12

    Update

    This issue was fixed for Java 8:

    JDK-8114609 Incorrect display of JPEG images


    It looks like you are encountering existing bugs in the ImageIO or JavaFX Image processing libraries.

    • RT-14647 Incorrect display of JPEG images

    You might wish to try some of the workarounds suggested in the StackOverflow questions below and see if any of them fix the issue for you:

    • problem using ImageIO.write jpg file
    • Java 1.5.0_16 corrupted colours when saving jpg image
    0 讨论(0)
  • 2021-02-09 01:14

    I found a solution on Oracle forums. As widely discussed, the problem is in alpha-channel that needs to be excluded from the source image, targeted for .jpg save. I also rearranged my code to make it shorter. The workaround is:

    // Get buffered image:
    BufferedImage image = SwingFXUtils.fromFXImage(myJavaFXImage, null); 
    
    // Remove alpha-channel from buffered image:
    BufferedImage imageRGB = new BufferedImage(
        image.getWidth(), 
        image.getHeight(), 
        BufferedImage.OPAQUE); 
    
    Graphics2D graphics = imageRGB.createGraphics();
    
    graphics.drawImage(image, 0, 0, null);
    
    ImageIO.write(imageRGB, "jpg", new File("/mydir/foto.jpg"));
    
    graphics.dispose();
    

    Fixed in Java 8: https://bugs.openjdk.java.net/browse/JDK-8114609

    0 讨论(0)
提交回复
热议问题