Відповіді:
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);
NullPointerException
, використовуйif (outputfile.exists())
Ви можете зберегти BufferedImage
об'єкт, використовуючи метод запису javax.imageio.ImageIO
класу. Підпис методу такий:
public static boolean write(RenderedImage im, String formatName, File output) throws IOException
Тут im
має RenderedImage
бути записано formatName
рядок, що містить неофіційну назву формату (наприклад, png) і output
є об'єктом файлу, в який потрібно записати. Приклад використання методу для формату файлів PNG показаний нижче:
ImageIO.write(image, "png", file);
Відповідь лежить у підручнику Java Documentation для написання / збереження зображення .
Image I/O
Клас надає наступний метод для збереження зображення:
static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException
Підручник пояснює це
Клас BufferedImage реалізує інтерфейс RenderImage.
тому його можна використовувати в методі.
Наприклад,
try {
BufferedImage bi = getMyImage(); // retrieve image
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
// handle exception
}
Важливо оточити write
виклик блоком спробу, оскільки, відповідно до API , метод видає IOException
"якщо помилка виникає під час запису"
Також пояснюються цілі методу, параметри, повернення та кидки, більш детально:
Записує зображення за допомогою довільного ImageWriter, який підтримує заданий формат у файл. Якщо файл вже присутній, його вміст викидається.
Параметри:
im - зображення, що має бути записане.
formatName - рядок, що стосується неформальної назви формату.
output - файл, в який слід записати.
Повернення:
помилково, якщо не знайдено відповідного письменника.
Кидає:
IllegalArgumentException - якщо будь-який параметр є нульовим.
IOException - якщо під час написання сталася помилка.
Однак це formatName
може здатися досить невиразним та неоднозначним; навчальний посібник трохи це очищає:
Метод ImageIO.write викликає код, який реалізує написання PNG, «плагіном для запису PNG». Термін плагін використовується, оскільки введення / виведення зображення розширюється і може підтримувати широкий спектр форматів.
Але такі стандартні плагіни формату зображення: JPEG, PNG, GIF, BMP та WBMP завжди присутні.
Для більшості програм достатньо використовувати один із цих стандартних плагінів. Вони мають перевагу в доступності.
Однак є додаткові формати, якими ви можете скористатися:
Клас вводу-виводу Image забезпечує спосіб підключення додаткових форматів, які можна використовувати, і існує багато таких плагінів. Якщо вас цікавить, які формати файлів доступні для завантаження або збереження у вашій системі, ви можете використовувати методи getReaderFormatNames та getWriterFormatNames класу ImageIO. Ці методи повертають масив рядків із переліком усіх форматів, підтримуваних у цьому JRE.
String writerNames[] = ImageIO.getWriterFormatNames();
Повернений масив імен буде включати будь-які додаткові плагіни, які встановлені, і будь-яке з цих імен може бути використане як ім'я формату для вибору записувача зображень.
Для повного і практичного прикладу можна звернутися до прикладу Oracle SaveImage.java
.
Створіть та збережіть файл для файлу 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();
}
}
}
Примітки:
У вашому коді:
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));