压缩图片方法

原创 2016年06月01日 14:28:40
public class ImgTools {
 
    /**
     * 按照 宽高 比例压缩
     * 
     * @param img
     * @param width
     * @param height
     * @param out
     * @throws IOException
     */
    public static void thumbnail_w_h(File img, int width, int height,
            OutputStream out) throws IOException {
        BufferedImage bi = ImageIO.read(img);
        double srcWidth = bi.getWidth(); // 源图宽度
        double srcHeight = bi.getHeight(); // 源图高度
 
        double scale = 1;
 
        if (width > 0) {
            scale = width / srcWidth;
        }
        if (height > 0) {
            scale = height / srcHeight;
        }
        if (width > 0 && height > 0) {
            scale = height / srcHeight < width / srcWidth ? height / srcHeight
                    : width / srcWidth;
        }
 
        thumbnail(img, (int) (srcWidth * scale), (int) (srcHeight * scale), out);
 
    }
 
    /**
     * 按照固定宽高原图压缩
     * 
     * @param img
     * @param width
     * @param height
     * @param out
     * @throws IOException
     */
    public static void thumbnail(File img, int width, int height,
            OutputStream out) throws IOException {
        BufferedImage BI = ImageIO.read(img);
        Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);
 
        BufferedImage tag = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics g = tag.getGraphics();
        g.setColor(Color.RED);
        g.drawImage(image, 0, 0, null); // 绘制处理后的图
        g.dispose();
        ImageIO.write(tag, "JPEG", out);
    }
 
    /**
     * 按照宽高裁剪
     * 
     * @param srcImageFile
     * @param destWidth
     * @param destHeight
     * @param out
     */
    public static void cut_w_h(File srcImageFile, int destWidth,
            int destHeight, OutputStream out) {
        cut_w_h(srcImageFile, 0, 0, destWidth, destHeight, out);
    }
 
    public static void cut_w_h(File srcImageFile, int x, int y, int destWidth,
            int destHeight, OutputStream out) {
        try {
            Image img;
            ImageFilter cropFilter;
            // 读取源图像
            BufferedImage bi = ImageIO.read(srcImageFile);
            int srcWidth = bi.getWidth(); // 源图宽度
            int srcHeight = bi.getHeight(); // 源图高度
 
            if (srcWidth >= destWidth && srcHeight >= destHeight) {
                Image image = bi.getScaledInstance(srcWidth, srcHeight,
                        Image.SCALE_DEFAULT);
 
                cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
                img = Toolkit.getDefaultToolkit().createImage(
                        new FilteredImageSource(image.getSource(), cropFilter));
                BufferedImage tag = new BufferedImage(destWidth, destHeight,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = tag.getGraphics();
                g.drawImage(img, 0, 0, null); // 绘制截取后的图
                g.dispose();
                // 输出为文件
                ImageIO.write(tag, "JPEG", out);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }// #cut_w_h
 
    public static void main(String[] args) throws IOException {
    //C:\Users\shixiaopeng\Desktop
        File img = new File("C:\\Users\\shixiaopeng\\Desktop\\50元优惠券2.png");
        FileOutputStream fos = new FileOutputStream("C:\\Users\\shixiaopeng\\Desktop\\50元.jpg");
         ImgTools.thumbnail(img, 600, 840, fos);
        // ImgTools.cut_w_h(img, 230, 200, fos);
        //ImgTools.thumbnail_w_h(img, 100, 0, fos);
    }
 
}

相关文章推荐

java中压缩图片方法

  • 2017年09月30日 15:07
  • 5KB
  • 下载

Android压缩图片到100K以下并保持不失真的高效方法

转自:http://my.eoe.cn/isnull/archive/564.html 前言:目前一般手机的相机都能达到800万像素,像我的Galaxy Nexus才500万像素,拍摄的照片...

Image经典图片压缩方法

  • 2016年05月31日 16:09
  • 209KB
  • 下载

iOS 图片压缩UIImage方法扩展

iOS自带的提供了一个API如下 [html] view plaincopy NSData *UIImageJPEGRepresentation(U...

Android一种高效压缩图片的方法

  • 2016年02月19日 11:54
  • 3.99MB
  • 下载

java版图片压缩方法

  • 2012年12月03日 16:23
  • 5KB
  • 下载

上传压缩后的图片并且保持100k不失真的方法

压缩100k图片不失真的方法;先获取图片的原始长度和宽度;然后计算图片的缩放值;最后等比例压缩;...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:压缩图片方法
举报原因:
原因补充:

(最多只允许输入30个字)