加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么Java ImageIO平滑JPEG颜色

发布时间:2020-12-14 05:05:17 所属栏目:Java 来源:网络整理
导读:当我看到某些JPG文件时,颜色变平.这是一个简单的例子,它读取一个jpg,并将同一个图像写入另一个文件. import java.awt.image.BufferedImage;import java.io.File;import javax.imageio.ImageIO;public class JPegReadTest { public static void main(String[]
当我看到某些JPG文件时,颜色变平.这是一个简单的例子,它读取一个jpg,并将同一个图像写入另一个文件.
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class JPegReadTest {
    public static void main(String[] args) {
        if (args.length == 2) {
            try {
                BufferedImage src = ImageIO.read(new File(args[0]));
                ImageIO.write(src,"jpg",new File(args[1]));
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.err.println("Usage: java JPegReadTest src dest");
        }
    }
}

如果您尝试使用例如http://www.flickr.com/photos/visualpanic/233508614/sizes/l/,则目标图像的颜色与源文件不同.这是为什么?如何解决?

也尝试将图像保存为png,但颜色也很平坦(因此假设颜色信息未正确读取).

解决方法

这可能是几个原因.

> JPEG颜色数据通常存储为YCrCb而不是RGB,尽管转换应该大多是不明显的.
> JPEG通常具有嵌入的颜色配置文件,但是许多应用程序不明白这一点,只是忽略它(在这种情况下,您的输出文件可能缺少颜色配置文件).
> Java可以重置或丢失Gamma值.

我没有真的尝试你的例子…你可以在文件之前和之后张贴?没有实际能够检查结果文件,很难说这个额外的数据是否存在.

编辑:是的,很明显,您的原始和转换的图像具有不同的颜色配置文件. Java剥离了原始的颜色配置文件,并改用了通用的sRGB.它们在Windows上与Firefox和各种程序一样,因为这些程序在渲染器时不使用颜色配置文件.然而,在Mac上,Mac实际上支持这些颜色配置文件(Mac上的图形提示等等),因此它们的渲染方式不同.我没有Mac的方便,但我怀疑如果您在任何平台上打开Photoshop中的文件,您将看到差异.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读