我有一个图像,称之为grayscale.jpg。现在我在The Gimp中打开该图像并将颜色模式更改为RGB并将其另存为color.jpg。如果我在任何图像查看器中查看grayscale.jpg和color.jpg,它们看起来完全一样。但是,如果我打开图像与javax.imageio.ImageIO
javax.imageio.ImageIO在灰度图像上读取不正确的RGB值
import javax.imageio.ImageIO;
input = ImageIO.read(new File("grayscale.jpg"));
System.out.format("Grayscale value: %x\n", input.getRGB(200, 200));
input = ImageIO.read(new File("color.jpg"));
System.out.format("Color value: %x\n", input.getRGB(200, 200));
的彩色图像将返回正确的值,说0xff6c6c6c。灰度图像将返回像0xffaeaeae不同,更轻,不正确的值。
Grayscale value: 0xffaeaeae // Incorrect (Lighter)
Color value: 0xff6c6c6c // Correct
换句话说,javax.imageio.ImageIO中认为灰度图像轻得多比实际。我怎样才能准确读取灰度图像?
编辑
这里有更多的上下文。我的用户上传图片,可能是灰度。我的Java运行在服务器上并执行一些非常复杂的图像处理。所以一个理想的解决方案是修复我的Java代码,而不是用命令行工具来组合一些东西。
更多的挖掘之后,这是 重复http://stackoverflow.com/questions/6474753/my-batch-jpg-resizer -works-with-color-images-but-grayscale-ones-become-washed-o – 2011-12-20 18:42:48