压缩图片方法

原创 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);
    }
 
}

VB压缩图片代码

VB压缩图片Option ExplicitPrivate Type GUID    Data1 As Long    Data2 As Integer    Data3 As Integer    D...
  • tuzi_xz
  • tuzi_xz
  • 2008年04月07日 14:46
  • 2478

使用java实现多种方式解决图片压缩的问题

前端时间在使用对图片加水印后,由于需加水印的图片的宽度和高度都非常的大,加了水印后图片从几百KB,变成了几MB,严重影响了图片在页面的加载速度! 经过仔细的琢磨,决定先对图片进行压缩,再加水印。采...
  • Mr_Smile2014
  • Mr_Smile2014
  • 2016年07月18日 17:20
  • 22639

图片的三种压缩方法

在android程序开发中我们经常见到需要上传图片的场景,在这里有个技术点,需要把图片压缩处理,然后再进行上传。这样可以减少流量的消耗,提高图片的上传速度等问题。 关于android如何压缩,网上的...
  • qq_34476727
  • qq_34476727
  • 2016年08月27日 18:04
  • 851

PHP图片压缩的方法

项目里要求上传图片并进行缩放、压缩质量保存到服务器。 起初用php的image函数,结果jpg格式的图片保存正常,png格式的图片保存到服务器后损坏,大小变为0,方法如下: if ($imageTyp...
  • millerwang23
  • millerwang23
  • 2016年02月04日 17:03
  • 2121

Android图片压缩的几种方式

图片的几种压缩方式总结实际项目中,对图片的压缩处理相当常见,下面总结几种压缩的方式: 只压缩质量的方式: /** * 只压缩质量的方法 * @param file 源文件 ...
  • bravejiezai
  • bravejiezai
  • 2016年04月26日 16:44
  • 753

java 等比压缩图片文件

java等比压缩图片
  • high2011
  • high2011
  • 2015年11月11日 10:47
  • 1048

java 使用Thumbnailator 上传图片 并压缩图片大小

http://www.cnblogs.com/miskis/p/5500822.html java 上传图片 并压缩图片大小 Thumbnailator 是一个优秀的图片处...
  • u014401141
  • u014401141
  • 2016年11月29日 12:51
  • 4627

压缩图片的方法(压缩图片的质量)

/** * 多线程压缩图片的质量 * @param image 内存中的图片 * @param imgPath 图片的保存路径 */ private...
  • u013322594
  • u013322594
  • 2016年01月14日 11:56
  • 171

bitmap的六种压缩方式,图片压缩

转载自:http://blog.csdn.net/harryweasley/article/details/51955467android中图片是以bitmap形式存在的,那么bitmap所占内存,直...
  • uniquemei
  • uniquemei
  • 2016年09月18日 13:41
  • 909

android压缩图片方法

 第一步压缩图片: Java code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
  • yuanyuan_186
  • yuanyuan_186
  • 2014年08月04日 09:20
  • 290
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:压缩图片方法
举报原因:
原因补充:

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