ImageIO图片格式的转换是通过ImageReader读取图片到内存,再通过ImageWriter方法写出内存中的图片到文件中,这样就完成了图片的转换,这里我们直接提供图片格式转换的代码:
/**
* 转换
* @param sourceImagePath 源文件路径
* @param targetImagePath 目标文件路径
* @throws IllegalArgumentException 如果源文件无法读取或者目标文件无法写出则会抛出异常
*/
public void transform(String sourceImagePath, String targetImagePath) throws IllegalArgumentException {
try {
// 获取源文件扩展名
String sourceExtension = FilenameUtils.getExtension(sourceImagePath);
// 判断源文件是否可以被读取
if(!IMAGE_READER_FORMAT_NAMES.contains(sourceExtension)) {
throw new IllegalArgumentException(sourceExtension + "格式文件不能被读取");
}
// 获取目标文件扩展名
String targetExtension = FilenameUtils.getExtension(targetImagePath);
// 判断目标文件是否可以被写出
if(!IMAGE_WRITER_FORMAT_NAMES.contains(targetExtension)) {
throw new IllegalArgumentException(targetExtension + "格式文件不能被写出");
}
// 读取图片
BufferedImage bufferedImage = ImageIO.read(new File(sourceImagePath));
// 写出图片
ImageIO.write(bufferedImage, targetExtension, new File(targetImagePath));
} catch (IOException e) {
e.printStackTrace();
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
throw new IllegalArgumentException("文件转换失败");
}
}
下面我们对图片的转换功能进行测试:
ImageUtils.transform("/home/mointor/pig.jpg", "/home/mointor/pig.tiff");