Выходное изображение (jpg) становится красным после изменения размера - Java AWT
У меня есть очень простой кусок кода, который получает путь к изображению, читает его и изменяет его размер:
File inputFile = new File(inputImagePath);
BufferedImage inputImage = ImageIO.read(inputFile);
BufferedImage outputImage = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = outputImage.createGraphics();
graphics2D.drawImage(inputImage.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH), 0, 0, scaledWidth, scaledHeight, null);
graphics2D.dispose();
return outputImage;
Он работает нормально для большинства файлов. Однако есть один файл (который я нашел до сих пор), который становится красным после изменения размера. Это файл JPG:
BufferedImage@c4d0fc: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@17476bd transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 1920 height = 1080 #numDataElements 3 dataOff[0] = 2
Другие файлы изображений, которые работают нормально, также имеют тип 5.
Почему это происходит? Изображение не должно иметь альфа...
1 ответ
Решение
Я решил сделать изменение размера на стороне клиента, используя Javascript. Это было намного быстрее и проще сделать. Кроме того, создание достойных миниатюр в Java может быть удивительно болезненным: https://community.oracle.com/docs/DOC-983611