JAVA图像压缩,JAI解决之道.
来源:互联网 发布:windows电脑登录微信 编辑:程序博客网 时间:2024/04/20 05:46
继续着前几天弄的影像压缩的东西。对 TIF ,TIFF 文件的压缩,确实很郁闷。后来在网上搜索,都说用JAI去解决。所以到 SUN 公司的官方网站下了这个东西安装,安装后,在JAVA 的 JRE 的 LIB 的 EXT 目录下多了三个JAVA包:jai_codec.jar ,jai_core.jar,mlibwrapper_jai.jar 。
前面说过重点时 TIFF 影像的压缩,其他格式的前面已经说过,网上也很多解决方法。对TIFF文件压缩,最开始用了:
RenderedOp src = JAI.create("fileload", inputFile); 这种方式去处理. 但最后我发现 SRC 的资源始终不能释放,即使我调用 src.dispose(),也一样不可以,也找不到 close flush等方法。 在网上也有人问同样的问题,至少我没有搜索到答案。
最后尝试下面的方法,用 stream 的方式,因为 stream 可以 close 掉。代码如下,包含了非 TIFF影像的处理,其实非TIFF的也可以用JAI 来处理,这里没有用到。因为我的难点在于TIFF的处理。
//===============以下时通过SUN公司提供的 JAI 来完成图像压缩功能===========
/*
*
* 得到扩展名
*/
public static String getExtension(String filename, String defExt) {
if ((filename != null) && (filename.length() > 0)) {
int i = filename.lastIndexOf('.');
if ((i >-1) && (i < (filename.length() - 1))) {
return filename.substring(i + 1);
}
}
return defExt;
}
public static void RenameFile(String source){
boolean success = (new File(source)).delete();
if(!success){
System.out.println("文件更改名称失败,源资源文件在使用中!");
}
else{
String ext=getExtension(source,"");
File fDest=new File(source+"."+ext);
fDest.renameTo(new File(source));
}
}
/*
* 这里不用转换扩展名和像素大小,直接压缩
*/
public static void CompressImage(String source,String degree) throws FileNotFoundException, IOException, InterruptedException {
System.out.println("开始压缩");
FileSeekableStream stream = new FileSeekableStream(source);
PlanarImage in = JAI.create("stream", stream);
String ext=getExtension(source,"");
OutputStream os = null;
if ( source.endsWith("tif") || source.endsWith("tiff")){
os = new FileOutputStream(source+"."+ext);
TIFFEncodeParam param = new TIFFEncodeParam();
if ("高".endsWith(degree)){
param.setCompression(TIFFEncodeParam.COMPRESSION_DEFLATE);
}
else if ("中".endsWith(degree)){
param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP3_1D);
}
else if ("低".endsWith(degree)){
param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
}
ImageEncoder enc = ImageCodec.createImageEncoder("TIFF", os, param);
try {
enc.encode(in);
os.flush();
os.close();
stream.close();
} catch (IOException e) {
System.out.println("tiff error"+e.toString());
}
RenameFile(source);
}
else {
BufferedImage image = ImageIO.read(new FileInputStream(source));
//读取图标
BufferedImage image_biao = ImageIO.read(new FileInputStream(
source));
Graphics2D g = image.createGraphics();
g.drawImage(image_biao, 10, 10, image_biao.getWidth(null),
image_biao.getHeight(null), null);
g.dispose();
FileOutputStream out = new FileOutputStream(source);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
com.sun.image.codec.jpeg.JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
param.setQuality(0.1f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(image);
out.close();
}
}
//===============JAI 压缩结束=======================================
转 http://www.yihaomen.com/article/java/80.html
- JAVA图像压缩,JAI解决之道.
- [zz]用JAI扩展Java的图像处理能力
- 用JAI扩展Java的图像处理能力
- Java jai 读取tif页数
- 使用JAI扩展Java Image的功能
- 使用JAI扩展Java Image的功能
- 一个opencv与JAI的图像数据组织问题
- 记录 jre目录的关系 Java 的JAI SDK
- Sun发布Java图形技术软件 增加JAI工具
- 关于Java Advanced Imaging(JAI)的一点积累
- Java乱码解决之道
- JAVA中文乱码解决之道
- java.lang.UnsatisfiedLinkError 解决之道
- 图像压缩
- 图像压缩
- 图像压缩
- 图像压缩
- 图像压缩
- C语言学生管理系统
- GCD ios多线程 runloop
- MySQL复制--最快的从库搭建方法(tar包)
- [3月19日的脚本] 在内容类型中为网站列修改必需状态 (PowerShell)
- HBase简介(很好的梳理资料)
- JAVA图像压缩,JAI解决之道.
- Bubble(2)
- android屏幕分辨率分类
- android中常用正则表达式
- 礼貌语言和敬称
- 短信监听 接收短信 发送短信 SMS监听
- ANDROID 中 树形结构JSON 的 遍历提取信息
- 修改Android开机画面
- Homebrew安装与使用