首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >背景为红色的imgscalr

背景为红色的imgscalr
EN

Stack Overflow用户
提问于 2013-07-20 04:34:18
回答 1查看 3K关注 0票数 8

我正在使用(org.imgscalr.Scalr)库来调整一些图像的大小,但在调整大小后背景会变成红色。我的代码是:

代码语言:javascript
复制
BufferedImage imagemPng = ImageIO.read(image);
BufferedImage imagemJpg = Scalr.resize(imagemPng, Method.QUALITY, 1920, 937);

你能帮帮我吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-23 13:22:54

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

我敢打赌$1,您的PNG中有一个alpha通道,而JPG不支持alpha;不幸的是,Java编码器不知道忽略您传入的BufferedImage上的Alpha通道,它将丢弃一个真实的颜色通道(R/G/B),以便写出Alpha值,而不是那些颜色通道中的一个。

例如,如果您有:

代码语言:javascript
复制
ARGB

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

代码语言:javascript
复制
[ARG]

并丢弃蓝色通道。

幸运的是,修复方法非常简单。只需创建一个TYPE_INT_RGB类型的新BufferedImage,如下所示:

代码语言:javascript
复制
BufferedImage imageToSave = new BufferedImage(imagemJpg.getWidth(), imagemJpg.getHeight(), BufferedImage.TYPE_INT_RGB);

然后,您需要使用Alpha通道对BufferedImage进行渲染,以剥离Alpha通道:

代码语言:javascript
复制
Graphics g = imageToSave.getGraphics();
g.drawImage(imagemJpg, 0, 0, null);

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

提示:如果你不喜欢图片的外观(模糊、伪装等),不要忘记。您需要将参数直接传递给Java JPG编码器,告诉它不要压缩太多(read this) --这很少出现问题,但是过去人们说"imgscalr看起来很糟糕!“--事实证明BufferedImage确实很好而且很锐利,但是Java编码器对结果的压缩太过激进了。

我一直想通过向imgscalr库添加一些额外的IO帮助器来解决Java镜像中的这些令人讨厌的问题,这样您就可以加载文件并保存它们,而不必担心这些细节细节。

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

https://stackoverflow.com/questions/17755036

复制
相关文章

相似问题

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