Java可以处理图片吗_Java图片如何处理?

近期有使用到图片的压缩处理,由于在之前用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");

}。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值