大家帮帮忙,我做的生成图片的缩略图质量挺差的。呵呵!

解决方案 »

  1.   

    你好像是在求算法吧。我用swt的2Ddraw生成过效果还可以。
      

  2.   

    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.awt.image.WritableRaster;
    import java.awt.*;
    import java.awt.geom.AffineTransform;
    import java.io.InputStream;
    import java.io.File;
    import java.io.FileOutputStream;public class test {
        public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
               // targetW,targetH分别表示目标长和宽
                int type = source.getType();
                BufferedImage target = null;
                double sx = (double) targetW / source.getWidth();
                double sy = (double) targetH / source.getHeight();
                //这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
                      //则将下面的if else语句注释即可
                if(sx>sy)
                {
                    sx = sy;
                    targetW = (int)(sx * source.getWidth());
                }else{
                    sy = sx;
                    targetH = (int)(sy * source.getHeight());
                }
                if (type == BufferedImage.TYPE_CUSTOM) { //handmade
                    ColorModel cm = source.getColorModel();
                    WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
                    boolean alphaPremultiplied = cm.isAlphaPremultiplied();
                    target = new BufferedImage(cm, raster, alphaPremultiplied, null);
                } else
                 target = new BufferedImage(targetW, targetH, type);
                Graphics2D g = target.createGraphics();
                //smoother than exlax:
                g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
                g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
                g.dispose();
                return target;
            }
        public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
                    throws Exception {
                BufferedImage srcImage;
                File saveFile=new File(saveToFileStr);
                File fromFile=new File(fromFileStr);
                srcImage = ImageIO.read(fromFile);
                if(width > 0 || hight > 0)
                {
                     srcImage = resize(srcImage, width, hight);
                }
                ImageIO.write(srcImage, "JPEG", saveFile);        }
        public static void main (String argv[]) {
            System.err.println("xxxxxx");
            try{
                //参数1(from),参数2(to),参数3(宽),参数4(高)
                  test.saveImageAsJpg("c:/2.jpg","c:/3.jpg",400,400);
            }  catch(Exception e)
            {
                e.printStackTrace();
            }    }
    }
    //我现在写的!看看有没有更好的!
      

  3.   


    BufferedImage.getScaledInstance() 效果不好吗?
      

  4.   

    能否在说的细一些!或者给各demo!先谢了!!!!!