public static void scalepic(String FileSource,String FileResult,int PicWidth)
   {
    try{
        File file1=new File(FileSource);
        Image src=javax.imageio.ImageIO.read(file1); //构造Image对象
        int wideth=src.getWidth(null); //得到源图宽
        int height=src.getHeight(null);//得到源图高
        int PicHeight=(PicWidth*height)/wideth;//等比例缩放,高是靠长换算到的缩放值
         BufferedImage tag = new BufferedImage(PicWidth,PicHeight,BufferedImage.TYPE_INT_RGB);
      tag.getGraphics().drawImage(src,0,0,PicWidth,PicHeight,null); //绘制缩小后的图
      try{
        FileOutputStream out = new FileOutputStream(FileResult); //输出到文件流
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  //也就是先输出再编码
         JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag); 
         float quality=600f;    //这句已经尽量提高画质了
         param.setQuality(quality, false);         encoder.encode(tag,param); //近JPEG编码
        //System.out.print(width+"*"+height);
        out.close();
        //ImageIcon img=new ImageIcon("235.gif");
        //JOptionPane pane1=new JOptionPane();
        //pane1.showMessageDialog(null,"图片已修改成功","修改成功",JOptionPane.ERROR_MESSAGE,img);
      }
      catch(Exception ef)
      {
        System.out.print("输出文件路径错误");
      }
       }
      catch(Exception em)
      {
        System.out.print("输入文件路径错误");
      }
   }缩略很成功,但我是把大图片改成500多宽的图象,对画质有要求,但无论怎么提高float quality=600f;也始终无法得到如同FW等绘图工具修改得到的缩略图画质,且差的很远希望高手指正算法,给出解决方案

解决方案 »

  1.   

    Image.getScaledInstance() 提供了很多现成的算法,输出图像质量也可以得到保证,不要直接用drawImage了
      

  2.   

    试试这个方法
    Graphics2D.setRenderingHint(RenderingHints.Key hintKey, Object hintValue) 
    Graphics2D.setRenderingHints(Map<?,?> hints)RenderingHints 类支持下列类型的建议:
    Alpha interpolation--可设置为缺省、质量或速度。 
    Antialiasing--可设置为缺省、打开或关闭。 
    Color Rendering--可设置为缺省、质量或速度。 
    Dithering--可设置为缺省、禁用或启用。 
    Fractional Metrics--可设置为缺省、打开或关闭。 
    Interpolation--可设置为最近邻域、双线性或双三次。 
    Rendering--可设置为缺省、质量或速度。 
    Text antialiasing--可设置为缺省、打开或关闭。