java默认输出图片的dpi只有72,想要得到更高或者更低分辨率的图片需要进行单独的设置。
java自带的IIoMetadata可以对png、jpeg格式图片进行设置,但是bmp格式却无法设置dpi,因为直接不支持添加树节点参数,并且BMPMetadata只能用于读(isReadOnly = true)。
我遇到的问题是需要输出600DPI的bmp格式的图片,最后找到的解决办法是使用commons-imaging,
BmpImageParser的writeImage方法可以写出图片文件,params中设置相关需要的参数。
public void writeImage(BufferedImage src, OutputStream os, Map<String, Object> params)
private static void setBMPDpi(BufferedImage bufferedImage,String filePath,double DPI){
Map<String, Object> map = new HashMap<>();
PixelDensity pixelDensity = PixelDensity.createFromPixelsPerInch(DPI, DPI);
map.put("PIXEL_DENSITY", pixelDensity);
File file = new File(filePath);
if (!file.getParentFile().exists())
file.getParentFile().mkdirs();
try (OutputStream outputStream = new FileOutputStream(filePath)) {
Imaging.writeImage(bufferedImage, outputStream, imageFormat, map);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException | ImageWriteException e) {
e.printStackTrace();
}
}
java对bmp文件修改的相关文档较少,找到这个第三方库后也是研究了一阵才搞出来了,应该还有更合适的的写法,任务时间紧迫就先凑活一下,记录在案,有空了再做统一的调整。