Java ARGB到JPG

Gwa*_*alk 3 java jpeg graphics2d

如何将带有TYPE_INT_ARGB的BufferedImage保存到jpg?

程序生成我的图像:

在此输入图像描述

它没关系,但是当我以这种方式保存它时:

    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    BufferedOutputStream bos = new BufferedOutputStream(byteStream);
    try {
        ImageIO.write(buffImg, "jpg", bos);
        // argb
        byteStream.flush();
        byte[] newImage = byteStream.toByteArray();

        OutputStream out = new BufferedOutputStream(new FileOutputStream("D:\\test.jpg"));
        out.write(newImage);
        out.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

结果是: 在此输入图像描述

了解这是由于alpha层,但不知道如何解决它.Png格式不适合我,需要jpg.

Gwa*_*alk 6

好!我已经解决了.一切都很简单.不知道这是一个好的决定,它有多快.我还没有找到任何其他的.所以我们需要的是定义新的BufferedImage.

BufferedImage buffImg = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = buffImg.createGraphics();

// ... other code we need

BufferedImage img= new BufferedImage(buffImg.getWidth(), buffImg.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
g2d.drawImage(buffImg, 0, 0, null);
g2d.dispose();
Run Code Online (Sandbox Code Playgroud)

如果有任何改进这种方法的想法,欢迎您的光临.

  • 仅供参考:JPEG没有alpha通道,因此在读/写时会被错误地处理.如您所示,您需要将图像转换为非基于alpha的结果 (2认同)