java jai create 方法_使用JAI扩展Java Image的功能

Java Image功能一直都在增强,但是向磁盘写一个图像文件或者返回一个PNG或JPEG依然比较难实现。但是我们可以使用Java Advanced Imaging(JAI)API来解决这个问题。JAI可以从SUN的Java站点下载,它包含在JDK 1.4的javax.imageio包中。要安装JAI,你需要三个jar文件,mlibwrapper_jai.jar, jai_codec.jar, and jai_core.jar放到你的classpath中。推荐将他们放到你的JDK的jre/lib/ext目录下。

对于Java来说,JAI是一个奇怪的系统,不像其他的方面有很多方法需要了解,这里只有一个叫做JAI的高级类和一些辅助方法。这些方法的第一个参数是一个操作类型名字,所以我们将会看到这样的代码:

source = JAI.create("fileload", .. );

JAI.create("extrema", src, ...);

JAI.create("histogram", src, ...);

在这个系统中,你可以很容易的添加你自己的或者第三方的功能,对类型的要求比较松,所以利用它进行开发难度比较大。

将一个AWT图像转化成一个PNG文件需要下面的一小段代码:

import java.awt.Image;

import java.awt.image.renderable.ParameterBlock;

import javax.media.jai.JAI;

import javax.media.jai.PlanarImage;

.....

Image img = ....

OutputStream out =....

ParameterBlock pb = new ParameterBlock().add(img);

PlanarImage src = (PlanarImage) JAI.create("awtImage", pb);

JAI.create("encode", src, out, "PNG", null);

从上面的例子可以看出向create方法传递参数有两种方法。新方法是使用ParameterBlock包含所有的参数。我们使用这种方法实现了awtImage操作。老方法是则使用一个重载方法,现在已不提倡使用,但是我们可以使用这种方法实现解码操作。上面的代码将把一个Image编码成为一个PNG并将其写入OutputStream中。

实例Java jai 读取tif文件页数:

import java.io.File;

import java.io.IOException;

import com.sun.media.jai.codec.FileSeekableStream;

import com.sun.media.jai.codec.ImageCodec;

import com.sun.media.jai.codec.ImageDecoder;

import com.sun.media.jai.codec.SeekableStream;

import com.sun.media.jai.codec.TIFFDecodeParam;

import com.sun.media.jai.codec.TIFFDirectory;

public class TifTest {

public static void readTifFIle(String fileName) {

File file = new File(fileName);

SeekableStream s = null;

TIFFDecodeParam param = null;

try {

s = new FileSeekableStream(file);

ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);

int numofpages;

numofpages = dec.getNumPages();

System.out.print(numofpages);

} catch (IOException e1) {

e1.printStackTrace();

}

}

//读取文件的 页数

public static void readTifFIle2(String fileName){

File file = new File(fileName);

SeekableStream s = null;

try {

s = new FileSeekableStream(file);

System.out.println(TIFFDirectory.getNumDirectories(s));

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

String fileName = "C:\\证明.tif";

readTifFIle2(fileName);

}

/*  public static int DISPLAY_WIDTH = 300;

public static boolean doTiff2JPEG (String filename, String imageDir) {

File file = new File(imageDir , filename);

SeekableStream s = null;

TIFFDecodeParam param = null;

RenderedImage op = null;

String simplefilename = filename.substring(0,filename.lastIndexOf("."));

try {

s = new FileSeekableStream(file);

ImageDecoder dec = (ImageDecoder) ImageCodec.createImageDecoder("tiff", s, param);

int numofpages = dec.getNumPages();

for (int i=0; i 

op = new NullOpImage

(dec.decodeAsRenderedImage(i),null,null,OpImage.OP_COMPUTE_BOUND);

int width = op.getWidth();

int height = op.getHeight();

double conversionFactor = (double)DISPLAY_WIDTH / (double)width;

int thumbHeight = (int)((double)height * conversionFactor);

int thumbWidth = (int)((double)width * conversionFactor);

Dimension dim = new Dimension(thumbHeight, thumbWidth);

JAI.setDefaultRenderingSize(dim);

JAI.setDefaultTileSize(dim);

JAI.create("filestore",

op, imageDir File.separator simplefilename + "." + i + ".jpg", "png");

}

} catch (IOException e) {

System.out.println(e.getLocalizedMessage());

return false;

}

return true;

}

public static void main(String[] args) {

TifTest.doTiff2JPEG("aa.tiff", "d:temp");

}*/

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现rm_python winrm模块使用

使用session方法###import winrmswinrm.Session(http://10.10.60.14:5985/wsman,auth(administrator,password))rs.run_ps(dir)rs.run_cmd(cd /d d: & test.bat)print r.std_outprint r.std_err使用Protocol方法###import winrmconn winrm.Protocol(endpointhttp://10.10…

java程序设计与实践教程 王薇 doc_Java程序设计与实践教程 王薇主编 答案

Java程序设计与实践教程 王薇 主编 董迎红 副主编 课后习题 答案第1章 JAVA简介一、判断题1.√ 2.√ 3. 4. 5. 6.√ 7.√ 8.√ 9. 10.二、填空题1.Application Applet 2. 类(字节码文件、目标文件) .class3.对象 4. 主 5. J2SE J2EE J2ME三、选择题1.B 2. D 3.B 4.B 5. A四、简…

树莓派python开发工具哪个好_Thonny——树莓派上Python的最新IDE

Thonny是最新的Raspbian系统中直接自带的Python IDE,支持Python3.6,更新到最新的Raspbian之后无需安装其他,就能打开使用。在Menu>Programming中就能找到这个IDE打开之后可以看到主要是两个区域,包括一个代码编辑区和一个shell…

java中常量final的用法_详解Java中final的用法

本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下概念final 具有“不可改变的”的含义,可以修饰 非抽象类、非抽象成员方法和变量。用 final 修饰的类不能被继承,没…

python弹球游戏绑定鼠标事件_用python和pygame游戏编程入门-弹球[鼠标控制]

本节我们再将鼠标的事件引入到这个动画中,要做什么呢?就是在动画中,如果按下鼠标左键,小球会停止移动,如果松开左键,小球会移动到鼠标的位置,然后继续刚才的运动;如果按下鼠标左键不…

maya藤蔓插件_Maya特效制作之植物生长动画制作教程(二)之多条藤蔓动画制作...

四、制作多条蔓藤植物下面我们要让很多植物在这个“崖壁”上生长出来,也就是要重复很多次前面的工作,当然可以这样一步一步地做,在“崖壁”面片上手动画很多的线,但下面尝试一种新的方法来制作,让粒子在“崖壁”面片Pl…

python自动发邮件运行正常就是收不到邮件是为什么_python stmp module 163邮箱发送邮件不成功...

开发环境:系统:Ubuntu 16.04 LTS版本:python 3.5.2邮箱服务器:stmp.126.com注意:1.不可正文群发带图,不然会被stmp.126.com认定为垃圾邮件,发不出去 - -!!! 也就是说该代码群发的话,只能用plain纯文本模式.2.由于我的邮箱服务器是126的,所以建议也使用126邮箱测试,测试的前提是…

mysql数据库导入导出_MySQL数据库导入导出详解

MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导入;2) 直接拷贝数据库目录和文件。在不同操作系统或MySQL版本情况1. 概述MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导…

