package com.lenovo.shop.util;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.LogFactoryImpl;
import org.im4java.core.ConvertCmd;
import org.im4java.core.IMOperation;
public class GraphicsMagickUtil {
private static final Log log = LogFactoryImpl.getLog(GraphicsMagickUtil.class);
/**
* resize实现
* @param srcPath 源图片路径
* @param desPath 目标图片路径
* @param sw 源图片宽度
* @param sh 源图片高度
* @param dw 目标图片宽度
* @param dh 目标图片高度
* @throws Exception
*/
public static void cropImage(String srcPath, String desPath, int dw, int dh) throws Exception {
log.info("srcPath:"+srcPath+" desPath:"+desPath+" dw:"+dw+" dh:"+dh);
Map map = getImgInfo(new File(srcPath));
if(map ==null ) return ;
int sw = (Integer) map.get("w");
int sh = (Integer) map.get("h");
if (sw <= 0 || sh <= 0 || dw <= 0 || dh <= 0) {
return;
}
IMOperation op = new IMOperation();
op.addImage();
// 如果源图宽度和高度都小于目标宽高,则仅仅压缩图片
if ((sw <= dw) && (sh <= dh)) {
op.resize(sw, sh);
}else{
op.resize(dw, dh);// 压缩图片
}
//// 如果源图宽度小于目标宽度,并且源图高度大于目标高度
//if ((sw <= dw) && (sh > dh)) {
//op.resize(dw, dh);// 压缩图片
////op.append().crop(sw, dh, 0, (sh - dh) / 2); // 切割图片
//}
//// 如果源宽度大于目标宽度,并且源高度小于目标高度
//if ((sw > dw) && (sh <= dh)) {
//op.resize(dw, dh);
////op.append().crop(dw, sh, (sw - dw) / 2, 0);
//}
//// 如果源图宽、高都大于目标宽高
//if (sw > dw && sh > dh) {
//float ratiow = (float) dw / sw; // 宽度压缩比
//float ratioh = (float) dh / sh; // 高度压缩比
//// 宽度压缩比小(等)于高度压缩比(是宽小于高的图片)
//if (ratiow >= ratioh) {
//int ch = (int) (ratiow * sh);// 压缩后的图片高度
//op.resize(dw, dh);// 按目标宽度压缩图片
////op.append().crop(dw, dh, 0, (ch > dh) ? ((ch - dh) / 2) : 0);// 根据高度居中切割压缩后的图片
//} else {// (宽大于高的图片)
//int cw = (int) (ratioh * sw);// 压缩后的图片宽度
//op.resize(dw, dh);// 按计算的宽度进行压缩
////op.append().crop(dw, dh, (cw > dw) ? ((cw - dw) / 2) : 0, 0);// 根据宽度居中切割压缩后的图片
//}
//}
op.addImage();
ConvertCmd convert = new ConvertCmd(true);
convert.run(op, srcPath, desPath);// BufferedImage or String
}
/**
* 计算图片尺寸大小等信息:w宽、h高、s大小。异常时返回null。
*
* @param imgpath 图片路径
* @return 图片信息map
*/
public static Map<String, Integer> getImgInfo(File imgfile) {
Map<String, Integer> map = new HashMap<String, Integer>(3);
try {
FileInputStream fis = new FileInputStream(imgfile);
BufferedImage buff = ImageIO.read(imgfile);
map.put("w", buff.getWidth() * 1);
map.put("h", buff.getHeight() * 1);
fis.close();
} catch (FileNotFoundException e) {
System.err.println("所给的图片文件" + imgfile.getPath() + "不存在!计算图片尺寸大小信息失败!");
map = null;
} catch (IOException e) {
System.err.println("计算图片" + imgfile.getPath() + "尺寸大小信息失败!");
map = null;
}
return map;
}
public static void main(String[] args) {
try {
long st= System.currentTimeMillis();
cropImage("C:/TEMP/aa.jpg", "C:/TEMP/300/aa.jpg", 300, 300);
long se = System.currentTimeMillis();
System.out.println("time="+(se-st));
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩...
C#/Core下,最完美的图片压缩,支持各种图片格式,无损压缩,无损剪切,按尺寸/比例压缩、剪切图片,根据自己需要任意处理图片
图片压缩图片压缩图片压缩图片压缩图片压缩图片图片压缩压缩
Grearo图片压缩工具 功能介绍【必读】: 1 图片批量压缩(30以内,依个人机器以及被压缩图片大小而定); 2 图片限定宽度,等比例压缩; 3 图片限定高度,等比例压缩; 4 图片限定高度,宽度压缩;...
一款精美图片压缩网站源码.rar 源码介绍 一款很好看的图片压缩网站,原本的源码引用的国外js站点,我给下载放到本地调用了,访问速度更快。 一款很好看的图片压缩网站,原本的源码引用的国外js站点,我给下载放到...
图片压缩工具PNG图片压缩工具压缩率高不失真
java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理
图片压缩工具图片压缩工具图片压缩工具图片压缩工具图片压缩工具图片压缩工具
png图片压缩器,方便你尽可能的缩小图片的大小。
JPEG Optimizer您手上有图片需要压缩?体积太大了?用JPEG Optimizer来压缩一下吧?它是一个非常专业的高压缩率不失真的图片压缩软件,例如原图440KB,用JPEG Optimizer压缩后120KB左右,怎么样?并且压缩后的效果与原图...
图片压缩 修改路劲 图片压缩flex demo
* 压缩图片,将图片压缩后以二进制的形式输出 * * @param file * 将要压缩的图片 * @param width * 压缩宽(长度短的做宽) * @param height * 压缩长(长度长的做长) * @return byte[]二进制流 */
图片压缩到最小.rar
做图修图软件【智图】图片压缩做图修图软件【智图】图片压缩做图修图软件【智图】图片压缩做图修图软件【智图】图片压缩做图修图软件【智图】图片压缩做图修图软件【智图】图片压缩做图修图软件【智图】图片压缩做图...
jpg 图片压缩 jpg 图片压缩 jpg 图片压缩 jpg 图片压缩 jpg 图片压缩 jpg 图片压缩
超级好用的图片压缩工具,把图片压缩成你想要的大小,还支持批量压缩~
直接打开ImageResizer.exe即可,免安装,不占内存,超实用的压缩图片工具
PNG图片压缩工具 pngquant,将需要压缩的png图片放至img目录,然后双击run.bat即可,通常能将图片压缩至原1/2-2/3的大小。
带java后台的mui图片压缩上传及回显。 图片可以多选,压缩率可以自己设置。 复制过去即可使用。
完美支持各个主流浏览器,chrome,火狐, ios ,android 微信等的浏览器。解决某些手机拍照 图片旋转问题,解决图片压缩问题。欢迎使用