java scalr_java – imgscalr与背景红色

您省略的其余代码(ImageIO保存)以及您正在读取的PNG是否具有透明通道(如@Daft Punk指出的那样)是重要的位.

我愿意打赌1美元,你的PNG中有一个alpha通道,而JPG不支持alpha;遗憾的是,Java的JPG编码器不知道忽略传入的BufferedImage上的Alpha通道,它将丢弃其中一个REAL颜色通道(R / G / B),而不是写出alpha值而不是其中一个颜色通道.

例如,如果您有:

ARGB

Java JPG编码器将写出以下3个通道,认为它们是RGB:

[ARG]

并丢弃蓝色通道.

幸运的是,修复很简单.只需创建一个类型为TYPE_INT_RGB的新BufferedImage,如下所示:

BufferedImage imageToSave = new BufferedImage(imagemJpg.getWidth(), imagemJpg.getHeight(), BufferedImage.TYPE_INT_RGB);

那么你需要使用Alpha通道“渲染”BufferedImage,以剥离Alpha通道:

Graphics g = imageToSave.getGraphics();

g.drawImage(imagemJpg, 0, 0, null);

现在,您可以将生成的imageToSave图像保存为JPG,它看起来很好.

提示:不要忘记,如果您不喜欢图像的外观(模糊,虚构等),您需要将参数直接传递给Java JPG编码器,告诉它不要压缩太多(read this) – 这很少是一个问题,但是过去人们说“imgscalr看起来很糟糕!” – 事实证明BufferedImage非常好用而且很敏锐,但Java编码器过于积极地压缩结果.

我一直想通过向imgscalr库中添加一些额外的IO帮助程序来解决这些带有Java图像的烦人问题,这样你就可以加载文件并保存它们而不用担心这些细节.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值