在做pdf文档转成jpg的时候,发现了Jmagick的创建高质量的图片的一个java类库,自己以前使用另外的一个类库,感觉这个更好点,就试着用了下,感觉不错
1.使用的windows下的jmagick-win-6.3.9-Q16.zip 地址是:http://downloads./6.3.9/
2.doc对应的api地址:http://downloads./jmagick-doc/
3.安装ImageMagick,官方网站:http://www./
我使用的是:ImageMagick-6.4.6-4-Q16-windows-dll.exe :点击下载
4. 安装ImageMagick-6.4.6-4-Q16-windows-dll.exe,将 安装目录下(按自己所安装的目录找) 下的所有dll文件 copy 到系统盘下的 “C:\WINDOWS\system32\”文件夹里
5. 配置环境变量 再环境变量path里添加新的值 “C:\Program Files\ImageMagick-6.4.6-4-Q16“使用IDE可以不用配置
6.解压jmagick-win-6.3.9-Q16.zip 将 jmagick.dll 复制到系统盘下的 “C:\WINDOWS\system32\”文件夹里 和 复制到jdk的bin(例“D:\jdk6\bin”)文件里各一份 将 jmagick.jar 复制到Tomcat下的lib文件夹里 和 所使用项目的WEB-INF下lib文件里 各一份
7.web应用如果部署到tomcat下,那么最好在catalina.bat文件中改变如下设置 set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx768M -XX:MaxPermSize=128M – Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager – Djava.util.logging.config.file=”${catalina.base}\conf\logging.properties” 避免heap溢出的问题,参数看你自己的机器而定。( -Xms256M -Xmx768M -XX:MaxPermSize=128M )
8.还要注意如果部署到web应用,你在使用的class里面需要 System.setProperty(“jmagick.systemclassloader”,”no”); 要不然会报出UnsatisfiedLinkError: no JMagick in java.library.path. 实例测试code:
03 | import magick.ImageInfo; |
04 | import magick.MagickApiException; |
05 | import magick.MagickException; |
06 | import magick.MagickImage; |
08 | public class Treamspdf { |
09 | public static void main(String[] args) { |
10 | resetsize( "E:/mylearn/workspace/TTPDF/src/com/utils/http_imgload.jpg" , "new.jpg" ); |
12 | public static void resetsize(String picFrom,String picTo){ |
14 | ImageInfo info= new ImageInfo(picFrom); |
15 | MagickImage image= new MagickImage( new ImageInfo(picFrom)); |
16 | MagickImage scaled=image.scaleImage( 120 , 97 ); |
17 | scaled.setFileName(picTo); |
18 | scaled.writeImage(info); |
19 | } catch (MagickApiException ex){ |
21 | } catch (MagickException ex) { |
常用的水印,切图,压缩等简单程序工具类,继续下面
003 | import java.awt.Dimension; |
004 | import java.awt.Rectangle; |
005 | import java.text.SimpleDateFormat; |
006 | import java.util.Date; |
008 | import magick.CompositeOperator; |
009 | import magick.CompressionType; |
010 | import magick.DrawInfo; |
011 | import magick.ImageInfo; |
012 | import magick.MagickException; |
013 | import magick.MagickImage; |
014 | import magick.PixelPacket; |
015 | import magick.PreviewType; |
020 | //不能漏掉这个,不然jmagick.jar的路径找不到 |
021 | System.setProperty( "jmagick.systemclassloader" , "no" ); |
026 | * @param filePath 源文件路径 |
027 | * @param toPath 缩略图路径 |
029 | public static void createThumbnail(String filePath, String toPath) throws MagickException{ |
030 | ImageInfo info = null ; |
031 | MagickImage image = null ; |
032 | Dimension imageDim = null ; |
033 | MagickImage scaled = null ; |
035 | info = new ImageInfo(filePath); |
036 | image = new MagickImage(info); |
037 | imageDim = image.getDimension(); |
038 | int wideth = imageDim.width; |
039 | int height = imageDim.height; |
040 | if (wideth > height) { |
041 | height = 660 * height / wideth; |
044 | scaled = image.scaleImage(wideth, height); //小图片文件的大小. |
045 | scaled.setFileName(toPath); |
046 | scaled.writeImage(info); |
049 | scaled.destroyImages(); |
056 | * @param filePath 源文件路径 |
058 | * @param logoPath logo图路径 |
059 | * @throws MagickException |
061 | public static void initLogoImg(String filePath, String toImg, String logoPath) throws MagickException { |
062 | ImageInfo info = new ImageInfo(); |
063 | MagickImage fImage = null ; |
064 | MagickImage sImage = null ; |
065 | MagickImage fLogo = null ; |
066 | MagickImage sLogo = null ; |
067 | Dimension imageDim = null ; |
068 | Dimension logoDim = null ; |
070 | fImage = new MagickImage( new ImageInfo(filePath)); |
071 | imageDim = fImage.getDimension(); |
072 | int width = imageDim.width; |
073 | int height = imageDim.height; |
075 | height = 660 * height / width; |
078 | sImage = fImage.scaleImage(width, height); |
080 | fLogo = new MagickImage( new ImageInfo(logoPath)); |
081 | logoDim = fLogo.getDimension(); |
083 | int lh = logoDim.height * lw / logoDim.width; |
084 | sLogo = fLogo.scaleImage(lw, lh); |
086 | sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo, width-(lw + lh/ 10 ), height-(lh + lh/ 10 )); |
087 | sImage.setFileName(toImg); |
088 | sImage.writeImage(info); |
091 | sImage.destroyImages(); |
098 | * @param filePath 源文件路径 |
100 | * @param text 名字(文字内容自己随意) |
101 | * @throws MagickException |
103 | public static void initTextToImg(String filePath, String toImg, String text) throws MagickException{ |
104 | ImageInfo info = new ImageInfo(filePath); |
105 | if (filePath.toUpperCase().endsWith( "JPG" ) || filePath.toUpperCase().endsWith( "JPEG" )) { |
106 | info.setCompression(CompressionType.JPEGCompression); //压缩类别为JPEG格式 |
107 | info.setPreviewType(PreviewType.JPEGPreview); //预览格式为JPEG格式 |
110 | MagickImage aImage = new MagickImage(info); |
111 | Dimension imageDim = aImage.getDimension(); |
112 | int wideth = imageDim.width; |
113 | int height = imageDim.height; |
115 | height = 660 * height / wideth; |
120 | String[] as = text.split( "" ); |
121 | for (String string : as) { |
122 | if (string.matches( "[\u4E00-\u9FA5]" )){ |
125 | if (string.matches( "[a-zA-Z0-9]" )){ |
129 | int tl = a* 12 + b* 6 + 300 ; |
130 | MagickImage scaled = aImage.scaleImage(wideth, height); |
131 | if (wideth > tl &# 038 ;& height > 5 ){ |
132 | DrawInfo aInfo = new DrawInfo(info); |
133 | aInfo.setFill(PixelPacket.queryColorDatabase( "white" )); |
134 | aInfo.setUnderColor( new PixelPacket( 0 , 0 , 0 , 100 )); |
135 | aInfo.setPointsize( 12 ); |
136 | //解决中文乱码问题,自己可以去随意定义个自己喜欢字体,我在这用的微软雅黑 |
137 | String fontPath = "C:/WINDOWS/Fonts/MSYH.TTF" ; |
138 | // String fontPath = "/usr/maindata/MSYH.TTF"; |
139 | aInfo.setFont(fontPath); |
140 | aInfo.setTextAntialias( true ); |
142 | aInfo.setText( " " + text + "于 " + new SimpleDateFormat( "yyyy-MM-dd" ).format( new Date()) + " 上传于XXXX网,版权归作者所有!" ); |
143 | aInfo.setGeometry( "+" + (wideth-tl) + "+" + (height- 5 )); |
144 | scaled.annotateImage(aInfo); |
146 | scaled.setFileName(toImg); |
147 | scaled.writeImage(info); |
148 | scaled.destroyImages(); |
153 | * @param imgPath 源图路径 |
154 | * @param toPath 修改图路径 |
159 | * @throws MagickException |
161 | public static void cutImg(String imgPath, String toPath, int w, int h, int x, int y) throws MagickException { |
162 | ImageInfo infoS = null ; |
163 | MagickImage image = null ; |
164 | MagickImage cropped = null ; |
165 | Rectangle rect = null ; |
167 | infoS = new ImageInfo(imgPath); |
168 | image = new MagickImage(infoS); |
169 | rect = new Rectangle(x, y, w, h); |
170 | cropped = image.cropImage(rect); |
171 | cropped.setFileName(toPath); |
172 | cropped.writeImage(infoS); |
175 | if (cropped != null ) { |
176 | cropped.destroyImages(); |
|