近期有使用到图片的压缩处理,由于在之前用Java 处理时,在低像素的情况下,Java 处理的效果确实很差,然后尝试了用网上推荐的免费开源的第三方软件,利用Java 的jni 调用dll 文件进行处理,效果还可以。在此记录下,方便以后继续积累。
1、纯Java 类处理图片代码
Java代码
/**
* 转换图片大小,不变形
*
* @param img
* 图片文件
* @param width
* 图片宽
* @param height
* 图片高
*/
public static void changeImge(File img, int width, int height) {
try {
Image image = ImageIO。
read(img);
//图片尺寸的大小处理,如果长宽都小于规定大小,则返回,如果有一个大于规定大小,则等比例缩放
int srcH = image。getHeight(null);
int srcW = image。getWidth(null);
if (srcH height || srcW > width) {
if(srcW > width) {
tmpH = srcH * width / srcW;
srcH = tmpH;
srcW=width;
}
if(srcH > height) {
tmpW = srcW * height / srcH;
srcW = tmpW;
srcH=height;
}
}
BufferedImage bufferedImage = new BufferedImage(srcW, srcH,
BufferedImage。
TYPE_3BYTE_BGR);
bufferedImage。getGraphics()。drawImage(
image。getScaledInstance(srcW, srcH, Image。SCALE_SMOOTH), 0,
0, srcW, srcH, null);
FileOutputStream fos = new FileOutputStream(img);
JPEGImageEncoder encoder = JPEGCodec。
createJPEGEncoder(fos);
encoder。encode(bufferedImage);
fos。close();
// System。out。println("转换成功。。。");
} catch (IOException e) {
e。
printStackTrace();
throw new IllegalStateException("图片转换出错!", e);
}
}
2、使用Jmagick 辅助
Html代码
(1)使用的windows下的jmagick-win-6。
3。9-q16。zip 地址是:http://downloads。jmagick。org/6。3。9/
(2)doc对应的api地址:http://downloads。jmagick。org/jmagick-doc/
(3)安装imagemagick,官方网站:http://www。
imagemagick。org/
我使用的是: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。
工具类:
Java代码
import java。
awt。Dimension;
import java。awt。Rectangle;
import java。text。SimpleDateFormat;
import java。util。Date;
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 ImageUtils {
static{
//不能漏掉这个,不然jmagick。jar的路径找不到
System。setProperty("jmagick。
systemclassloader","no");
}。
全部