设为首页 加入收藏

TOP

Linux平台下对JMagick的一个简单封装(一)
2014-11-24 03:03:29 来源: 作者: 【 】 浏览:10
Tags:Linux 台下 JMagick 一个 简单 封装

最近需要给图片加上社区的水印,也需要对用户上传的图片进行压缩和裁剪。Google之,最后选中ImageMagick开源库。ImageMagick提供一个通过JNI调用的Java接口JMagick。虽然不能提供所有ImageMagick的接口,但已经很不错了。


JMagick在Windows下配置很简单,在Linux上配置有一些复杂,主要是依赖库的安装配置。感兴趣的可以查阅相关的资料。注意安装时ImageMagick和JMagick的版本要匹配。


封装的代码如下,基于网络上的代码改动而成,测试通过。


import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.io.File;


import magick.CompositeOperator;
import magick.CompressionType;
import magick.DrawInfo;
import magick.ImageInfo;
import magick.MagickException;
import magick.MagickImage;
import magick.PixelPacket;
import magick.PreviewType;


public class JMagicjWrapper {


private static final String[] Type = {
".JPG",
".JPEG",
".BMP",
".GIF",
".PNG"
};

public static boolean checkType(String path){
for (int i = 0; i < Type.length; i++) {
if (path.toUpperCase().endsWith(Type[i])) {
return true;
}else {
continue;
}
}
return false;
}

/**改变图片大小
* @param filePath 原图片位置
* toPath 新图片位置
* width 新图片的宽度
* height 新图片的高度
* @return
* @throw
* @author sulliy@sina.com 2010-8-11
*/
public static void imageResize(String filePath, String toPath, int width, int height)
throws MagickException {
ImageInfo info = null;
MagickImage image = null;
Dimension imageDim = null;
MagickImage scaled = null;

if (!checkType(filePath) || !checkType(toPath)) {
return;
}

try {
info = new ImageInfo(filePath);
image = new MagickImage(info);
imageDim = image.getDimension();
if (width <= 0 || height <= 0) {
height = 120;
width = 120;
}
scaled = image.scaleImage(width, height);
scaled.setFileName(toPath);
scaled.writeImage(info);
} finally {
if (scaled != null) {
scaled.destroyImages();
}
}
}


/**创建图片水印
* @param filePath 源文件路径
* toImg 生成文件位置
* logoPath logo路径
* pos logo在源图片中的相对位置,以像素点为单位
* @return
* @throw MagickException
* @author sulliy@sina.com 2010-8-11
*/
public static void createWaterPrintByImg(String filePath, String toImg,
String logoPath, Point pos) throws MagickException {
if (!checkType(filePath) || !checkType(toImg) || !checkType(logoPath)) {
return;
}

ImageInfo info = new ImageInfo();
MagickImage fImage = null;
MagickImage sImage = null;
MagickImage fLogo = null;
MagickImage sLogo = null;
Dimension imageDim = null;
Dimension logoDim = null;
try {
fImage = new MagickImage(new ImageInfo(filePath));
imageDim = fImage.getDimension();
int width = imageDim.width;
int height = imageDim.height;
sImage = fImage.scaleImage(width, height);

fLogo = new MagickImage(new ImageInfo(logoPath));
//fLogo.transparentImage(PixelPacket.queryColorDatabase("white"), 65535); //设置背景色
logoDim = fLogo.getDimension();
int lw = logoDim.width;
int lh = logoDim.height;

//默认或者参数出错时,LOGO放在右下角
if (width <= (int)pos.getX() || height <= (int)pos.getY()) {
pos.setLocation(width - lw, height - lh);
}

sLogo = fLogo.scaleImage(lw, lh);
sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo,
(int)pos.getX(), (int)pos.getY());
sImage.setFileName(toImg);
sImage.writeImage(info);
} finally {
if (sImage != null) {
sImage.destroyImages();
}
}
}


/**创建文字水印
* @param filePath 源文件路径
* toImg 生成文件位置
* text 水印文本
* pos logo在源图片中的相对位置,以像素点为单位
* pointSize 用于设置点阵大小
* @return
* @throw MagickException
* @author sulliy@s

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Ubuntu 10.04 编译源码运行模拟器 下一篇Linux 2.6.32 在Arm9(s3c2440)..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·switch520最新的地址 (2025-12-24 19:19:41)
·微信聊天功能使用了 (2025-12-24 19:19:39)
·websocket和普通的so (2025-12-24 19:19:36)
·Python中文网 - 人生 (2025-12-24 18:49:47)
·【整整648集】这绝对 (2025-12-24 18:49:44)