最近研究了下windows下使用ImageMagick和GraphicsMagick+im4j处理图片,发现convert命令与系统中命令相冲突,网上有很多的资料都讲的不是很详细,总结了下分享给大家.
im4j包和GraphicsMagick在windows下的安装文件最下面提供下载。
GraphicsMagick在windows下使用:
public static void cropImage(String srcPath, String desPath, int sw, int sh,
int dw, int dh) throws Exception {
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);
}
if ((sw <= dw) && (sh > dh))// 如果源图宽度小于目标宽度,并且源图高度大于目标高度
{
op.resize(sw, sh); // 压缩图片
op.append().crop(sw, dh, 0, (sh - dh) / 2);// 切割图片
}
if ((sw > dw) && (sh <= dh))// 如果源宽度大于目标宽度,并且源高度小于目标高度
{
op.resize(sw, sh);
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, ch); // 按目标宽度压缩图片
op.append().crop(dw, dh, 0, (ch > dh) ? ((ch - dh) / 2) : 0); // 根据高度居中切割压缩后的图片
} else // (宽大于高的图片)
{
int cw = (int) (ratioh * sw); // 压缩后的图片宽度
op.resize(cw, 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
}
ConvertCmd convert = new ConvertCmd(true)这里就与系统命令发生了冲突,改为ConvertCmd convert = new ForWinConvertCmd(true)冲突消失。
public class ForWinConvertCmd extends ConvertCmd {
public ForWinConvertCmd() {
super();
this.initForWin();
}
public ForWinConvertCmd(boolean useGM) {
super(useGM);
this.initForWin();
}
@SuppressWarnings("unchecked")
protected void initForWin() {
if (System.getProperty("os.name").startsWith("Windows")) {
try {
Field field = this.getClass().getSuperclass().getSuperclass()
.getDeclaredField("iCommands");
field.setAccessible(true);
List<String> value = (List<String>) field.get(this);
value.addAll(0, Arrays.asList(new String[]{"cmd","/C"}));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
以上希望能够帮助到大家!!
分享到:
相关推荐
GraphicsMagick号称图像处理领域的瑞士军刀。 短小精悍的代码却提供了一个鲁棒、高效的工具和库集合...本文档详细的介绍了 GraphicsMagick+im4java的搭建过程,对一些搭建过程中出现的问题进行了详细的解答,避免采坑。
ChineseWaterMark IM4JAVA+GraphicsMagick实现中文水印
Nginx+Lua+GraphicsMagick实现动态生成指定尺寸的图片
关于使用Tengine+Lua+GraphicsMagick实现图片自动裁剪缩放的开发文档。
GraphicsMagick++ 的本机绑定。 一些细节可以在这篇找到。 快速使用: var gm = require ( 'gm-native' ) ; var outputBuffer = gm . convert ( // Required. Can also be URL, file path or Buffer object. ...
使用GraphicsMagick处理图片 添加水印 合成图片 图片转换 图片处理
高效的图片处理工具,可以与im4j一起使用,对图片进行压缩、剪裁、水印等处理。
GraphicsMagick是一个短小精悍的的图片处理工具和库集合。对于Java开发者来说,常用的图片处理工具有3个,JDK自带的图片处理库,ImageMagick,GraphicsMagick。JDK自带的图片处理库,虽稳定简单,性能却比较差;...
缩略图OpenResty(Nginx)+Lua+GraphicsMagick
GraphicsMagick 是一个用来读写、生成超过 90 种图像格式的工具集合,可以对图片进行格式参数处理,支持包括 TIFF, JPEG, JPEG-2000,PNG, PDF, PhotoCD, SVG, 和 GIF 等图像格式。GraphicsMagick 是基于 ImageMagick...
将图片的上传,分布式管理 交由seaweedfs管理,可提供更快的响应速度,更方便,无痛的分布式扩展节点,billion 级别的。后面使用openresty + lua-resty-weedfs + graphicsmagick 生成缩略图功能独立处理。
GraphicsMagick能够动态的生成图片,特别适用于互联网的应用。可以用来处理调整尺寸、旋转、加亮、颜色调整、增加特效等方面。GaphicsMagick不仅支持命令行的模式,同时也支持C、C++、Perl、PHP、Tcl、 Ruby等的调用
实现图片自动伸缩功能(Tengine+Lua+GraphicsMagick)
教你如何搭建一个图片切割和缩放的服务 1.搭建GraphicsMagick服务 2.配置nginx 3.修改Lua脚本 详情见文档
Docker+FastDFS+Nginx+Lua实现图片缩略图1、FastDFS安装1.1、镜像下载1.2、开启tracker容器1.3、开启storage容器1.4、测试2、FastDFS集成Nginx+lua2.1、依赖包下载2.2、安装软件基础包2.3、依赖安装2.4、配置Lua脚本...
GraphicsMagick图片库GraphicsMagick-1.3.26.tar.xz Java图片处理 - 安装ImageMagick库使用convert命令 - 文章中的辅助文件 http://blog.csdn.net/chwshuang/article/details/64921665
GraphicsMagick-1.3.40安装包,包含linux版本,windows32和windows64
GraphicsMagick 图片处理案例,安装包,LINUX环境解压配置环境变量安装