使用Scalr调整大小后,带有透明背景的PNG图片变成了黑色

3

我正在使用org.imgscalr.Scalr(http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/#solve)库来调整图像大小,但是当PNG图像具有透明背景时,调整大小后会变成黑色。我的代码如下:

    public void scaleImage(String originalImage, int width, int height) throws IOException {
    File imgFl = new File(originalImage);
    BufferedImage originalBufImage = ImageIO.read(imgFl);
    BufferedImage scaledImage = Scalr.resize(originalBufImage, Scalr.Method.ULTRA_QUALITY, width, height, Scalr.OP_BRIGHTER);
    File outputfile = new File(originalImage);
    String fileExtension = originalImage.substring(originalImage.indexOf(".") + 1, originalImage.length());
    ImageIO.write(scaledImage, fileExtension, outputfile);
}

有人知道这是怎么回事吗?

谢谢,Abhishek

2个回答

2

我不知道为什么会发生这种情况,但是假设图像中没有其他黑色元素,您可以使用以下方法将黑色变为透明:

private static Image mct(Image im, final Color color) {
    ImageFilter filter = new RGBImageFilter() {
      // the color we are looking for... Alpha bits are set to opaque
      public int markerRGB = color.getRGB() | 0xFF000000;

      public final int filterRGB(int x, int y, int rgb) {
        if ( ( rgb | 0xFF000000 ) == markerRGB ) {
          // Mark the alpha bits as zero - transparent
          return 0x00FFFFFF & rgb;
          }
        else {
          // nothing to do
          return rgb;
          }
        }
      };

它返回一个图像,其中所有与颜色匹配的RGB值均为透明。
希望这能有所帮助。

1

Scalr在创建新的BufferedImage时可能没有使用BufferedImage.TYPE_INT_ARGB - 也许您可以要求它这样做?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接