java合成jpeg图像 压缩问题 resize问题

在网上找到的java输出图像的例子里面一般都没有对jpeg图像输出的压缩比进行设置,而默认的都是有损压缩,输出的图片就会比原图片质量变低。

下面是一段给图片加上网站logo的代码,注意第12,13,14行设置了图片的压缩比。本例为不压缩原图片。

java 代码
  1. BufferedImage image = ImageIO.read(new FileInputStream("c:\\base.jpg"));   
  2. //读取图标   
  3. BufferedImage image_biao = ImageIO.read(new FileInputStream(   
  4.     "c:\\logo.gif"));   
  5. Graphics2D g = image.createGraphics();   
  6. g.drawImage(image_biao, 1010, image_biao.getWidth(null),   
  7.             image_biao.getHeight(null), null);   
  8. g.dispose();   
  9. FileOutputStream out = new FileOutputStream("c:\\out.jpg");   
  10.   
  11. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
  12. JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);   
  13. param.setQuality(1f, false);   
  14. encoder.setJPEGEncodeParam(param);   
  15. encoder.encode(image);   
  16. 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 代码
  1. BufferedImage tag = new BufferedImage(500300,image.getType());   
  2. tag.getGraphics().drawImage(image, 00500300null); //绘制缩小后的图   
  3.   
  4. FileOutputStream out2 = new FileOutputStream("c:\\out2.jpg");   
  5.   
  6. JPEGImageEncoder encoder2 = JPEGCodec.createJPEGEncoder(out2);   
  7. JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);   
  8. param2.setQuality(1f, false);   
  9. encoder2.setJPEGEncodeParam(param2);   
  10. encoder2.encode(tag);   
  11. out2.close();  
 
注意第一行新建 BufferedImage 的时候要使用原图片的type,这样可以保证输出与原图片相同质量的图片。
 
 
 
 
 
 
 
 
 

你可能感兴趣的:(java,C++,c,C#)