У меня есть изображение, назовите его grayscale.jpg.Теперь я открываю это изображение в Gimp, меняю цветовой режим на RGB и сохраняю его как color.jpg.Если я просматриваю grayscale.jpg и color.jpg в любой программе просмотра изображений, они выглядят точно так же.Но если я открою изображения с помощью javax.imageio.ImageIO
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-код, а не что-то комбинировать с помощью инструментов командной строки.