Odpowiedzi:
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);
NullPointerException
, używajif (outputfile.exists())
Możesz zapisać BufferedImage
obiekt używając metody write javax.imageio.ImageIO
klasy. Podpis metody wygląda następująco:
public static boolean write(RenderedImage im, String formatName, File output) throws IOException
Tutaj im
jest RenderedImage
tekst do zapisania, formatName
to ciąg znaków zawierający nieformalną nazwę formatu (np. Png) i output
obiekt pliku do zapisania. Przykładowe użycie metody dla formatu pliku PNG jest pokazane poniżej:
ImageIO.write(image, "png", file);
Odpowiedź znajduje się w samouczku dokumentacji Java dotyczącym pisania / zapisywania obrazu .
Image I/O
Klasa zawiera następujące metody zapisywania obrazu:
static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException
Samouczek wyjaśnia to
Klasa BufferedImage implementuje interfejs RenderedImage.
więc można go użyć w metodzie.
Na przykład,
try {
BufferedImage bi = getMyImage(); // retrieve image
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
// handle exception
}
Ważne jest, aby otoczenie write
wywołania blokiem try, ponieważ zgodnie z interfejsem API metoda zgłasza plikIOException
„jeśli podczas pisania wystąpi błąd”
Bardziej szczegółowo wyjaśniono również cel metody, parametry, zwroty i rzuty:
Zapisuje obraz przy użyciu dowolnego ImageWriter, który obsługuje dany format w File. Jeśli istnieje już plik, jego zawartość jest odrzucana.
Parametry:
im - RenderedImage do napisania.
formatName - ciąg zawierający nieformalną nazwę formatu.
wyjście - plik do zapisania.
Zwroty:
fałsz, jeśli nie znaleziono odpowiedniego pisarza.
Rzuty:
IllegalArgumentException - jeśli którykolwiek parametr ma wartość null.
IOException - jeśli wystąpi błąd podczas zapisu.
Jednak formatName
nadal może wydawać się raczej niejasne i niejednoznaczne; samouczek wyjaśnia to trochę:
Metoda ImageIO.write wywołuje kod, który implementuje format PNG, pisząc „wtyczkę zapisującą PNG”. Termin wtyczka jest używany, ponieważ Image I / O jest rozszerzalny i może obsługiwać szeroką gamę formatów.
Jednak zawsze obecne są następujące standardowe wtyczki formatu obrazu: JPEG, PNG, GIF, BMP i WBMP.
W przypadku większości aplikacji wystarczy użyć jednej z tych standardowych wtyczek. Mają tę zaletę, że są łatwo dostępne.
Istnieją jednak dodatkowe formaty, których możesz użyć:
Klasa Image I / O umożliwia podłączenie obsługi dodatkowych formatów, które mogą być używane, a istnieje wiele takich wtyczek. Jeśli interesuje Cię, jakie formaty plików są dostępne do załadowania lub zapisania w Twoim systemie, możesz skorzystać z metod getReaderFormatNames i getWriterFormatNames klasy ImageIO. Te metody zwracają tablicę ciągów zawierającą wszystkie formaty obsługiwane w tym środowisku JRE.
String writerNames[] = ImageIO.getWriterFormatNames();
Zwrócona tablica nazw będzie zawierała wszelkie dodatkowe zainstalowane wtyczki, a dowolne z tych nazw mogą zostać użyte jako nazwa formatu w celu wybrania programu do zapisywania obrazów.
Pełny i praktyczny przykład można znaleźć w przykładzie Oracle SaveImage.java
.
Utwórz i zapisz java.awt.image.bufferedImage do pliku:
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();
}
}
}
Uwagi:
W swoim kodzie:
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));
Jako jedna wkładka:
ImageIO.write(Scalr.resize(ImageIO.read(...), 150));