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文件页数:

  1. import java.io.File;
  2. import java.io.IOException;
  3. import com.sun.media.jai.codec.FileSeekableStream;
  4. import com.sun.media.jai.codec.ImageCodec;
  5. import com.sun.media.jai.codec.ImageDecoder;
  6. import com.sun.media.jai.codec.SeekableStream;
  7. import com.sun.media.jai.codec.TIFFDecodeParam;
  8. import com.sun.media.jai.codec.TIFFDirectory;
  9. public class TifTest {
  10. public static void readTifFIle(String fileName) {
  11. File file = new File(fileName);
  12. SeekableStream s = null ;
  13. TIFFDecodeParam param = null ;
  14. try {
  15. s = new FileSeekableStream(file);
  16. ImageDecoder dec = ImageCodec.createImageDecoder( "tiff" , s, param);
  17. int numofpages;
  18. numofpages = dec.getNumPages();
  19. System.out.print(numofpages);
  20. } catch (IOException e1) {
  21. e1.printStackTrace();
  22. }
  23. }
  24. //读取文件的 页数
  25. public static void readTifFIle2(String fileName){
  26. File file = new File(fileName);
  27. SeekableStream s = null ;
  28. try {
  29. s = new FileSeekableStream(file);
  30. System.out.println(TIFFDirectory.getNumDirectories(s));
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. public static void main(String[] args) {
  36. String fileName = "C:\\证明.tif" ;
  37. readTifFIle2(fileName);
  38. }
  39. /*  public static int DISPLAY_WIDTH = 300;
  40. public static boolean doTiff2JPEG (String filename, String imageDir) {
  41. File file = new File(imageDir , filename);
  42. SeekableStream s = null;
  43. TIFFDecodeParam param = null;
  44. RenderedImage op = null;
  45. String simplefilename = filename.substring(0,filename.lastIndexOf("."));
  46. try {
  47. s = new FileSeekableStream(file);
  48. ImageDecoder dec = (ImageDecoder) ImageCodec.createImageDecoder("tiff", s, param);
  49. int numofpages = dec.getNumPages();
  50. for (int i=0; i < numofpages; i++) {
  51. op = new NullOpImage
  52. (dec.decodeAsRenderedImage(i),null,null,OpImage.OP_COMPUTE_BOUND);
  53. int width = op.getWidth();
  54. int height = op.getHeight();
  55. double conversionFactor = (double)DISPLAY_WIDTH / (double)width;
  56. int thumbHeight = (int)((double)height * conversionFactor);
  57. int thumbWidth = (int)((double)width * conversionFactor);
  58. Dimension dim = new Dimension(thumbHeight, thumbWidth);
  59. JAI.setDefaultRenderingSize(dim);
  60. JAI.setDefaultTileSize(dim);
  61. JAI.create("filestore",
  62. op, imageDir <i>File.separator</i> simplefilename + "." + i + ".jpg", "png");
  63. }
  64. } catch (IOException e) {
  65. System.out.println(e.getLocalizedMessage());
  66. return false;
  67. }
  68. return true;
  69. }
  70. public static void main(String[] args) {
  71. TifTest.doTiff2JPEG("aa.tiff", "d:temp");
  72. }*/
  73. }
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, a
首先下载 java 处理 图片 JAI 包 (见附件)   或者到http://download.csdn.net/detail/guoxuepeng123/5258630(下载 JAI 包) 下面是转换的代码: 1 package cn.xsbiz.servlet.test; 3 import java .io.FileOutputStream; 4 ...
解决找不到类 java x. media . jai .Planar Image 的错误 解决报错com.sun. media . jai .codec.SeekableStream的错误 包含文件为: jai -core.jar 和 sun- jai _codec.jar
这个是我报的错 因为修复掉了 没得截图....... 通过https://blog.csdn.net/zhujq_icode/article/details/80743394这篇文章 执行完之后 把本地的jar包加载到本地仓库后!! 我以为就没问题了(天真) 后来再启动项目就给我报程序包不存在错误 (我想我已经加载到本地了,怎么还会报这错) 后来也翻了很多文章 始终没有解决 这时我想会不会是依赖下载不全 ..
jai -core-1.1.3.jar was cached in the local repository 问题解决(maven) Failure to find java x. media : jai -core:jar:1.1.3 in https://repo.maven.apache.org/maven2 was cached in the local repository, reso...
随时添加 功能 和性能升级。 我不是一个很好的程序员。 我犯了错误,编写了不理想的代码,做出了错误的设计决策。 作为科学家,我是这些数学库的最终用户。 我的目标是使该库易于 使用 和易于理解。 由于 Jai 的水平很低,因此乌托邦将用 Jai 编写所有的数学运算。 但是,诸如BLAS,LAPACK等库已经投入了数十年的工作。因此,与从头开始编写所有内容相比,这些库的包装也许更容易,更稳定,更可靠。 我将从编写朴素的 Jai 实现开始,然后逐步进行改进。 让我们保持尽可能简单: 有意义的运算符重载(线性代数,复数,四元数等),否则调用简单函数。 如果不是非常必要,则不需要特殊的类型别名
import java x. media . jai . JAI ; import java x. media . jai .RenderedOp; jai _core-1.1.3.jar jai _codec-1.1.3.jar
jai - image io-core(独立) 注意:这是原始 java .net项目 jai - image io-core(在上游不再可用)的社区分支。 该项目为 Java 的添加了对以下文件类型的读/写支持: gif(写) 请注意, 现在大多数这些格式。 该项目的类通常不直接 使用 ,而是通过 Image IO的SPI插件机制 使用 。 有关详细信息,请参见。 该项目提供的实现 使用 包名称com.github. jai image io ,请注意,其他实现可能由 Java 安装或其他依赖项提供。 与原始的 jai - image io-core不同,该项目被称为“独立”,它删除了对 jai -core软件包( java x. media . jai )和JPEG 2000( jj2000 )的jj2000 。 该版本也不包括libJIIO的C实现,这意味着该版本是平台独立的,并且根据的3条
Maven 安装 JAR 包的命令是: mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar 我下载的这个 jar 包是放到了 D:\mvn 目录下(D:\mvn\spring-co
最近我在 使用 java 完成pdf转 图片 时需要用到一个依赖是 但是导入时缺报错了!说Cannot resolve java x. media : jai _core:1.1.3 这里我也找到了解决方案,在这里教大家一下,问题也就是说没有找到这个依赖需要的依赖包 java x. media : jai _core:1.1.3。我们先打开自己的maven仓库看看这个依赖包有没有。 这个时候我就在网上下载了这个jar包,把他放进去 这个时候刷新maven他就能找到了!问题完美解决! 因为很多小伙伴不知道这个jar包在哪下载,这
Java Advanced Imaging( JAI )是 Java 平台上的一个高级图像处理库,提供了许多高级的图像处理 功能 和算法,如图像缩放、旋转、滤波等。下面是 使用 JAI 的基本步骤: 1. 安装 JAI 库: JAI 库可以从Oracle官网下载并安装。 2. 导入 JAI 库:在 Java 项目中,需要导入 JAI 库的jar文件,以便在代码中 使用 JAI 的类和方法。 3. 加载图像: 使用 JAI 的ImagIO类中的静态方法read()方法,从文件或URL中读取图像数据,并将其转换为 JAI 的Planar Image 对象。 4. 执行图像处理:通过 JAI 提供的各种方法和算法,对Planar Image 对象进行图像处理,如缩放、旋转、滤波等。 5. 导出图像: 使用 JAI 的ImagIO类中的静态方法write()方法,将处理后的Planar Image 对象保存为文件或输出流。 以下是示例代码: import java x. media . jai .*; import java .awt. image .Buffered Image ; import java .io.File; import java .io.IOException; public class JAI Test { public static void main(String[] args) throws IOException { //加载图像 Planar Image image = JAI .create("fileload", "test.jpg"); //执行图像处理 ParameterBlock pb = new ParameterBlock(); pb.addSource( image ); pb.add(Float.valueOf(0.5f)); //缩放比例为0.5 pb.add(Float.valueOf(0.5f)); pb.add(Float.valueOf(0.0f)); pb.add(Float.valueOf(0.0f)); pb.add(Interpolation.getInstance(Interpolation.INTERP_BILINEAR)); //采用双线性插值算法 Planar Image scaled Image = JAI .create("scale", pb, null); //导出图像 Buffered Image output Image = scaled Image .getAsBuffered Image (); Image IO.write(output Image , "JPEG", new File("output.jpg")); 这段代码将读取名为“test.jpg”的图像文件,将其缩小到原来的一半,采用双线性插值算法进行缩放,并将处理后的图像保存为名为“output.jpg”的文件。 希望这个示例能够帮助你了解如何 使用 JAI 进行图像处理。