【问题标题】:Convert alpha channel in white when saving to JPEG with ImageWriter使用 ImageWriter 保存为 JPEG 时将 Alpha 通道转换为白色
【发布时间】:2011-12-07 16:58:02
【问题描述】:

我正在使用以下 sn-p 代码将 png 图像转换为 jpeg:

ByteArrayOutputStream image1baos = new ByteArrayOutputStream();

image1 = resizeImage(cropImage(image1, rect1), 150);

ImageWriter writer = null;
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpg");
if (iter.hasNext()) {
  writer = (ImageWriter) iter.next();
}

ImageOutputStream ios = ImageIO.createImageOutputStream(image1baos);
writer.setOutput(ios);

// set the compression quality
ImageWriteParam iwparam = new MyImageWriteParam();
iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwparam.setCompressionQuality(0.2f);

// write image 1
writer.write(null, new IIOImage(image1, null, null), iwparam);

ios.flush();

// set image 1
c.getItem1().setImageData(image1baos.toByteArray());

我想将 Alpha 通道转换为白色,而不是默认情况下的黑色,但我找不到这样做的方法。将不胜感激!

【问题讨论】:

    标签: java image png awt alpha-transparency


    【解决方案1】:

    我的解决方案很丑,可能很慢,但它是一个解决方案:)

        BufferedImage img = <your image>
        for( int i = 0; i < img.getWidth( ); i++ )
            for( int j = 0; j < img.getHeight( ); j++ ) {
                // get argb from pixel
                int coli = img.getRGB( i, j );
                int a = coli >> 24 & 0xFF;
                int r = coli >> 16 & 0xFF;
                int g = coli >> 8 & 0xFF;
                int b = coli & 0xFF;
                coli &= ~0xFFFFFFFF;
                // do what you want with a, r, g and b, in your case :
                a = 0xFF;
                // save argb
                coli |= a << 24;
                coli |= r << 16;
                coli |= g << 8;
                coli |= b << 0;
                img.setRGB( i, j, coli );
            }
        }
    

    当然,如果只需要调整 Alpha 通道,可以减少 60% 的代码。我保留了所有 RGB 的东西以供进一步参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2011-02-03
      • 2019-12-17
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2013-12-13
      相关资源
      最近更新 更多