Próbuję napisać metodę, która pobiera obraz i zapisuje miniaturę 100 na 100 tego obrazu. Jednak, po zapisaniu pliku, wychodzi jako nieczytelny obraz bajtowy (z błędem "Błąd interpretacji pliku obrazu JPEG (nieprawidłowe połączenie z biblioteką JPEG w stanie 200)") w ImageViewer Ubuntu. Mój kod jest następujący:Użycie ImageIO.write() do utworzenia pliku JPEG tworzy plik 0-bajtowy
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;
}
Gdzie "filename" jest zmienną globalną dla klasy, w której znajduje się ta metoda, reprezentującą ścieżkę do oryginalnego obrazu. Moim głównym problemem jest to, że nie widzę powodu, dla którego tworzę obraz o wielkości 0 bajtów.
AFAIK, musisz zamknąć bufor IO, aby cokolwiek zostało faktycznie zapisane. Tak ogólnie działa IO w Javie - może być jednak źle. – Zyerah
Sprawdź, czy masz uprawnienia do zapisu na dysk i czy masz wolne miejsce na dysku. – Reimeus
@Reimeus - Mam pozwolenie na pisanie i mam wolne miejsce na dysku; przynajmniej wierzę, że robię, ponieważ mogę skutecznie tworzyć inne pliki (w szczególności pliki .txt) i jeśli nie rozumiem znaczenia "miejsca na dysku", mam mnóstwo. –