imagemagick for java_ImageMagick使用for java(im4java)

简介:用于读、写、处理图片文件,支持89种格式的图片文件,利用imageMagick可以根据web应用程序动态生成图片,也可以将一个或者一组图片改变大小、旋转、锐化、减色、增加特效等操作,并对操作结果进行保存(可以设置保存格式)。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。

Ada:G2F         C:MagickWand 和MagickCore          Ch:ChMagick          COM+:ImageMagickObject      C++:Magick++          java:JMagick和Im4java

使用方法:首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了。

publicclassImageTools {

/**

* ImageMagick的路径

*/

publicstaticString imageMagickPath =null;

static{

/**

*

* 获取ImageMagick的路径

*/

Properties prop = newPropertiesFile().getPropertiesFile();

//linux下不要设置此值,不然会报错

imageMagickPath = prop.getProperty("imageMagickPath");

}

/**

*

* 根据坐标裁剪图片

*

* @param srcPath   要裁剪图片的路径

* @param newPath   裁剪图片后的路径

* @param x         起始横坐标

* @param y         起始纵坐标

* @param x1        结束横坐标

* @param y1        结束纵坐标

*/

publicstaticvoidcutImage(String srcPath, String newPath,intx,inty,intx1,inty1)throwsException {

intwidth = x1 - x;

intheight = y1 - y;

IMOperation op = newIMOperation();

op.addImage(srcPath);

/**

* width:  裁剪的宽度

* height: 裁剪的高度

* x:       裁剪的横坐标

* y:       裁剪的挫坐标

*/

op.crop(width, height, x, y);

op.addImage(newPath);

ConvertCmd convert = newConvertCmd();

// linux下不要设置此值,不然会报错

convert.setSearchPath(imageMagickPath);

convert.run(op);

}

/**

*

* 根据尺寸缩放图片

* @param width             缩放后的图片宽度

* @param height            缩放后的图片高度

* @param srcPath           源图片路径

* @param newPath           缩放后图片的路径

*/

publicstaticvoidcutImage(intwidth,intheight, String srcPath,  String newPath)throwsException {

IMOperation op = newIMOperation();

op.addImage(srcPath);

op.resize(width, height);

op.addImage(newPath);

ConvertCmd convert = newConvertCmd();

// linux下不要设置此值,不然会报错

convert.setSearchPath(imageMagickPath);

convert.run(op);

}

/**

* 根据宽度缩放图片

*

* @param width            缩放后的图片宽度

* @param srcPath          源图片路径

* @param newPath          缩放后图片的路径

*/

publicstaticvoidcutImage(intwidth, String srcPath, String newPath)throwsException {

IMOperation op = newIMOperation();

op.addImage(srcPath);

op.resize(width, null);

op.addImage(newPath);

ConvertCmd convert = newConvertCmd();

// linux下不要设置此值,不然会报错

convert.setSearchPath(imageMagickPath);

convert.run(op);

}

/**

* 给图片加水印

* @param srcPath            源图片路径

*/

publicstaticvoidaddImgText(String srcPath)throwsException {

IMOperation op = newIMOperation();

op.font("宋体").gravity("southeast").pointsize(18).fill("#BCBFC8")

.draw("text 5,5 juziku.com");

op.addImage();

op.addImage();

ConvertCmd convert = newConvertCmd();

// linux下不要设置此值,不然会报错

convert.setSearchPath(imageMagickPath);

convert.run(op, srcPath, srcPath);

}

publicstaticvoidmain(String[] args)throwsException {

// cutImage("D:\\test.jpg", "D:\\new.jpg", 98, 48, 370,320);

// cutImage(200,300, "/home/1.jpg", "/home/2.jpg");

addImgText("//home//1.jpg");

}

}

注意事项:如果是在windows下运行,则需要配置ImageMagick的路径(现在很多安装程序都不需要设置,已经自动帮你设置好了):

在环境变量path中添加(C:\Program Files\ImageMagick-6.7.5-Q16;)

或者

publicstaticString imageMagickPath;

Properties prop = newPropertiesFile().getPropertiesFile();

imageMagickPath = prop.getProperty("imageMagickPath");

ConvertCmd convert = newConvertCmd();

convert.setSearchPath(imageMagickPath);

在config.properties文件里了,内容如下所示: imageMagickPath=C:\\Program Files\\ImageMagick-6.7.5-Q16;

如果是在linux平台下,千万不需要配置,设置了会报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[收藏]网络营销十道羊皮卷

羊皮卷之一:一个与企业名称和形象相符的域名,是企业进行网络营销的前提。由于域名具有唯一性,一个域名一旦注册成功,任何其他机构都无法注册相同的域名。因此,域名是企业重要的网络商标,在网络营销中起到企…

[vue] 删除数组用delete和Vue.delete有什么区别?

