Sto usando la libreria Java di imgscalr per ridimensionare un’immagine.
Il risultato di una chiamata al metodo resize () è un object BufferedImage. Ora voglio salvarlo come un file (solitamente .jpg).
Come lo posso fare? Voglio andare da BufferedImage
-> File
ma forse questo non è l’approccio corretto?
File outputfile = new File("image.jpg"); ImageIO.write(bufferedImage, "jpg", outputfile);
È ansible salvare un object BufferedImage
utilizzando il metodo write della class javax.imageio.ImageIO
. La firma del metodo è come questa:
public static boolean write(RenderedImage im, String formatName, File output) throws IOException
Qui im
è RenderedImage
da scrivere, formatName
è la stringa che contiene il nome informale del formato (ad es. Png) e l’ output
è l’object file su cui scrivere. Di seguito è riportato un esempio di utilizzo del metodo per il formato file PNG:
ImageIO.write(image, "png", file);
Crea e salva un file java.awt.image.bufferedImage:
import java.io.*; import java.awt.image.*; import javax.imageio.*; public class Main{ public static void main(String args[]){ try{ BufferedImage img = new BufferedImage( 500, 500, BufferedImage.TYPE_INT_RGB ); File f = new File("MyFile.png"); int r = 5; int g = 25; int b = 255; int col = (r << 16) | (g << 8) | b; for(int x = 0; x < 500; x++){ for(int y = 20; y < 300; y++){ img.setRGB(x, y, col); } } ImageIO.write(img, "PNG", f); } catch(Exception e){ e.printStackTrace(); } } }
Gli appunti:
La risposta si trova all’interno del tutorial della documentazione Java per la scrittura / il salvataggio di un’immagine .
La class Image I/O
fornisce il seguente metodo per il salvataggio di un’immagine:
static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException
Il tutorial spiega questo
La class BufferedImage implementa l’interfaccia RenderedImage.
quindi è in grado di essere utilizzato nel metodo.
Per esempio,
try { BufferedImage bi = getMyImage(); // retrieve image File outputfile = new File("saved.png"); ImageIO.write(bi, "png", outputfile); } catch (IOException e) { // handle exception }
È importante circondare la chiamata di write
con un blocco try perché, come per l’API , il metodo genera una IOException
“se si verifica un errore durante la scrittura”
Vengono inoltre illustrati l’objective, i parametri, i rendimenti e i lanci del metodo, in modo più dettagliato:
Scrive un’immagine utilizzando un ImageWriter arbitrario che supporta il formato specificato in un file. Se è già presente un file, il suo contenuto viene scartato.
parametri:
im – una RenderedImage da scrivere.
formatName: una stringa che contiene il nome informale del formato.
output – un file su cui scrivere.
Ritorna:
falso se non viene trovato uno scrittore appropriato.
Produce:
IllegalArgumentException – se qualche parametro è nullo.
IOException – se si verifica un errore durante la scrittura.
Tuttavia, formatName
può sembrare ancora piuttosto vago e ambiguo; il tutorial lo chiarisce un po ‘:
Il metodo ImageIO.write chiama il codice che implementa PNG scrivendo un “plug-in PNG writer”. Il termine plug-in viene utilizzato poiché Image I / O è estensibile e può supportare un’ampia gamma di formati.
Ma i seguenti plug-in standard di formato immagine: JPEG, PNG, GIF, BMP e WBMP sono sempre presenti.
Per la maggior parte delle applicazioni è sufficiente utilizzare uno di questi plugin standard. Hanno il vantaggio di essere prontamente disponibili.
Esistono tuttavia formati aggiuntivi che è ansible utilizzare:
La class Image I / O offre un modo per colbind il supporto a formati aggiuntivi che possono essere utilizzati e molti plug-in esistono. Se sei interessato a quali formati di file sono disponibili per caricare o salvare nel tuo sistema, puoi usare i metodi getReaderFormatNames e getWriterFormatNames della class ImageIO. Questi metodi restituiscono una serie di stringhe che elencano tutti i formati supportati in questo JRE.
String writerNames[] = ImageIO.getWriterFormatNames();
L’array restituito di nomi includerà eventuali plug-in aggiuntivi installati e uno qualsiasi di questi nomi potrebbe essere utilizzato come nome di formato per selezionare un writer di immagini.
Per un esempio completo e pratico, è ansible fare riferimento SaveImage.java
di SaveImage.java
di Oracle .
Nel tuo codice:
import static org.imgscalr.Scalr.*; public static BufferedImage resizeBufferedImage(BufferedImage image, Scalr.Method scalrMethod, Scalr.Mode scalrMode, int width, int height) { BufferedImage bi = image; bi = resize( image, scalrMethod, scalrMode, width, height); return bi; } // Save image: ImageIO.write(Scalr.resize(etotBImage, 150), "jpg", new File(myDir));
Come una nave:
ImageIO.write(Scalr.resize(ImageIO.read(...), 150));