在网上找到的java输出图像的例子里面一般都没有对jpeg图像输出的压缩比进行设置,而默认的都是有损压缩,输出的图片就会比原图片质量变低。
下面是一段给图片加上网站logo的代码,注意第12,13,14行设置了图片的压缩比。本例为不压缩原图片。
java 代码
- BufferedImage image = ImageIO.read(new FileInputStream("c:\\base.jpg"));
-
- BufferedImage image_biao = ImageIO.read(new FileInputStream(
- "c:\\logo.gif"));
- Graphics2D g = image.createGraphics();
- g.drawImage(image_biao, 10, 10, image_biao.getWidth(null),
- image_biao.getHeight(null), null);
- g.dispose();
- FileOutputStream out = new FileOutputStream("c:\\out.jpg");
-
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
- param.setQuality(1f, false);
- encoder.setJPEGEncodeParam(param);
- encoder.encode(image);
- out.close();
setQuality
public void setQuality(float quality,
boolean forceBaseline)
quality取值在 1.0 到 0.0 之间
Some guidelines: 0.75 high quality
0.5 medium quality
0.25 low quality
另外要得到一张指定高度和宽度的图片的话可以用以下代码:(接上面代码)
java 代码
- BufferedImage tag = new BufferedImage(500, 300,image.getType());
- tag.getGraphics().drawImage(image, 0, 0, 500, 300, null);
-
- FileOutputStream out2 = new FileOutputStream("c:\\out2.jpg");
-
- JPEGImageEncoder encoder2 = JPEGCodec.createJPEGEncoder(out2);
- JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);
- param2.setQuality(1f, false);
- encoder2.setJPEGEncodeParam(param2);
- encoder2.encode(tag);
- out2.close();
注意第一行新建 BufferedImage 的时候要使用原图片的type,这样可以保证输出与原图片相同质量的图片。