在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)
安装过程(如图所示)
、Exceptionin thread "main" java.lang.UnsatisfiedLinkError:C:\WINDOWS\system32\jmagick.dll: Can't find dependent libraries
我在Windows xp上按照上面的流程安装完成,按理说应该没有问题了,但出现了以上错误。
我打开Eclipse已工作数个小时,然后在开发机器(我本机)Windows xp上安装ImageMagick-6.3.9-0-Q16-windows-dll.exe。也把jmagick.dll放入system32,在你的java项目中使用jmagick.jar包处理图片。
就这么几步当然不会错,但在运行程序时还是出现了上面的错误。
解决:重启Eclipse。加载新的环境变量。
七、代码实现
|
package com.xxx.tpl.utils;
import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.io.File; import java.io.IOException;
import magick.CompositeOperator; import magick.CompressionType; import magick.DrawInfo; import magick.ImageInfo; import magick.MagickException; import magick.MagickImage; import magick.PixelPacket; import magick.PreviewType;
public class JmagickUtil { public static void main(String[] args) throws MagickException, IOException {
// test for function imageResize
JmagickUtil.imageResize("E:/UCMSServer/tomcat/webapps/temp/tpl/snapshot/2016/9/25955ea769ff47ada6b84f7b39cee904.png", "D:/Installed/tomcat/webapps/tpl/special/2016/9/d26076f602284c3eac1abaa71d2378b2/thumbnail/big/2016/9/25955ea769ff47ada6b84f7b39cee904.png", 160, 160); // JMagicjWrapper.imageResize("pics.jpg", "reSize250x200.jpeg", 250, // 200); // JMagicjWrapper.imageResize("pics.jpg", "reSize50x50.jpg", 50, 50); // JMagicjWrapper.imageResize("pics.jpg", "reSize120x120.bmp", 120, // 120); // JMagicjWrapper.imageResize("pics.jpg", "reSize.tif", 20, 30);//not // create file //
// test for function createWaterPrintByImg // JmagickUtil.createWaterPrintByImg("f://1.jpg", "f://4.jpg", // "f://watermark.gif", new Point(0, 0)); // JMagicjWrapper.imageResize("wpl.gif", "logo250x200.gif", 250, 200); // Because file "wpl.gif" may not be release, the later function cause a // error, can not open file handle. // JMagicjWrapper.createWaterPrintByImg("pics.jpg", "wpl.gif", // "logoFull.jpg", new Point(1680,1050));//not create file // JMagicjWrapper.createWaterPrintByImg("pics.jpg", "wpl.gif", // "logoExt.jpg", new Point(2000,1000));//not create file
// test for function createWaterPrintByText // This function can not handle Chinese Character, I'll continue to // takle the issue // JMagicjWrapper.createWaterPrintByText("pics1.jpg", "wpt.gif", // "For Test", new Point(300,300), 100); }
private static final String[] Type = { ".JPG", ".JPEG", ".BMP", ".GIF", ".PNG" };
public static boolean checkType(String path) { for (int i = 0; i < Type.length; i++) { if (path.toUpperCase().endsWith(Type[i])) { return true; } else { continue; } } return false; }
/** * 改变图片大小 * * @param filePath * 原图片位置 toPath 新图片位置 width 新图片的宽度 height 新图片的高度 * @return * @throw * @author 2010-8-11 * @throws IOException */ public static void imageResize(String filePath, String toPath, int width, int height) throws MagickException, IOException { //必须写,否则jmagick.jar的路径找不到 System.setProperty("jmagick.systemclassloader","no");
File fileOri = new File(filePath); File fileDes = new File(toPath); if (!fileOri.exists()) { return; } if (!fileDes.exists()) { String parentPath = fileDes.getParent(); new File(parentPath).mkdirs(); fileDes.createNewFile(); }
ImageInfo info = null; MagickImage image = null; Dimension imageDim = null; MagickImage scaled = null;
if (!checkType(filePath) || !checkType(toPath)) { return; }
try { info = new ImageInfo(filePath); image = new MagickImage(info); imageDim = image.getDimension(); if (width <= 0 || height <= 0) { height = 120; width = 120; } scaled = image.scaleImage(width, height); scaled.setFileName(toPath); scaled.writeImage(info); } finally { if (scaled != null) { scaled.destroyImages(); } } }
/** * 创建图片水印 * * @param filePath * 源文件路径 toImg 生成文件位置 logoPath logo路径 pos logo在源图片中的相对位置,以像素点为单位 * @return * @throw MagickException * @author 2010-8-11 */ public static void createWaterPrintByImg(String filePath, String toImg, String logoPath, Point pos) throws MagickException { if (!checkType(filePath) || !checkType(toImg) || !checkType(logoPath)) { return; }
ImageInfo info = new ImageInfo(); MagickImage fImage = null; MagickImage sImage = null; MagickImage fLogo = null; MagickImage sLogo = null; Dimension imageDim = null; Dimension logoDim = null; try { // 原来图片 fImage = new MagickImage(new ImageInfo(filePath)); imageDim = fImage.getDimension(); int width = imageDim.width; int height = imageDim.height; sImage = fImage.scaleImage(width, height);
fLogo = new MagickImage(new ImageInfo(logoPath)); logoDim = fLogo.getDimension(); int lw = logoDim.width; int lh = logoDim.height; sLogo = fLogo.scaleImage(lw, lh);
// 开始打水印,从左上角开始;如果到右边界则重新开始一行的打印(x=0,y=y+h) int startX = 0; int startY = 0; do { sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo, startX, startY); startX += (logoDim.width + 60); if (startX >= width) { startY += logoDim.height * 2; startX = 0; } } while (startY <= height);
sImage.setFileName(toImg); sImage.writeImage(info); } finally { if (fImage != null) { fImage.destroyImages(); } if (sImage != null) { sImage.destroyImages(); } if (fLogo != null) { fLogo.destroyImages(); } if (sLogo != null) { sLogo.destroyImages(); } } }
/** * 创建文字水印 * * @param filePath * 源文件路径 toImg 生成文件位置 text 水印文本 pos logo在源图片中的相对位置,以像素点为单位 * pointSize 用于设置点阵大小 * @return * @throw MagickException * @author 2010-8-11 */ public static void createWaterPrintByText(String filePath, String toImg, String text, Point pos, int pointSize) throws MagickException { if (!checkType(filePath) || !checkType(toImg)) { return; }
if (null == text || "".equals(text)) { text = ""; }
ImageInfo info = new ImageInfo(filePath); if (filePath.toUpperCase().endsWith("JPG") || filePath.toUpperCase().endsWith("JPEG")) { info.setCompression(CompressionType.JPEGCompression); // 压缩类别为JPEG格式 info.setPreviewType(PreviewType.JPEGPreview); // 预览格式为JPEG格式 info.setQuality(95); } MagickImage aImage = new MagickImage(info); Dimension imageDim = aImage.getDimension(); int width = imageDim.width; int height = imageDim.height;
if (width <= (int) pos.getX() || height <= (int) pos.getY()) { pos.setLocation(0, 0); }
int a = 0; int b = 0; String[] as = text.split(""); for (String string : as) { if (string.matches("[/u4E00-/u9FA5]")) { a++; } if (string.matches("[a-zA-Z0-9]")) { b++; } } int tl = a * 12 + b * 6;// 字符长度 MagickImage scaled = aImage.scaleImage(width, height); if (width > tl && height > 5) { DrawInfo aInfo = new DrawInfo(info); aInfo.setFill(PixelPacket.queryColorDatabase("white")); aInfo.setUnderColor(new PixelPacket(65535, 65535, 65535, 65535));// 设置为透明颜色 aInfo.setPointsize(pointSize); // 解决中文乱码问题,自己可以去随意定义个自己喜欢字体,我在这用的微软雅黑 String fontPath = "C:/WINDOWS/Fonts/MSIMHEI.TTF"; // String fontPath = "/usr/maindata/MSYH.TTF"; aInfo.setFont(fontPath); aInfo.setTextAntialias(true); aInfo.setOpacity(0);// 透明度 aInfo.setText(text); aInfo .setGeometry("+" + ((int) pos.getX() + "+" + (int) pos.getY())); scaled.annotateImage(aInfo); } scaled.setFileName(toImg); scaled.writeImage(info); scaled.destroyImages(); }
/** * 切取图片 * * @param imgPath * 原图路径 toPath 生成文件位置 w 左上位置横坐标 h 左上位置竖坐标 x 右下位置横坐标 y 右下位置竖坐标 * @return * @throw MagickException * @author 2010-8-11 */ public static void cutImg(String imgPath, String toPath, int w, int h, int x, int y) throws MagickException { ImageInfo infoS = null; MagickImage image = null; MagickImage cropped = null; Rectangle rect = null; try { infoS = new ImageInfo(imgPath); image = new MagickImage(infoS); rect = new Rectangle(x, y, w, h); cropped = image.cropImage(rect); cropped.setFileName(toPath); cropped.writeImage(infoS);
} finally { if (cropped != null) { cropped.destroyImages(); } } }
/** * 删除图片文件 * * @param src 图片位置 * @return * @throw * @author 2010-8-11 */ public static boolean removeFile(String src) throws SecurityException { try { if (!checkType(src)) { return false; }
File file = new File(src); return file.delete(); } catch (Exception e) { e.printStackTrace(); return false; } }
} |
在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)的更多相关文章
- Linux安装ImageMagick与JMagick完成过程及配置
原文地址:http://www.iitshare.com/linux-install-imagemagick-jmagick.html 一.安装背景 最近在服务器上部署了HapiCMS的产品,因为其对 ...
- WINDOWS和Linux上安装php7 alpha 并安装 yaf
WINDOWS和Linux上安装php7 alpha 并安装 yaf PHP技术 widuu 2个月前 (06-15) 126浏览 0评论 windows 1.windows上安装 php7 ...
- Windows 和 Linux 上Redis的安装守护进程配置
# Windows 和 Linux 上Redis的安装守护进程配置 Redis 简介 Redis是目前最常用的非关系型数据库(NOSql)之一,常以Key-Value的形式存储.Redis读写速度 ...
- 使用 MAUI 在 Windows 和 Linux 上绘制 PPT 的图表
我在做一个图表工具软件,这个软件使用 MAUI 开发.我的需求是图表的内容需要和 PPT 的图表对接,需要用到 OpenXML 解析 PPT 内容,读取到 PPT 图表元素的内容,接着使用 MAUI ...
- 在Windows和Linux上安装paramiko模块以及easy_install的安装方法
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- 在Windows和Linux上安装paramiko模块
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- 从Windows想Linux上传文件 Linux(CentOS) 上安装vsftpd
今天想在Linux上搭建个LAMP环境,以前用的Linux都安装了图形界面,但是这次用的阿里云服务器是纯命令模式,用起来有点不大适应. 最大的不适应就是获取apache等软件了,以前直接登录相应网站, ...
- mysql-5.7.xx在lcentos7下的安装以及mysql在windows以及linux上的性能差异
前言: 在centos上安装mysql,整整折腾了将近一天,因为是第一次安装,的确是踩了不少坑,这里详细记录下来,方便各位有同样需求的小伙伴参考. 该选择什么版本? mysql5.7有很多小版本,但是 ...
- 使用Nginx在windows和linux上搭建集群
Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 特点:反向代理 负载均衡 动静分离… 反向代理(Reverse Pro ...
随机推荐
- Mysql之使用Mysql运算符
Mysql运算符: 1.算术运算符 加减乘除与求模 SELECT 6+4 加法操作, 6-4 减法操作, 6*4 乘法操作, 6/2 除法操作, 6 DIV 2 除 ...
- 对于IO流的个人理解
Samuel 2018-04-21 在这之前,我给你们构造这样一个生活用水的场景: 人们日常生活需要生活用水,那么,水从哪里来呢? 大家都学过初中的物理常识,水在地表,通过蒸发,变成水蒸气去到空中,在 ...
- 例10-3 uva10375(唯一分解定理)
题意:已知C(m,n) = m!/(n!(m-n)!),已知p,q,r,s,求C(p,q)/C(r,s) 思路: 全部分解成质因子,相乘则加,除则减 #include <iostream> ...
- AR8033 1000M模式下ping包丢包率过大分析与解决
1 现象 近期对一款基于QCA方案.有线Phy为AR8033.WiFi双频且支持iEEE802.11AC的WLAN产品进行了深度验证,发现有线口同部分PC机直连时,WiFi终端ping 该PC机时总是 ...
- sql的left join 、right join 、inner join之间的区别
sql中left join .right join .inner join之间的区别 left join (左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 : right join (右 ...
- Splay讲解
Splay讲解 Splay是平衡树的一种,是一种二叉搜索树,我们先讲解一下它的核心部分. Splay的核心部分就是splay,可能有些人会说什么鬼?这样讲解是不是太不认真了?两个字回答:不是.第一个S ...
- H3C系列之三层交换机系统版本升级
本文涉及到的硬件与软件交换机:H3C S3600-28TP-SItftp软件:tftpd32小软件升级的文件:S36SI_E-CMW310-R1702P44.zip 关于升级的文件说明如下: S36S ...
- mysql数据库索引类型和原理
索引初识: 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. CREATE TABLE mytable ( id serial primary key, c ...
- python笔记十(列表生成式、字典生成式、生成器、生成器的并行)
一.列表生成式 列表生成式就是python设置的可以用来可以生成列表的. 如要生成一个0-9的列表我们可以通过以下代码实现: >>> list(range(10)) [0, 1, 2 ...
- Spring错误之org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'bookService' is expected to be of type 'pw.fengya.tx.BookService' but was actually of type 'com.sun.proxy.$Proxy1
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cas ...