首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有透明背景的PNG在使用Scalr调整大小时变为黑色

具有透明背景的PNG在使用Scalr调整大小时变为黑色
EN

Stack Overflow用户
提问于 2012-09-05 20:10:51
回答 2查看 1.5K关注 0票数 3

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

代码语言:javascript
复制
    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

EN

回答 2

Stack Overflow用户

发布于 2012-09-05 20:29:45

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

代码语言:javascript
复制
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值的透明图像。

我希望这对你有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2014-12-30 14:40:20

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12281135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档