如果大于1MB到1MB或更小,我想压缩jpg文件。
参数压缩setCompressionQuality
中ImageWriteParam
中从0.0f到1.0f的质量未明确定义。
质量= 0.5f可以将图像压缩5倍,7倍,1.2倍取决于图像。不是每个人预期的两倍。
那么,如何选择压缩图像的大小?也许有任何开源库?
UPD: 压缩示例:
public static byte[] write(BufferedImage image, String formatName, int dpi, float quality) {
try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
ImageIOUtil.writeImage(image, formatName, outputStream, dpi, quality);
return outputStream.toByteArray();
} catch (IOException ex) {
return null;
}
}
public static void main(String[] args) {
BufferedImage bufImg = null;
try
{
bufImg = ImageIO.read(new File("myfile"));
} catch (IOException e){e.printStackTrace();}
for(int i = 0; i < 10; i++) {
byte[] arr = write(bufImg, "jpg", 300, 0.1f*i);
double fl = (double)arr.length/(double)MY_FILE_SIZE_BYTES;
System.out.println(fl + " " + (0.1f*i));
}
}
为此,我使用org.apache.pdfbox.tools.imageio.ImageIOUtil
,ImageIOUtil在内部使用ImageWriter和ImageWriteParam。