我现在使用的JDK的压缩图片的方法,比如原图500x500 像素,大小60KB ,大图看上去很清楚,我按比例1:1压缩到200x200之后,小图片变得很模糊,大小大概5KB左右。 我试着弄了一张1000x1000像素250多KB的图片,压缩到200x200之后还是有点模糊, 有什么办法保证压缩后的图片能够清楚一点, 或者说用其他方式。。

解决方案 »

  1.   

    package com.ibmssz.test;import java.awt.Image;  
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;public class lessenImg { public static void main(String[] args) {
    File file=new File("D://1.jpg");
    try {
    Image src=ImageIO.read(file);
    BufferedImage bufferedImage=new BufferedImage(240,200,BufferedImage.TYPE_INT_RGB);
    bufferedImage.getGraphics().drawImage(src,0,0,240,200,null);//绘制缩小后的图,两个一致...
    OutputStream os=new FileOutputStream("D://aa.jpg");
    JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(os);
    encoder.encode(bufferedImage);
    os.close();
    System.out.println("完成");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
      

  2.   

    必然是用 BufferedImage //将指定的BufferedImage,缩放为{width,height}的大小,并返回一个新的BufferedImage
    public static BufferedImage resizeBuff(BufferedImage bufImage, int width, int height) {
    AffineTransform transform = AffineTransform.getScaleInstance(
    (double)width/(double)bufImage.getWidth(), 
    (double)height/(double)bufImage.getHeight());
    AffineTransformOp op = new AffineTransformOp(transform, 
    AffineTransformOp.TYPE_BILINEAR);
    return op.filter(bufImage, null);
    }
    这应该是失真比较小的一种方式了
      

  3.   

    楼上的怎么用不了
    我最后的方法时这样
    public static String reduceImg(File imgsrc, String imgdist, int width,int height) { try { Image src = javax.imageio.ImageIO.read(srcfile); if (width <= 0 || height <=0 ) {
    return "";
    }  BufferedImage tag = new BufferedImage((int) width, (int) height,
    BufferedImage.TYPE_INT_RGB);

    //----图像失真比较小的方法-----
     AffineTransform transform = AffineTransform.getScaleInstance(
     (int) width, (int) height);
            AffineTransformOp op = new AffineTransformOp(transform, 
                    AffineTransformOp.TYPE_BILINEAR);
             op.filter(tag, null);
             op.filter(tag, null).getGraphics().drawImage(
    src.getScaledInstance((int) width, (int) height,
    Image.SCALE_SMOOTH), 0, 0, null);// tag.getGraphics().drawImage(
    // src.getScaledInstance((int) width, (int) height,
    // Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream out = new FileOutputStream(imgdist);
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    encoder.encode(tag);
    out.close(); return imgdist; } catch (IOException ex) { ex.printStackTrace();
    return null;
    } }
    报异常,op.filter(tag, null); 在这里下去