• Java实现图片压缩代码,图片大小转换


    在很多项目中我们会把上传的图片做处理,比较图片上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的高清图片,我们可以通过代码来做压缩。在我的项目中我们压缩图片的目的是让web页面打开的速度很快,并且节省空间。

    下面先分享一下代码:

    package org.util;
     
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.awt.image.CropImageFilter;
    import java.awt.image.FilteredImageSource;
    import java.awt.image.ImageFilter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
     
    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 {
            File img = new File("e:\a\a.jpg");
            FileOutputStream fos = new FileOutputStream("e:\a\b.jpg");
            // ImgTools.thumbnail(img, 100, 100, fos);
            // ImgTools.cut_w_h(img, 230, 200, fos);
            ImgTools.thumbnail_w_h(img, 100, 0, fos);
        }
     
    }

    其实我们很多人喜欢在上传的时候就做了限制了,这样在上传时就节省了带宽,可是很多客户是不会做图片处理的,5M的大图直接就给你上传,限制了说我们做的不人性化。无奈之下只能在后台进行转换。

  • 相关阅读:
    开源 免费 java CMS FreeCMS功能说明单位管理
    用Spring让Java Mail支持简化邮件发送
    Java Mail简化邮件发送+附件发送(源码奉上)
    java common practice to rethrow exceptions
    浅谈Java内存泄露
    全局样式
    求最大公约数和最小公倍数
    求所有水仙花数
    indexedDB数据库的使用
    fileReader读取文件
  • 原文地址:https://www.cnblogs.com/lr393993507/p/5447224.html
Copyright © 2020-2023  润新知