[vue] 删除数组用delete和Vue.delete有什么区别? delete:只是被删除数组成员变为 empty / undefined,其他元素键值不变Vue.delete:直接删了数组成员,并改变了数组的键值(对象是响应式的,确保删除…

Python模块学习

阅读目录 第一篇:Python模块之netmiko 第二篇:Python模块之junos-eznc 第三篇:Python模块之pexpect 第四篇:Python模块之paramiko 第五篇:Python模块之XlsxWriter 第六篇:Python模块之requests,urllib和re …

web文件加密

讲解以及源代码下载ASP.NET 2.0: Encrypting Connection Strings http://blogs.vertigosoftware.com/snyholm/archive/2005/12/16/1746.aspx http://msdn2.microsoft.com/en-us/library/yxw286t2.aspx中文http://msdn2.microsoft.com/zh-cn/library/yxw286t2.aspx ASP.NET 2.0:…

java开发和android开发_浅谈Java开发和Android开发的不同

Java是具有多种用例的完整开发语言,包括Web开发,PC程序开发,嵌入式开发等。Android开发是面向手机应用,使用Java较多,还有常用的H5跨平台混合架构模式。一,UI界面开发不同1)Java Swing现在Java开发基本上都…

[vue] v-model是什么?有什么用呢?

[vue] v-model是什么?有什么用呢? 一则语法糖,相当于v-bind:value"xxx" 和 input,意思是绑定了一个value属性的值,子组件可对value属性监听,通过$emit(input, xxx)的方式给父组件通讯。自己实现…

远程上传下载文件-Xftp5

Xftp5下载 链接:https://pan.baidu.com/s/1Wzso_Q7mPy5uGOUlripEWg 密码:xfx9 安装选择家庭版 由于21端口没有开,所以不能选FTP, 选择SFTP,22端口 用哪个用户登录机会自动到该用户的家目录 连接上出先乱码问题 属性 OK. 转载于:h…

java反射 pdf_java反射学习笔记整理.pdf

java反射学习笔记整理.pdf还剩15页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容要点:Java 反射笔…

变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解 简要提炼思路: 1、有n个台阶,则每次可以跳1,2,3,,,n个…

[vue] 动态给vue的data添加一个新的属性时会发生什么?怎样解决?

[vue] 动态给vue的data添加一个新的属性时会发生什么?怎样解决? 如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。如果想要使添加的值做到响应式,应当使用$set()来添加对象。个人简介 我是歌谣,欢迎和大…

Python学习 :面向对象 -- 成员修饰符

成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问,只能通过内部方法来间接访问私有成员 简例:公有成员与私有成员 class Info:country 中国 # 静态字段 __gender 男 # 静态字段私有化def __init__(self,name,age):self.nam…

[vue] SPA首屏加载速度慢的怎么解决?

[vue] SPA首屏加载速度慢的怎么解决? 1.通过Gzip压缩 2.使用路由懒加载 3.利用webpack中的externals这个属性把打包后不需要打包的库文件都分离出去,减小项目打包后的大小 4.使用SSR渲染个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放…

Visual Basic .NET处理Excle表格全接触

Visual Basic .Net处理Excel表格机理和处理Word文档一样,也是通过互操作,引入COM组件来实现的,所以前提条件是运行本文中介绍的程序的计算机必须安装Office 2000中的Excel软件。如果计算机安装的Office 2000,那么这个COM组件就是M…

java读文件几种方式_Java读取文件的几种方式

import java.io.*;public class ReadFromFile {/*** 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。*/public static void readFileByBytes(String fileName) {File file new File(fileName);InputStream in null;try {System.o…

Django-视图层

视图函数 视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。 无论视图本身包含什么逻辑,都要返回响应 请求对象 urls.py from django.contrib import admin from django.urls import path,re_pathfrom a…

aspnet_UsersInRoles_GetUsersInRoles

ALTERPROCEDUREdbo.aspnet_UsersInRoles_GetUsersInRoles --查询某角色的用户ApplicationNameNVARCHAR(256), RoleNameNVARCHAR(256)ASBEGINDECLAREApplicationIdUNIQUEIDENTIFIERSELECTApplicationIdNULLSELECTApplicationIdApplicationId FROMaspnet_Applications WHERELO…

[vue] 你认为vue的核心是什么?

[vue] 你认为vue的核心是什么? 两部分 一部分 数据->虚拟dom->dom, 另一部分 响应式数据 这两部分大大节省了开发者对数据变动转换到页面显示的操作,可以让开发者聚焦业务,聚焦数据的处理。个人简介 我是歌谣,欢迎和大家一…

java keyadapter_在java中使用keyAdapter和keyEvent时出错

我是编程的初学者,我一直在研究一个小项目,众所周知的叫做Tetris的游戏,我遇到了这个小问题,我希望你能帮助我解。我导入了:import java.awt.event.KeyAdapter和 import java.awt.event.KeyEvent能够使用我的键盘玩游戏…

luogu4365 秘密袭击 (生成函数+线段树合并+拉格朗日插值)

求所有可能联通块的第k大值的和,考虑枚举这个值: $ans\sum\limits_{i1}^{W}{i\sum\limits_{S}{[i是第K大]}}$ 设cnt[i]为连通块中值>i的个数 $ans\sum\limits_{i1}^{W}{i\sum\limits_{S}{[cnt[i]>K]-[cnt[i1]>K]}}$ $ans\sum\limits_{i1}^{W}{\sum\limits_…

学习程序开发的方法,仅供参考吧

感觉很多学习程序开发的新手,方法不对,浪费了大量时间。而j2ee由于技术分支多,学习的人更是找不到主线。其实很多东西,说白了很简单的。 还是那句老话,怕就怕走错路,走对了其实很容易。 j2ee害人的地方就是…