GraphicsMagick下载地址:http://www.skycn.com/soft/appid/398142.html
im4java maven 配置
org.im4java
im4java
1.4.0
ImageUtils.java
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import org.im4java.core.CompositeCmd;
import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import org.im4java.core.IdentifyCmd;
public final class ImageUtils {
private static String gmPath;
static {
File file1;
File file2;
if (gmPath == null) {
String osName = System.getProperty("os.name").toLowerCase();
if (osName.indexOf("windows") >= 0) {
String path = System.getenv("Path");
if (path != null) {
String[] paths = path.split(";");
for (String str : paths) {
file1 = new File(str.trim() + "/gm.exe");
file2 = new File(str.trim() + "/gmdisplay.exe");
if ((file1.exists()) && (file2.exists())) {
gmPath = str.trim();
break;
}
}
}
}
}
try {
IMOperation imo = new IMOperation();
imo.version();
IdentifyCmd identifyCmd = new IdentifyCmd(true);
if (gmPath != null) {
identifyCmd.setSearchPath(gmPath);
}
identifyCmd.run(imo, new Object[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param srcFile
* 源文件
* @param destFile
* 生成文件
* @param destWidth
* 生成文件的宽度
* @param destHeight
* 生成文件的高度
* @param type
* 类型 1:像素2:百分比
*/
public static void zoom(File srcFile, File destFile, int destWidth,
int destHeight, int type) {
IMOperation op = new IMOperation();
ConvertCmd cmd = new ConvertCmd(true);
op.addImage();
String raw = "";
if(type == 1){
//按像素
raw = destWidth+"x"+destHeight+"^";
}else{
//按像素百分比
raw = destWidth+"%"+destHeight+"%";
}
op.addRawArgs("-sample",raw);
op.addRawArgs("-gravity","center");
op.addRawArgs("-quality","100");
op.addImage();
String osName = System.getProperty("os.name").toLowerCase();
if(osName.indexOf("win") != -1) {
//linux下不要设置此值,不然会报错
cmd.setSearchPath("F:/GraphicsMagick-1.3.9-Q16");
}
try{
cmd.run(op, srcFile.getPath(), destFile.getPath());
}catch(Exception e){
e.printStackTrace();
}
}
public static void initialize() {
}
}
ImageMagick.java
import org.im4java.core.ConvertCmd;
import org.im4java.core.IMOperation;
public class ImageMagick {
/** * ImageMagick的路径 */
public static String imageMagickPath = null;
static{ /**获取ImageMagick的路径 */
//Properties prop = new PropertiesFile().getPropertiesFile();
//linux下不要设置此值,不然会报错
//imageMagickPath = prop.getProperty("imageMagickPath");
}
/** * 根据坐标裁剪图片
* @param srcPath 要裁剪图片的路径
* @param newPath 裁剪图片后的路径
* @param x 起始横坐标
* @param y 起始挫坐标
* @param x1 结束横坐标
* @param y1 结束挫坐标
*/
public static void cutImage(String srcPath, String newPath, int x, int y, int x1, int y1)
throws Exception {
int width = x1 - x; int height = y1 - y;
IMOperation op = new IMOperation();
op.addImage(srcPath);
/**
* width:裁剪的宽度
* height:裁剪的高度
* x:裁剪的横坐标
* y:裁剪的挫坐标
*/
op.crop(width, height, x, y);
op.addImage(newPath);
ConvertCmd convert = new ConvertCmd();
//linux下不要设置此值,不然会报错
convert.setSearchPath(imageMagickPath);
convert.run(op);
}
/**
* 根据尺寸缩放图片
* @param width 缩放后的图片宽度
* @param height 缩放后的图片高度
* @param srcPath 源图片路径
* @param newPath 缩放后图片的路径
* @param type 1为比例处理,2为大小处理,如(比例:1024x1024,大小:50%x50%)
*/
public static String cutImage(int width, int height, String srcPath, String newPath,int type,String quality) throws Exception {
IMOperation op = new IMOperation();
ConvertCmd cmd = new ConvertCmd(true);
op.addImage();
String raw = "";
if(type == 1){
//按像素
raw = width+"x"+height+"^";
}else{
//按像素百分比
raw = width+"%"+height+"%";
}
op.addRawArgs("-sample",raw);
op.addRawArgs("-gravity","center");
op.addRawArgs("-quality","100");
op.addImage();
String osName = System.getProperty("os.name").toLowerCase();
if(osName.indexOf("win") != -1) {
//linux下不要设置此值,不然会报错
cmd.setSearchPath("F:/GraphicsMagick-1.3.9-Q16");
}
try{
cmd.run(op, srcPath, newPath);
}catch(Exception e){
e.printStackTrace();
}
return newPath;
}
/**
* 给图片加水印
* @param srcPath 源图片路径
*/
public static void addImgText(String srcPath) throws Exception {
IMOperation op = new IMOperation();
op.font("Arial").gravity("Center").pointsize(18).fill("red").draw("text 100,100 co188.com");
op.addImage();
op.addImage();
String osName = System.getProperty("os.name").toLowerCase();
ConvertCmd cmd = new ConvertCmd(true);
if(osName.indexOf("win") != -1) {
//linux下不要设置此值,不然会报错
cmd.setSearchPath("F:/GraphicsMagick-1.3.9-Q16");
}
try{
cmd.run(op, srcPath, "f:\\2m_test.jpg");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
// cutImage("f:\\abc.jpg", "f:\\abcaa.jpg",98, 48, 370, 320);
Long start = System.currentTimeMillis();
cutImage(10,10, "f:\\abc.jpg","f:\\abcaa.jpg",2,"100");
// addImgText("f:\\2m.jpg");
// addImgText("f:\\abc.jpg");
Long end = System.currentTimeMillis();
System.out.println("time:"+(end-start));
}
}
GraphicsMagick常用方法
1. 显示图像文件详细信息
gm identify a.jpg
2.更改当前目录下*.jpg的尺寸大小,并保存于目录.thumb里面
gm mogrify -output-directory .thumbs -resize 320×200 *.jpg
3. 将三幅图像和并为一副图像
gm montage -mode concatenate -tile 3×1 image1.ppm image2.ppm image3.ppm concatenated.miff
4. 显示图像
gm display ‘vid:*.jpg’
5. 格式转换
gm convert a.bmp a.jpg
gm convert a.bmp a.pdf(转换为pdf)
6. 调整图像dpi和大小
gm convert -density 288 -geometry 25% image.gif image.gif
(缩小为原先的1/4,并且dpi为288)
gm convert -resize 640×480 image.gif image.gif
(转换为640×480的图像)
7. 在图像上添加文字
gm convert -font Arial -fill blue -pointsize 18 -draw “text 10,10 ‘your text here’” test.tif test.png
8. 从gif文件中抽取第一帧
gm convert “Image.gif[0]” first.gif
9. 建立gif图像
gm convert -delay 20 frame*.gif animation.gif
gm convert -loop 50 frame*.gif animation.gif
(让动画循环50次)
gm convert -delay 20 frame1.gif -delay 10 frame2.gif -delay 5 frame3.gif animation.gif
(对每一帧手动指定延时)
10. 截屏
gm import a.jpg
用鼠标点击所要截取的窗口,或者选择截屏区域,保存为a.jpg
gm import -frame a.jpg
保留窗口的边框
GraphicsMagick API
http://www.graphicsmagick.org/GraphicsMagick.html