gpt4 book ai didi

java - 使用 java thumbnailator 或 imgscalr 调整 jpeg 图像大小时出现粉红色/红色调

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:27 25 4
gpt4 key购买 nike

我正在尝试使用两个库(thumbnailator 和 imgscalr)转换图像(下面的 url)。我的代码适用于大多数图像,除了少数图像在转换后具有粉红色/淡红色调。

我正在尝试了解原因,欢迎提出任何建议。

注意 - 此图像的图像类型是 5,即 BufferedImage.TYPE_3BYTE_BGR,我使用的是 Java 7

enter image description here enter image description here

使用缩略图

  Thumbnails.of(fromDir.listFiles())                
.size(thumbnailWidth, thumbnailHeight)
.toFiles(Rename.SUFFIX_HYPHEN_THUMBNAIL);

使用 imgscalr

    BufferedImage bufferedImage = ImageIO.read(file);
final BufferedImage jpgImage;

LOG.debug("image type is =[{}] ", bufferedImage.getType());

BufferedImage scaledImg = Scalr.resize(bufferedImage, Method.ULTRA_QUALITY, thumbnailWidth, thumbnailHeight, Scalr.OP_ANTIALIAS);


File thumbnailFile = new File(fromDirPath + "/" + getFileName(file.getName()) +THUMBNAIL_KEYWORD + ".png");

ImageIO.write(scaledImg, getFileExtension(file.getName()), thumbnailFile);

bufferedImage.flush();
scaledImg.flush();

最佳答案

我经常收到这个问题(imgscalr 的作者)——问题是几乎总是您正在读取/写入不同的文件格式,并且 ALPHA channel 导致您的颜色 channel 之一( R/G/B) 从生成的文件中剔除。

例如,如果您读入一个 ARGB(4 channel )文件并将其写为 JPG(3 channel )- 除非您有目的地自己操纵图像类型并将旧图像直接渲染到新图像,你会得到一个带有“ARG” channel 的文件......或者更具体地说,只有红色和绿色 - 没有蓝色。

PNG 支持 alpha channel 而 JPG 不支持,所以请注意这一点。

解决此问题的方法是有目的地创建正确类型(RGB、ARGB 等)的适当 BufferedImage,并在之前使用 destImage.getGraphics() 调用将一个图像渲染到另一个图像将其写入磁盘并重新编码。

Sun 和 Oracle 从来没有让 ImageIO 库足够智能以在写入不同文件类型时检测到不受支持的 channel ,所以这种行为一直发生:(

希望对您有所帮助!

关于java - 使用 java thumbnailator 或 imgscalr 调整 jpeg 图像大小时出现粉红色/红色调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26115851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com