1. 使用方法:首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了。
    package com.stu.util;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5.  
  6. import org.im4java.core.CompositeCmd;
  7. import org.im4java.core.ConvertCmd;
  8. import org.im4java.core.IM4JavaException;
  9. import org.im4java.core.IMOperation;
  10. import org.im4java.core.IdentifyCmd;
  11. import org.im4java.process.ArrayListOutputConsumer;
  12.  
  13. public class ImagesUtil {
  14. /**
  15. * 根据坐标裁剪图片
  16. *
  17. * @param srcPath 要裁剪图片的路径
  18. * @param newPath 裁剪图片后的路径
  19. * @param x 起始横坐标
  20. * @param y 起始纵坐标
  21. * @param x1 结束横坐标
  22. * @param y1 结束纵坐标
  23. */
  24. public static void cutImage(String srcPath, String newPath, int x, int y, int x1,
  25. int y1) throws Exception {
  26. int width = x1 - x;
  27. int height = y1 - y;
  28. IMOperation op = new IMOperation();
  29. op.addImage(srcPath);
  30. /** width:裁剪的宽度 * height:裁剪的高度 * x:裁剪的横坐标 * y:裁剪纵坐标 */
  31. op.crop(width, height, x, y);
  32. op.addImage(newPath);
  33. ConvertCmd convert = new ConvertCmd();
  34. convert.run(op);
  35. }
  36. /**
  37. * 根据尺寸缩放图片
  38. * @param width 缩放后的图片宽度
  39. * @param height 缩放后的图片高度
  40. * @param srcPath 源图片路径
  41. * @param newPath 缩放后图片的路径
  42. */
  43. public static void zoomImage(Integer width, Integer height, String srcPath, String newPath) throws Exception {
  44. IMOperation op = new IMOperation();
  45. op.addImage(srcPath);
  46. if(width == null){//根据高度缩放图片
  47. op.resize(null, height);
  48. }else if(height == null){//根据宽度缩放图片
  49. op.resize(width, null);
  50. }else {
  51. op.resize(width, height);
  52. }
  53. op.addImage(newPath);
  54. ConvertCmd convert = new ConvertCmd();
  55. convert.run(op);
  56. }
  57.  
  58. /**
  59. * 给图片加水印
  60. * @param srcPath 源图片路径
  61. */
  62. public static void addImgText(String srcPath,String content) throws Exception {
  63. IMOperation op = new IMOperation();
  64. op.font("微软雅黑");
  65. op.gravity("southeast");
  66. op.pointsize(18).fill("#BCBFC8").draw("text 0,0 "+content); //("x1 x2 x3 x4") x1 格式,x2 x轴距离 x3 y轴距离 x4名称
  67. op.addImage();
  68. op.addImage();
  69. ConvertCmd convert = new ConvertCmd();
  70. try {
  71. convert.run(op,srcPath,srcPath);
  72. } catch (Exception e) {
  73. e.printStackTrace();
  74. }
  75. }
  76. /**
  77. * 图片水印
  78. *
  79. * @param srcImagePath 源图片
  80. * @param waterImagePath 水印
  81. * @param destImagePath 生成图片
  82. * @param gravity 图片位置
  83. * @param dissolve 水印透明度
  84. */
  85. public static void waterMark(String waterImagePath, String srcImagePath, String destImagePath, String gravity, int dissolve) {
  86. IMOperation op = new IMOperation();
  87. op.gravity(gravity);
  88. op.dissolve(dissolve);
  89. op.addImage(waterImagePath);
  90. op.addImage(srcImagePath);
  91. op.addImage(destImagePath);
  92. CompositeCmd cmd = new CompositeCmd();
  93. try {
  94. cmd.run(op);
  95. } catch (IOException e) {
  96. e.printStackTrace();
  97. } catch (InterruptedException e) {
  98. e.printStackTrace();
  99. } catch (IM4JavaException e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. /**
  104. * 图片旋转
  105. *
  106. * @param srcImagePath
  107. * @param destImagePath
  108. * @param angle
  109. */
  110. public static void rotate(String srcImagePath, String destImagePath, double angle) {
  111. try {
  112. IMOperation op = new IMOperation();
  113. op.rotate(angle);
  114. op.addImage(srcImagePath);
  115. op.addImage(destImagePath);
  116. ConvertCmd cmd = new ConvertCmd();
  117. cmd.run(op);
  118. } catch (Exception e) {
  119. e.printStackTrace();
  120. }
  121. }
  122.  
  123. /**
  124. * 图片信息
  125. *
  126. * @param imagePath
  127. * @return
  128. */
  129. public static String showImageInfo(String imagePath) {
  130. String line = null;
  131. try {
  132. IMOperation op = new IMOperation();
  133. op.format("width:%w,height:%h,path:%d%f,size:%b%[EXIF:DateTimeOriginal]");
  134. op.addImage(1);
  135. IdentifyCmd identifyCmd = new IdentifyCmd(true);
  136. ArrayListOutputConsumer output = new ArrayListOutputConsumer();
  137. identifyCmd.setOutputConsumer(output);
  138. identifyCmd.run(op, imagePath);
  139. ArrayList<String> cmdOutput = output.getOutput();
  140. assert cmdOutput.size() == 1;
  141. line = cmdOutput.get(0);
  142.  
  143. } catch (Exception e) {
  144. e.printStackTrace();
  145. }
  146. return line;
  147. }
  148. /**
  149. * 图片合成
  150. * @param args
  151. * @param maxWidth
  152. * @param maxHeight
  153. * @param newpath
  154. * @param mrg
  155. * @param type 1:横,2:竖
  156. */
  157. public static void montage(String[] args,Integer maxWidth,Integer maxHeight,String newpath,Integer mrg,String type) {
  158. IMOperation op = new IMOperation();
  159. ConvertCmd cmd = new ConvertCmd();
  160. String thumb_size = maxWidth+"x"+maxHeight+"^";
  161. String extent = maxWidth+"x"+maxHeight;
  162. if("1".equals(type)){
  163. op.addRawArgs("+append");
  164. }else if("2".equals(type)){
  165. op.addRawArgs("-append");
  166. }
  167.  
  168. op.addRawArgs("-thumbnail",thumb_size);
  169. op.addRawArgs("-gravity","center");
  170. op.addRawArgs("-extent",extent);
  171.  
  172. Integer border_w = maxWidth / 40;
  173. op.addRawArgs("-border",border_w+"x"+border_w);
  174. op.addRawArgs("-bordercolor","#ccc");
  175.  
  176. op.addRawArgs("-border",1+"x"+1);
  177. op.addRawArgs("-bordercolor","#fff");
  178.  
  179. for(String img : args){
  180. op.addImage(img);
  181. }
  182. if("1".equals(type)){
  183. Integer whole_width = ((mrg / 2) +1 + border_w + maxWidth + border_w + (mrg / 2) +1)*args.length - mrg;
  184. Integer whole_height = maxHeight + border_w + 1;
  185. op.addRawArgs("-extent",whole_width + "x" +whole_height);
  186. }else if("2".equals(type)){
  187. Integer whole_width = maxWidth + border_w + 1;
  188. Integer whole_height = ((mrg / 2) +1 + border_w + maxHeight + border_w + (mrg / 2) +1)*args.length - mrg;
  189. op.addRawArgs("-extent",whole_width + "x" +whole_height);
  190. }
  191. op.addImage(newpath);
  192. try {
  193. cmd.run(op);
  194. } catch (Exception e) {
  195. e.printStackTrace();
  196. }
  197. }
  198.  
  199. public static void main(String[] args) throws Exception{
  200. //addImgText("e://a2.jpg");
  201. //zoomImage(300, 150, "e://a.jpg", "e://a1.jpg");
  202. //zoomImage(300, 150, "e://b.jpg", "e://b1.jpg");
  203. //zoomImage(300, 150, "e://c.jpg", "e://c1.jpg");
  204. //zoomImage(300, 150, "e://d.jpg", "e://d1.jpg");
  205. //zoomImage(300, 150, "e://e.jpg", "e://e1.jpg");
  206. // zoomImage(300, 150, "e://f.jpg", "e://f1.jpg");
  207. //waterMark("e://cc.jpg", "e://aa.jpg", "e://bb.jpg", "southeast", 30);
  208. //rotate("e://aa.jpg", "e://ee.jpg", 90);
  209. //System.out.println(showImageInfo("e://aa.jpg"));
  210. String[] files = new String[5];
  211. files[0] = "e://a1.jpg";
  212. files[1] = "e://b1.jpg";
  213. files[2] = "e://c1.jpg";
  214. files[3] = "e://d1.jpg";
  215. files[4] = "e://e1.jpg";
  216. //montage(files, 280, 200, "e://liboy1.jpg", 0,"2");
  217. //cropImage("e://a.jpg", "e://liboy22.jpg", 1024, 727, 500, 350);
  218. cutImage("e://a.jpg", "e://liboy222.jpg", 5, 10, 100, 120);
  219. }
  220. }
  221.  
  222. //如果是在windows下运行,则需要配置ImageMagick的路径(),如果找不到convert的话,把目录下的magick.exe拷贝一份命名convert.exe

ConvertCmd convert = new ConvertCmd();
convert.setSearchPath("E:\\ImageMagick-7.0.5-Q16");
convert.run(op);

  1.  

im4java包处理图片的更多相关文章

  1. GraphicsMagick+Im4Java在windows和linux下的配置

    GraphicsMagick介绍及安装 Im4Java包为: im4java-1.2.0.jar 直接在lib下引用即可 GraphicsMagick的安装如下: windows下: 安装:Graph ...

  2. linux的零碎使用

    一.Linux(rehat.centos.ubuntu...)基础知识 上午: putty软件连接linux服务器: [root @ foundation2   ~ ]         # 用户名   ...

  3. 转:ImageMagick +Jmagick安装

    原文来自于: 目录 一.ImageMagick介绍 二.安装支持库 三.在Linux上用源码编译安装ImageMagick与Jmagick 四.在Linux上使用yum安装ImageMagick与Jm ...

  4. 在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)

    安装过程(如图所示) .Exceptionin thread "main" java.lang.UnsatisfiedLinkError:C:\WINDOWS\system32\j ...

  5. linux的使用以及linux服务器应用的部署

    一.Linux(rehat.centos.ubuntu...)基础知识 上午: putty软件连接linux服务器: [root @ foundation2   ~ ]         # 用户名   ...

  6. 使用tensorflow深度学习识别验证码

    除了传统的PIL包处理图片,然后用pytessert+OCR识别意外,还可以使用tessorflow训练来识别验证码. 此篇代码大部分是转载的,只改了很少地方. 代码是运行在linux环境,tesso ...

  7. " ModuleNotFoundError: No module named 'tkinter' "的解决方法

    踩坑场景 在使用pillow这个包处理图片的时候,运行程序,报错ModuleNotFoundError: No module named 'tkinter',遇到ModuleNotFoundError ...

  8. Eclipse中处理图片引包问题

    在Eclipse中处理图片,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEG ...

  9. Im4java 操作 ImageMagick 处理图片

    背景 之前用的是JMagick,各种限制各种坑,直到使用了Im4java,真是相当的好用啊. 项目描述 ImageMagic的安装可参考:图片处理软件 ImageMagick 的安装和使用 Im4ja ...

随机推荐

  1. JavaScript提高篇之预解释作用域以及this原理及其应用

    1.预解释 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  2. Service 之间如何通信?- 每天5分钟玩转 Docker 容器技术(101)

    微服务架构的应用由若干 service 组成.比如有运行 httpd 的 web 前端,有提供缓存的 memcached,有存放数据的 mysql,每一层都是 swarm 的一个 service,每个 ...

  3. 浅谈Android中Serializable和Parcelable使用区别

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.概述 Android开发的时候,我们时长遇到传递对象的需求,但是我们无法将对象的引用传给Activity或者Fragment,我们需要将这些对象 ...

  4. QScintilla 编译

    直接上英文了,不翻译了.看不懂的可以留言哈. ———————————————————————————————————————— Installation As supplied QScintilla ...

  5. javaweb学习总结(六)——Servlet开发(二)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文 ...

  6. 通过ssh訪问NAT网络模式虚拟机里的Linux

    进入 GuestOS : #/sbin/ifconfig 查看 inet addr : 10.0.2.15 然后到 HostOS 去, 看控制面板, 看网络和共享中心的VirtualBox Host- ...

  7. hdu 1885 Key Task(bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1885 再贴一个链接http://blog.csdn.net/u013081425/article/details ...

  8. hdu 4409 Family Name List(LCA&amp;有坑点)

    Family Name List Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. SAP ABAP编程 Table Control动态隐藏列

    在SAP DIALOG设计中,有时候须要动态的隐藏某些列,以下是方法. ***数据定义 CONTROLS: table_control TYPE TABLEVIEW USING SCREEN 0100 ...

  10. poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)

    链接:poj 1860 题意:给定n中货币.以及它们之间的税率.A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量, 求货币S通过若干此转换,再转换为原本的货币时是否会添加 分 ...