python列表切片后得到剩余列表_python列表切片和嵌套列表取值操作详解

python列表切片和嵌套列表取值操作详解给出列表切片的格式:[开头元素::步长] # 输出直到最后一个元素,(最后一个冒号和步长可以省略,下同)[开头元素:结尾元素(不含):步长]# 其中,-1表示list最后一个元素首先来看最简单的单一列表:…

python 装饰器有哪些_Python装饰器有哪些常见用途?

RSabet..123我使用装饰器主要用于计时目的def time_dec(func):def wrapper(*arg):t time.clock()res func(*arg)print func.func_name, time.clock()-treturn resreturn wrappertime_decdef myFunction(n):...好例子!不知道它做了什么.解释你在那里做什么,以及装饰者如何解决…

代码统计工具有哪几种_跟我学“Linux”小程序Web版开发(四):引入统计及Crash收集...

在完成了产品的基础开发以后,接下来需要进行一些周边的工作,这些周边工具将会帮助下一步优化产品。在完成了产品的基础开发以后,接下来需要进行一些周边的工作,这些周边工具将会帮助下一步优化产品。为什么要加应用统计和 Crash 收…

mmseg java_MMSeg中文分词算法

Java中有一些开源的分词项目,比如:IK、Paoding、MMSEG4J等等。这里主要说的是MMSEG4J中使用的MMSeg算法。它的原文介绍在:http://technology.chtsai.org/mmseg/,是用英文书写的,这是只是它的一个中文笔记。为什么中文要…

python查看文档的软件_Python __doc__属性:查看文档

前面介绍了使用 help() 函数来查看程序单元的帮助信息。比如导入 string 模块之后,即可使用 help() 函数来查看指定程序单元的帮助信息。例如,在交互式解释器中输入如下命令来查看 string 模块下 capwords() 函数的作用:>>> help(st…

python重写和装饰器_python中的装饰器

装饰器的本质:当你在用某个decorator来修饰某个函数func时,如下所示:decoratordef func():pass其解释器会解释成下面这样的语句:funcdecorator(func)本质是把一个函数当作参数传递到另一个函数中,然后再调用。def hell…

python3不等于号_python中的不等于号是什么

python中的不等于号用!表示。Python支持的比较运算符如下图所示比较运算符,也成关系运算符,用于对常量、变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回 True;反之,则返回 False。比较运…

java的abstract的意思_java – spring中的abstract =“true”是什么意思?

Spring中的抽象bean有点不同于抽象类。事实上,Spring中的抽象bean甚至不需要映射到任何类。以此为例:和类:public class FooDao {private DataSource dataSource;private SomeHelper someHelper;private FooHelper fooHelper;//setters}publi…

错误:不能继续进行下一步操作 openfire 设置._如何为MacBook或Mac电脑恢复出厂设置...

mac电脑经过长时间的使用后会变得卡顿,或者因为部分操作方式改变以至于给我们在使用过程中造成障碍,此时我们可以进行恢复出厂设置,以此来解决部分问题。那么该如何为MacBook或Mac电脑恢复出厂设置呢?下面跟随小编来一起学习一下吧…

java枚举类型测试_Java枚举类的使用

1、自定义枚举类// 测试类public class enumDemo {public static void main(String[] args) {System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINTER);}}// 自定义枚举类class Season {//…

mac显示网速_Mac网络流量监控工具——NetWorker pro

NetWorker pro for Mac是Mac系统上一款轻量级的网速实时监测软件,可以让用户在菜单栏上显示当前的网络上传下载速度,可以在速度和流量两种模式之间切换,也可以选择不同的网络模式来进行监测。此外,networker mac还提供有关当前活动…

南京java架构师工资_java架构师工资一般是多少?怎么提升才能获得高薪?

这几年Java一直以自身的优势霸占榜首,而且其实java架构师工资也是行业比较高的,下面来看看java架构师的工资到底有多少,当然这也是要区分地区的,以及怎样提高自己才能获得高薪呢?当程序员容易,当一个优秀的…