我正在使用imgscalr Java 库来调整图像大小。
resize() 方法调用的结果是一个 BufferedImage 对象。我现在想将其保存为文件(通常为 .jpg)。
我怎样才能做到这一点?我想从BufferedImage
->出发,File
但也许这不是正确的方法?
我正在使用imgscalr Java 库来调整图像大小。
resize() 方法调用的结果是一个 BufferedImage 对象。我现在想将其保存为文件(通常为 .jpg)。
我怎样才能做到这一点?我想从BufferedImage
->出发,File
但也许这不是正确的方法?
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);
答案在 Java 文档的Tutorial for Writing/Save an Image中。
该类Image I/O
提供了以下保存图像的方法:
static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException
本教程解释说
BufferedImage 类实现了 RenderedImage 接口。
所以它可以在方法中使用。
例如,
try {
BufferedImage bi = getMyImage(); // retrieve image
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
// handle exception
}
write
用try 块包围调用很重要,因为根据API,该方法会抛出IOException
“如果在写入过程中发生错误”
还更详细地解释了方法的目标、参数、返回和抛出:
使用支持给定格式的任意 ImageWriter 将图像写入文件。如果已经存在 File,则丢弃其内容。
参数:
im - 要写入的 RenderedImage。
formatName - 一个包含格式的非正式名称的字符串。
output - 要写入的文件。
回报:
如果没有找到合适的作者,则返回 false。
抛出:
IllegalArgumentException - 如果任何参数为空。
IOException - 如果在写入过程中发生错误。
然而,formatName
可能看起来仍然相当模糊和模棱两可;本教程将其清除了一点:
ImageIO.write 方法调用实现PNG 的代码编写“PNG 编写器插件”。使用术语插件是因为 Image I/O 是可扩展的并且可以支持多种格式。
但以下标准图像格式插件:JPEG、PNG、GIF、BMP 和 WBMP 始终存在。
对于大多数应用程序,使用这些标准插件之一就足够了。它们的优点是随时可用。
但是,您可以使用其他格式:
Image I/O 类提供了一种插入支持其他可用格式的方法,并且存在许多这样的插件。如果您对系统中可以加载或保存的文件格式感兴趣,可以使用 ImageIO 类的 getReaderFormatNames 和 getWriterFormatNames 方法。这些方法返回一个字符串数组,列出此 JRE 支持的所有格式。
String writerNames[] = ImageIO.getWriterFormatNames();
返回的名称数组将包括已安装的任何其他插件,并且这些名称中的任何一个都可以用作格式名称来选择图像编写器。
完整且实用的示例可以参考 Oracle 的SaveImage.java
示例。
BufferedImage
您可以使用类的 write 方法保存对象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.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));
作为一个班轮:
ImageIO.write(Scalr.resize(ImageIO.read(...), 150));