Sto provando a scrivere un metodo che cattura un'immagine e salva una miniatura 100 per 100 di quell'immagine. Tuttavia, quando salvi il file, viene fuori come un'immagine 0 byte illeggibile (con l'errore "Errore nell'interpretazione del file immagine JPEG (chiamata impropria alla libreria JPEG nello stato 200)") in ImageViewer di Ubuntu. Il mio codice è il seguente:Utilizzo di ImageIO.write() per creare un JPEG crea un file da 0 byte
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;
}
Dove "nomefile" è una variabile globale per l'alloggiamento di classe questo metodo, che rappresenta il percorso per l'immagine originale. Il mio problema principale è che non vedo perché sto creando un'immagine a 0 byte.
AFAIK è necessario chiudere il buffer IO per qualsiasi cosa venga effettivamente scritta. Questo è generalmente il modo in cui l'I/O funziona in Java, ma potrebbe essere sbagliato. – Zyerah
Verificare di disporre dell'autorizzazione per scrivere su disco e di disporre di spazio su disco disponibile – Reimeus
@Reimeus: ho il permesso di scrivere e ho spazio disponibile su disco; almeno credo di farlo perché sono in grado di creare con successo altri file (in particolare file .txt) e, a meno di non fraintendere il tuo significato di "spazio su disco", ne ho abbastanza. –