图片压缩,裁切,水印工具类

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;
    }
}

时间: 2024-10-14 13:29:29

图片压缩,裁切,水印工具类的相关文章

图片压缩 compress【工具类】

压缩方法简介 质量压缩 方法:bitmap .compress(Bitmap.CompressFormat.JPEG, options, baos); 目的:将图片保存到本地时进行压缩, 即将图片从Bitmap形式变为File形式时进行压缩特点:能在一定程度减少图片的以File形式保存到磁盘时的大小,但不会减少图片的像素,也即不会减少图片加载到内存时占用的内存大小 该方法的官方文档解释说,它会让图片重新构造,但是有可能图像的位深(即色深)和每个像素的透明度会变化,JPEG onlysupport

PictureCutting图片批量裁切(裁剪)工具

PictureCutting图片批量裁切(裁剪)工具 写这个工具的原因是因为在获取一个软件的皮肤包中的图片的时候需要进行批量的裁切工作,而有没有找到在linux下简单好用的工具,干脆就用QT写了一个. 项目地址  https://git.oschina.net/oloroso/PictureCutting.git 批量裁切 批量裁切是这个软件的主要功能.单击按钮添加要进行处理的图片,然后在右侧选择裁切方式和设置裁切参数,左下角选择裁切输出参数和输出的目录和文件名选项,点击开始按钮即可. 按比例裁

Java 压缩文件夹工具类(包含解压)

依赖jar <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.18</version> </dependency> CompressUtils.java package utils; import java.io.BufferedInputStream;

拍照党福利驾到 华为云微认证教你实现图片压缩和水印添加

在手机拍照成为日常的今天,用照片记录生活已成为人们的一种习惯.拍照容易处理难,面对手机相册中大量的照片,你是否也苦恼过?删,舍不得:上传,会不会被盗图?能否发出足够个性的图片称霸朋友圈?不用担心,华为云微认证结合函数工作流服务,教你轻松实现图片压缩和水印添加,让您体验函数工作流带来的高资源利用率和高处理效率,让即便是无照不活的拍照党也再无后顾之忧. 云服务助力图片存储及管理一般而言,我们压缩图片有四种方法:使用图片压缩软件.网页在线图片压缩.自设图片压缩代码.使用云服务批量压缩.水印添加一般也有

Java.util.zip 压缩与解压缩工具类

Java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类. 还包括使用 DEFLATE 压缩算法(用于 ZIP 和 GZIP 文件格式)对数据进行压缩和解压缩的类. 依赖 Jdk 编写该工具类,不依赖任何第三方 jar,随用随取,实现功能大体如下: 1.目录级别递归压缩与解压缩 zip: 2.单文件压缩和解压缩 zip : import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipIn

Glide 图片请求库(工具类)

Glide :Google推荐的图片加载库,专注于流畅的滚动,Github下载地址: https://github.com/bumptech/glide/releases/ 封装的工具类: import com.bumptech.glide.DrawableTypeRequest; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com

Base64 和 图片互转java工具类

package com.fengyunhe.helper.image; import java.io.*; /** * 图片base64互转 * Created by yangyan on 2015/8/11. */ public class ImageBase64Utils { public static String bytesToBase64(byte[] bytes) { return org.apache.commons.codec.binary.Base64.encodeBase64

Android中常用的工具类01

1.图片和视频缩略图工具类 import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.ThumbnailUtils; /** * 缩略图生成工具类 * @author * */ public class ThumbnailGenerateUtils { private ThumbnailGenerateUtils(){}; /** * 根据指定的图像路径和大小来获取缩略图

IOS开发--常用工具类收集整理(Objective-C)(持续更新)

前言:整理和收集了IOS项目开发常用的工具类,最后也给出了源码下载链接. 1.让图片不要渲染的工具类 简介:   直接看这个工具类的源码就知道,怎么设置了: 1 // 2 // UIImage+Render.h 3 // Created by HeYang on 16/1/18. 4 // Copyright © 2016年 HeYang. All rights reserved. 5 // 6 7 #import <UIKit/UIKit.h> 8 9 @interface UIImage