zoukankan      html  css  js  c++  java
  • 图片压缩,裁切,水印工具类

    package default;

    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;

    import javax.imageio.ImageIO;

    import net.coobird.thumbnailator.Thumbnails;
    import net.coobird.thumbnailator.geometry.Positions;

    /**
     * 图片缩略、裁剪、添加水印工具类
     * @author  Henry
     * @version  [版本号, Jun 20, 2017]
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    public class ImageThumbUtils {

        /** 压缩质量为100% */
        public static double PERCENT_100 = 1.0;

        /**
         * 图片尺寸不变,图片内存压缩
         * 压缩图片文件大小outputQuality实现,参数1为最高质量,此处0.1f表示压缩为原内存的1/10
         *
         * @param originalImgPath 源图片路径
         * @param targetImgPath   压缩后图片路径
         * @throws Exception
         * @author Henry
         * @version [版本号, Jun 20, 2017]
         * @see [类、类#方法、类#成员]
         */
        public static void thumbImage(String originalImgPath, String targetImgPath) throws Exception {
            Thumbnails.of(originalImgPath).scale(1f).outputQuality(0.1f).toFile(targetImgPath);
        }
        
        /**
         * 缩略图片,图片质量为源图的100%
         * @param originalImgPath  源图片存储路径
         * @param w                   图片压缩后的宽度
         * @param h                   图片压缩后的高度
         * @param targetImgPath    缩略图的存放路径
         * @throws Exception
         * @author  Henry
         * @version  [版本号, Jun 20, 2017]
         * @see [类、类#方法、类#成员]
         */
        public static void thumbImage(String originalImgPath, int w, int h, String targetImgPath) throws Exception {
            thumbImage(new FileInputStream(originalImgPath), w, h, targetImgPath, PERCENT_100);
        }

        /**
         * 缩略图片,图片质量为源图100%
         * @param originalImgData  源图片字节数
         * @param w                   图片压缩后的宽度
         * @param h                图片压缩后的高度
         * @param targetImgPath    缩略图的存放路径
         * @throws Exception
         * @author  Henry
         * @version  [版本号, Jun 20, 2017]
         * @see [类、类#方法、类#成员]
         */
        public static void thumbImage(byte[] originalImgData, int w, int h, String targetImgPath) throws Exception {
            thumbImage(new ByteArrayInputStream(originalImgData), w, h, targetImgPath, PERCENT_100);
        }

        /**
         * 按尺寸比例缩略
         * @param originalInputSteam   源图输入流
         * @param w                    缩略宽
         * @param h                    缩略高
         * @param targetImgPath        缩略图存储路径
         * @param compressQalitiy      缩略质量比例,0~1之间的数
         * @throws Exception
         * @author  Henry
         * @version  [版本号, Jun 20, 2017]
         * @see [类、类#方法、类#成员]
         */
        public static void thumbImage(InputStream originalInputSteam, int w, int h, String targetImgPath, double compressQalitiy) throws Exception {
            thumbImage(originalInputSteam, w, h, targetImgPath, compressQalitiy, true);
        }

        /**
         *
         * @param originalImgInputSteam  源图片输入流
         * @param w                         图片压缩后的宽度
         * @param h                         图片压缩后的高度
         * @param targetImgPath          缩略图的存放路径
         * @param compressQalitiy        压缩比例,0~1之间的double数字
         * @param keepAspectRatio        是否保持等比例压缩,是true,不是false
         * @throws Exception
         * @author  Henry
         * @version  [版本号, Jun 20, 2017]
         * @see [类、类#方法、类#成员]
         */
        public static void thumbImage(InputStream originalImgInputSteam, int w,    int h, String targetImgPath, double compressQalitiy, boolean keepAspectRatio) throws Exception {
            Thumbnails.of(originalImgInputSteam).size(w, h).outputQuality(Double.valueOf(compressQalitiy)).keepAspectRatio(true).toFile(targetImgPath);
        }

        /**
         * 图片裁剪
         * @param originalImgPath  源图片路径
         * @param position         位置 0正中间,1中间左边,2中间右边,3底部中间,4底部左边,5底部右边,6顶部中间,7顶部左边,8顶部右边,其他为默认正中间
         * @param w                   裁剪宽度
         * @param h                裁剪高度
         * @param targetImgPath    新图片路径
         * @throws Exception
         * @author  Henry
         * @version  [版本号, Jun 20, 2017]
         * @see [类、类#方法、类#成员]
         */
        public static void crop(String originalImgPath, int position, int w, int h, String targetImgPath) throws Exception {
            Thumbnails.of(originalImgPath).sourceRegion(getPositions(position), w, h).size(w, h).outputQuality(1).toFile(targetImgPath);
        }
        
        /**
         * 图片添加水印
         * @param originalImgPath   将被添加水印图片路径
         * @param watermarkImgPath  水印图片
         * @param position          位置 0正中间,1中间左边,2中间右边,3底部中间,4底部左边,5底部右边,6顶部中间,7顶部左边,8顶部右边,其他为默认正中间
         * @param opacity           不透明度,取0~1之间的float数字,0完全透明,1完全不透明
         * @param targetImgPath     含有水印的新图片路径
         * @throws Exception
         * @author  Henry
         * @version  [版本号, Jun 20, 2017]
         * @see [类、类#方法、类#成员]
         */
        public static void watermark(String originalImgPath, String watermarkImgPath, int position, float opacity, String targetImgPath) throws Exception {
            Thumbnails.of(originalImgPath).watermark(getPositions(position), ImageIO.read(new File(watermarkImgPath)), opacity).scale(1.0).outputQuality(1).toFile(targetImgPath);
        }

        private static Positions getPositions(int position) {
            Positions p = Positions.CENTER;
            switch (position) {
            case 0: {
                p = Positions.CENTER;
                break;
            }
            case 1: {
                p = Positions.CENTER_LEFT;
                break;
            }
            case 2: {
                p = Positions.CENTER_RIGHT;
                break;
            }
            case 3: {
                p = Positions.BOTTOM_CENTER;
                break;
            }
            case 4: {
                p = Positions.BOTTOM_LEFT;
                break;
            }
            case 5: {
                p = Positions.BOTTOM_RIGHT;
                break;
            }
            case 6: {
                p = Positions.TOP_CENTER;
                break;
            }
            case 7: {
                p = Positions.TOP_LEFT;
                break;
            }
            case 8: {
                p = Positions.TOP_RIGHT;
                break;
            }
            default: {
                p = Positions.CENTER;
                break;
            }
            }
            return p;
        }
    }

  • 相关阅读:
    咏码农
    IDisposable 的 Visual C# 模板
    PDF补丁丁(0.3.2.13测试版)新增光学字符识别(OCR)功能,将图片 PDF 文档的目录转换为书签
    PDF 补丁丁开发计划列表及已知问题
    PDF补丁丁0.3.3.9测试版(新增 PDF 文档结构探查器)
    PDF补丁丁(0.3.2.14测试版)优化提取PDF页面功能,删除PDF页面更方便
    PDF补丁丁(0.3.2.1测试版)新增光学字符识别(OCR)功能,识别 PDF 文档图片的文字
    PDF 补丁丁0.3.2 即将发布正式版
    PDF 补丁丁0.3.2版正式发布(新增PDF OCR,加强自动生成书签、书签编辑器等功能)
    PDF 补丁丁 0.3.3.10 测试版(新增结构探查器可编辑 PDF 文档)
  • 原文地址:https://www.cnblogs.com/zhc-hnust/p/7039502.html
Copyright © 2011-2022 走看看