论坛首页 Java企业应用论坛

用JAVA生成缩图后图片不清楚了怎么解决!

浏览 23356 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-27  
用JAVA生成缩图后图片不清楚了怎么解决!我是用的是
import java.awt.*;
import java.io.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.io.*;

public class ImgUtil {

  private static final Log logger = LogFactory.getLog(ImgUtil.class);

  public ImgUtil() {
  }

  public static void reduceImg(String imgsrc, String imgdist, int widthdist,
                               int heightdist) {
    try {
      File srcfile = new File(imgsrc);
      if (!srcfile.exists()) {
        return;
      }
      Image src = javax.imageio.ImageIO.read(srcfile);
      int width = src.getWidth(null);
      int height = src.getHeight(null);

      if (width <= widthdist && height <= heightdist) {
        //SysUtil.cpoyFile(imgsrc, imgdist);
        FileUtils.copyFile(new File(imgsrc), new File(imgdist));
        return;
      }

      //宽度除以高度的比例
      float wh = (float) width / (float) height;

      if (wh > 1) {
        float tmp_heigth = (float) widthdist / wh;
        BufferedImage tag = new BufferedImage(widthdist, (int) tmp_heigth,
                                              BufferedImage.TYPE_INT_RGB);
        tag.getGraphics().drawImage(src, 0, 0, widthdist, (int) tmp_heigth, null);
        FileOutputStream out = new FileOutputStream(imgdist);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(tag);
        out.close();
      }
      else {
        float tmp_width = (float) heightdist * wh;
        BufferedImage tag = new BufferedImage( (int) tmp_width, heightdist,
                                              BufferedImage.TYPE_INT_RGB);
        tag.getGraphics().drawImage(src, 0, 0, (int) tmp_width, heightdist, null);
        FileOutputStream out = new FileOutputStream(imgdist);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(tag);
        out.close();

      }
    }
    catch (IOException ex) {
      logger.error(ex);
    }
  }

}
这种方式!但生成的图过小的话就不清楚了!
   发表时间:2006-12-27  
把反锯齿功能打开啊
0 请登录后投票
   发表时间:2006-12-27  
能不能具体点啊!
0 请登录后投票
   发表时间:2006-12-27  
送上原图和生成生的图!
  • 描述: 原图
  • 大小: 60.7 KB
  • 描述: 生成后
  • 大小: 6.8 KB
0 请登录后投票
   发表时间:2006-12-27  
我也碰到了同样的问题,用photoshop缩小图片就是比用网上的Java程序缩小图片要清楚。
(注:对于JPEG,我采用同样的压缩率)
0 请登录后投票
   发表时间:2006-12-27  

我也有类似问题,在Google上搜索了一下,发现在C#中可以设置绘图清晰度,可以让生成的缩略图和PhotoShop生成的效果一样:

c# 代码
  1. Graphics _g = Graphics.FromImage(_newImg)      
  2. _g.SmoothingMode = SmoothingMode.AntiAlias;      
  3. _g.InterpolationMode = InterpolationMode.HighQualityBicubic;      
  4. _g.CompositingQuality = CompositingQuality.HighQuality;    

不知道在Java中有没有类似方法?

0 请登录后投票
   发表时间:2006-12-27  
JAVA中有没有什么比较好的方法啊!
0 请登录后投票
   发表时间:2006-12-27  
使用 Graphics2D

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

Core Java™ 2 Volume II 第 7 章有详细的介绍

0 请登录后投票
   发表时间:2006-12-27  
有没有现成的例子啊!
0 请登录后投票
   发表时间:2006-12-27  
java 代码
  1. RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,  RenderingHints.VALUE_ANTIALIAS_ON);   
  2. qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);  
  3. g2d.setRenderingHints(qualityHints);  

这个以前试过的,好像什么效果。。。,连生成的文件大小都与不加这段代码时是一样的,所以怀疑这个是不是就是Java2D的默认值。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics