Google提供的Thumbnails对图片的各种操作(缩放、加水印、翻转、转换图片格式)性能比jdk提供的好N倍,压缩出来的图片更清晰
2015-03-05 19:53
561 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">jar下载:</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">http://code.google.com/p/thumbnailator/</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">版本:thumbnailator-0.4.8.jar</span>
package com.lvmama.comm.utils.pic;
import java.awt.Image; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.geometry.Positions; @SuppressWarnings("restriction") public class ImageUtil2 { /** * 缩放图像(按高度和宽度缩放) * @param srcImageFile 源图像文件地址 * @param result 缩放后的图像地址 * @param height 缩放后的高度 * @param width 缩放后的宽度 * @throws IOException * @isPHP_PC php的pc端调用 * @isPHP_MOBILE php的移动无线端调用 */ public final static void scale(String srcImageFile, String newImageFile, int width,int height, boolean isPHP_PC,boolean isPHP_MOBILE) throws IOException { Image img = ImageIO.read(new File(srcImageFile)); int newWidth = img.getWidth(null),newHeight = img.getHeight(null); // 计算比例 if(isPHP_MOBILE && !isPHP_PC && img.getWidth(null) <= width){ //无线调用时,宽度没有压缩宽大,则返回原图 }else if ((img.getHeight(null) > height) || (img.getWidth(null) > width)) { if(isPHP_PC && !isPHP_MOBILE){//PHP的微游记PC端缩略图以定宽或定高(以较长的一边)为基准 if(img.getWidth(null) > img.getHeight(null)){ newWidth = width; newHeight = (int)(new Integer(width).doubleValue()/img.getWidth(null)*img.getHeight(null)); }else{ newHeight = height; newWidth = (int)(new Integer(height).doubleValue()/img.getHeight(null)*img.getWidth(null)); } }else if(isPHP_MOBILE && !isPHP_PC){//PHP的微游记(移动)端缩略图以定宽为基准 newWidth = width; newHeight = (int)(new Integer(width).doubleValue()/img.getWidth(null)*img.getHeight(null)); }else {//vst端:原图长/压缩长 > 原图宽/压缩图宽 ? 原图长/压缩长:原图宽/压缩图宽,以比例较大的为基准压缩 // 压缩比判断方法二 double ratio_height = (new Integer(height)).doubleValue()/ img.getHeight(null); double ratio_width = (new Integer(width)).doubleValue() / img.getWidth(null); if(ratio_height>ratio_width){ newHeight = height; newWidth = (int)((new Integer(height)).doubleValue()/ img.getHeight(null) * img.getWidth(null)); }else{ newWidth = width; newHeight = (int)((new Integer(width)).doubleValue() / img.getWidth(null) * img.getHeight(null)); } } } Thumbnails.of(srcImageFile) .size(newWidth, newHeight) .toFile(newImageFile); } /** * 添加图片水印 * * @param targetImg * 目标图片路径,如:C:\\myPictrue\\1.jpg * @param waterImg * 水印图片路径,如:C:\\myPictrue\\logo.png * @param positions 水印图片所在位置 * * @param alpha * 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明) * @param quality 压缩清晰度 * <b>建议为1.0</b> * @throws IOException */ public final static void pressImage(String targetImg, File waterImg, Positions positions, float alpha) throws IOException { Thumbnails.of(targetImg) .watermark(positions, ImageIO.read(waterImg), alpha) .scale(1)//缩放比例 .toFile(targetImg); } /** * 把图片印刷到图片上 * * @param pressImg * -- 水印文件 * @param targetImg * -- 目标文件 * @param alpha * 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明) * @param quality 压缩清晰度 * <b>建议为1.0</b> * * @throws IOException */ public final static void pressImage(String targetImg, String pressImg,float alpha) throws IOException { Thumbnails.of(targetImg) .watermark(Positions.TOP_LEFT, ImageIO.read(new File(pressImg)), alpha) .outputQuality(1)//生成质量100% .scale(1)//缩放比例 .toFile(targetImg); } /** * 把图片印刷到图片上 * * @param pressImg * -- 水印文件 * @param targetImg * -- 目标文件 * @param position * @param alpha * 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明) * @param quality 压缩清晰度 * <b>建议为1.0</b> * * @throws IOException */ public final static void pressImage(String targetImg, String pressImg, Positions position,float alpha) throws IOException { Thumbnails.of(targetImg) .watermark(position, ImageIO.read(new File(pressImg)), alpha) .outputQuality(1)//生成质量100% .scale(1)//缩放比例 .toFile(targetImg); } /** * 裁剪图片 * @throws IOException */ public static void region(String sourceImg,String newImgPath,int x,int y,int width,int height) throws IOException{ //指定坐标 Thumbnails.of(sourceImg) .sourceRegion(x, y, width, height)//x轴、y轴,裁剪宽、裁剪高 .size(width, height)//裁剪后的图片生成的尺寸 //设置是否按比例 false,图片可能会走形 默认true,必须在设置尺寸后设置 .keepAspectRatio(false) .toFile(newImgPath); } /** * 旋转图片 * @param sourceImage 原图片 * @param newImage 生成的新图片 * @param degrees 旋转度数 * @throws IOException */ public static void rorate(String sourceImage,String newImage,double degrees) throws IOException{ Thumbnails.of(sourceImage) .rotate(degrees)//旋转度数 .scale(1)//缩放比例 .toFile(newImage); } /** * 转换图片格式 * @param sourceImg 原图 * @param newImg 转换后的新图 * @param format 格式 * @throws IOException */ public static void transferImageFormat(String sourceImg,String newImg,String format) throws IOException{ Thumbnails.of(sourceImg) .outputFormat(format) .scale(1) .toFile(newImg); } public static void main(String[] args) { try { //ImageUtil2.scale("C:\\Users\\chengjiangbo\\Desktop\\images\\c743d228-3ecf-4711-9187-725f252d14b1.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\480_300.jpg", 480, 300, true, false); //ImageUtil2.pressImage("C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\QRCode.png",Positions.BOTTOM_CENTER, 1); //ImageUtil2.region("C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage123.jpg",0,0,100,100); //ImageUtil2.rorate("C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage111.jpg", 90); ImageUtil2.transferImageFormat("C:\\Users\\chengjiangbo\\Desktop\\images\\QRCode.png", "C:\\Users\\chengjiangbo\\Desktop\\images\\QRCode.jpg", "JPEG"); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- WINCE图片使用类,支持各种格式,支持旋转缩略图缩放等操作
- ImagesUtil java图片操作 缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
- java对图片的各种操作(压缩、加水印(文字或图片)、旋转)
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- ava 图片压缩 剪切 水印 转换 黑白 缩放
- ImagesUtil java图片操作 缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
- PHP----图像处理类,可以完成对各种类型的图像进行缩放、加图片水印和剪裁的操作
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- java 图片压缩 剪切 水印 转换 黑白 缩放
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- java实现缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
- PHP图片处理类实现缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色等功能
- Qt5:Qt中图片的翻转,旋转,缩放,扭曲操作
- 基于java的图片文件格式转换和线性缩放