GraphicsMagick下载地址:http://www.skycn.com/soft/appid/398142.html
im4java maven 配置
<dependency> <groupId>org.im4java</groupId> <artifactId>im4java</artifactId> <version>1.4.0</version> </dependency>
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)); } }
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
保留窗口的边框
http://www.graphicsmagick.org/GraphicsMagick.html