打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
利用ImageMagick处理图形

 ImageMagick主页:

http://www.imagemagick.org/script/index.php

 

这两篇文章介绍了ImageMagick的基本使用

http://www.ibm.com/developerworks/cn/linux/l-graf/

http://www.ibm.com/developerworks/cn/linux/l-graf2/

 

由于ImageMagick中有些命令与系统中的一些命令相冲突,如:convert命令,因此可以使用GraphicsMagick,其主页:http://www.graphicsmagick.org/,其命令用法和ImageMagick命令的用法基本一样,只在其前面加入了gm,为了避免和系统命令相冲突。

 

命令参考:

http://www.graphicsmagick.org/utilities.html

 

例如:

(1)gm identify

可以识别图片的基本信息
如:

gm identify firelily.jpg    显示基本图片信息

gm identify -format "%d %b %f %w %h %[EXIF:DateTimeOriginal]" firelily.jpg   显示指定的图片信息

-format选项可以参考官方文档

 

(2)gm convert

转换图片

如:

gm convert -colors 256 -depth 8 -resize 50% -quality 70 firelily.jpg test1.jpg

colors:指颜色数

depth:颜色深度数

resize:大小

quality:质量

 

gm convert -resize 100 -crop 100X100+0+0 -gravity center -quality 70 firelily.jpg test.jpg

resize 100:高度按照宽度缩放比例进行调整

crop:截取

100X100+0+0 指截取的宽度X截取的宽度+从图片左上角起的横坐标+从图片左上角起的纵坐标

gravity center:从中心截取

 

gm convert -resize 100X100! firelily.jpg test.jpg

加!号,表明不按比例对图片进行缩放

 

================================

ImageMagick给许多编程语言提供了编程API,对Java提供了两种:

(1)JMagic,是基于JNI的对C程序的封装调用

(2)im4java,是对ImageMagick的命令行调用进行的java封装

 

在这里介绍下im4java,其代码示例很少,可以看其官方提供的测试程序,网上的示例也很少,最直接的方法是读其源代码。

im4java主页:http://im4java.sourceforge.net/

 

源代码中有一个属性:im4java.useGM,为true,表明使用GraphicsMagick,否则使用ImageMagick

 

示例1:

显示图片信息

  1. public static String showImageInfo(String imagePath) throws ImageProcessException {  
  2.         try {  
  3.             IMOperation op = new IMOperation();  
  4.             op.format("%w#%h#%d#%f#%b#%[EXIF:DateTimeOriginal]");  
  5.             op.addImage(1);  
  6.             IdentifyCmd identifyCmd = new IdentifyCmd();  
  7.             ArrayListOutputConsumer output = new ArrayListOutputConsumer();  
  8.             identifyCmd.setOutputConsumer(output);  
  9.             logger.info("==ImageMagic==/n" +  
  10.                     "Op=" + op.toString() +   
  11.                     ";Cmd=" + identifyCmd.toString());  
  12.             identifyCmd.run(op, imagePath);  
  13.             ArrayList<String> cmdOutput = output.getOutput();  
  14.             assert cmdOutput.size() == 1;  
  15.             String line = cmdOutput.get(0);  
  16.             return line;  
  17. } catch (Exception e) {  
  18.     throw new ImageProcessException(e);  
  19. }  

 

示例2:

旋转图片

  1. public static void rotate(String srcImagePath, String destImagePath, double angle) throws ImageProcessException {  
  2.        try {  
  3.            IMOperation op = new IMOperation();  
  4.            op.rotate(angle);  
  5.            op.addImage(srcImagePath);  
  6.            op.addImage(destImagePath);  
  7.            ConvertCmd cmd = new ConvertCmd();  
  8.            logger.info("==ImageMagic==/n" +  
  9.                    "Op=" + op.toString() +   
  10.                    ";Cmd=" + cmd.toString());  
  11.            cmd.run(op);  
  12.        } catch (Exception e) {  
  13.            throw new ImageProcessException(e);  
  14.        }  
  15.    }  

 

示例3:

调整大小,并改变图片质量

  1. public static String resize(String srcImagePath,   
  2.         String destImagePath,   
  3.         int width, int height,   
  4.         double quality,   
  5.         int colors, int depth, boolean isProportionChanged,   
  6.         boolean isUseFileExt) throws ImageProcessException {  
  7.         try {  
  8.             IMOperation op = new IMOperation();  
  9.             if (width > 0) {  
  10.                 if (height > 0) {  
  11.                     if (!isProportionChanged) {  
  12.                         op.resize(width, height);  
  13.                         op.crop(width, height, 0, 0);  
  14.                     } else {  
  15.                         op.resize(width, height, '!');  
  16.                         op.crop(width, height, 0, 0, '!');  
  17.                     }  
  18.                 } else {  
  19.                     op.resize(width);  
  20.                     op.crop(width);  
  21.                 }  
  22.             }  
  23.             op.gravity("center");  
  24.             op.quality(quality);  
  25.             op.colors(colors);  
  26.             op.depth(depth);  
  27.             op.addImage(srcImagePath);  
  28.             if (!isUseFileExt) {  
  29.                 String extension = FilenameUtils.getExtension(destImagePath);  
  30.                 destImagePath = StringUtils.removeEnd(destImagePath, extension) + Constants.DEFAULT_EXT;  
  31.             }  
  32.             op.addImage(destImagePath);  
  33.             ConvertCmd convCmd = new ConvertCmd();  
  34.             logger.info("==ImageMagic==/n" +  
  35.                 "Op=" + op.toString() +   
  36.                 ";Cmd=" + convCmd.toString());  
  37.             convCmd.run(op);  
  38.             return destImagePath;  
  39.         } catch (Exception e) {  
  40.             throw new ImageProcessException(e);  
  41.         }  
  42.     }  

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
立体图片的制作及代码
ImageMagick使用小结
编织靠垫
Linux系统下用一条命令批量修改图片尺寸(综合了几个网站的内容的结果)
ImageMagick简介、GraphicsMagick、命令行使用示例
如何在线制作gif图片?源码公布(linux平台)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服