Я пытаюсь написать метод, который принимает изображение, и сохраняет эскиз 100 на 100 изображений. Однако, когда я сохраняю файл, он выводится как нечитаемое 0-байтное изображение (с ошибкой «Ошибка интерпретации файла изображения JPEG (неправильный вызов в библиотеке JPEG в состоянии 200)») в ImageViewer Ubuntu. Мой код выглядит следующим образом:Использование ImageIO.write() для создания JPEG создает 0-байтовый файл
public boolean scale(){
String file = filename.substring(filename.lastIndexOf(File.separator)+1);
File out = new File("data"+File.separator+"thumbnails"+File.separator+file);
if(out.exists()) return false;
BufferedImage bi;
try{
bi = ImageIO.read(new File(filename));
}
catch(IOException e){
return false;
}
Dimension imgSize = new Dimension(bi.getWidth(), bi.getHeight());
Dimension bounds = new Dimension(100, 100);
int newHeight = imgSize.height;
int newWidth = imgSize.width;
if(imgSize.width > bounds.width){
newWidth = bounds.width;
newHeight = (newWidth*imgSize.height)/imgSize.width;
}
if(imgSize.height > bounds.width){
newHeight = bounds.height;
newWidth = (newHeight*imgSize.width)/imgSize.height;
}
Image img = bi.getScaledInstance(newWidth, newHeight, BufferedImage.SCALE_SMOOTH);
BufferedImage thumb = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2d = thumb.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();
try{
ImageIO.write(thumb, "jpg", out);
}
catch(IOException e){
return false;
}
return true;
}
Где «имя файл» является глобальным переменным для корпуса класса этого метода, представляющий путь к исходному изображению. Моя основная проблема заключается в том, что я не понимаю, почему я создаю 0-байтовый образ.
AFAIK вам нужно закрыть буфер ввода-вывода для чего-либо, чтобы на самом деле было написано. Как правило, как работает IO на Java, может быть и неправильным. – Zyerah
Убедитесь, что у вас есть разрешение на запись на диск и у вас есть свободное место на диске – Reimeus
@Reimeus - У меня есть разрешение на запись, и у меня есть свободное место на диске; по крайней мере, я считаю, что я делаю так, как могу успешно создавать другие файлы (в частности, файлы .txt), и, если я не понимаю ваш смысл «дискового пространства», у меня много. –