/**
* @Project: hehenian-biz-common
* @Package com.hehenian.biz.common.filesaving.utils
* @Title: ImageThumbUtils.java
* @Description: TODO
* @author: liuzgmf
* @date 2015年1月20日 下午3:57:59
* @Copyright: HEHENIAN Co.,Ltd. All rights reserved.
* @version V1.0
*/
package com.hehenian.biz.common.filesaving.utils;
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: liuzgmf
* @date 2015年1月20日 下午4:04:00
*/
public class ImageThumbUtils {
/**
* 缩略图片,图片质量为源图的80%
*
* @param originalImgPath
* 源图片存储路径
* @param w
* 图片压缩后的宽度
* @param h
* 图片压缩后的高度
* @param targetImgPath
* 缩略图的存放路径
* @throws Exception
* @date 2015年1月20日 下午4:04:00
*/
public static void thumbImage(String originalImgPath, int w, int h, String targetImgPath) throws Exception {
thumbImage(new FileInputStream(originalImgPath), w, h, targetImgPath, 0.8);
}
/**
* 缩略图片,图片质量为源图的80%
*
* @param originalImgData
* 源图片字节数
* @param w
* 图片压缩后的宽度
* @param h
* 图片压缩后的高度
* @param targetImgPath
* 缩略图的存放路径
* @throws Exception
* @date 2015年1月20日 下午4:04:00
*/
public static void thumbImage(byte[] originalImgData, int w, int h, String targetImgPath) throws Exception {
thumbImage(new ByteArrayInputStream(originalImgData), w, h, targetImgPath, 0.8);
}
/**
* 按尺寸比例缩略
*
* @param originalInputSteam
* 源图输入流
* @param w
* 缩略宽
* @param h
* 缩略高
* @param targetImgPath
* 缩略图存储路径
* @param compressQalitiy
* 缩略质量比例,0~1之间的数
* @throws Exception
* @date 2015年1月20日 下午4:04:00
*/
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
* @date 2015年1月20日 下午4:04:00
*/
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 targetImgPath
* 新图片路径
* @param position
* 位置 0正中间,1中间左边,2中间右边,3底部中间,4底部左边,5底部右边,6顶部中间,7顶部左边,8顶部右边,
* 其他为默认正中间
* @param w
* 裁剪宽度
* @param h
* 裁剪高度
* @throws Exception
* @date 2015年1月20日 下午4:04:00
*/
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 targetImgPath
* 含有水印的新图片路径
* @param watermarkImgPath
* 水印图片
* @param position
* 位置 0正中间,1中间左边,2中间右边,3底部中间,4底部左边,5底部右边,6顶部中间,7顶部左边,8顶部右边,
* 其他为默认正中间
* @param opacity
* 不透明度,取0~1之间的float数字,0完全透明,1完全不透明
* @throws Exception
* @date 2015年1月20日 下午4:04:00
*/
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;
}
public static void main(String[] args) throws Exception {
thumbImage("E:/1.jpg", 600, 600, "E:/3.jpg");
// crop("D:/test1/s2.jpg", 7, 200, 300, "D:/test1/s3.jpg");
// watermark("D:/test1/1.jpeg", "D:/test1/s3.jpg", 7, 1,
// "D:/test1/s4.jpg");
}
}