ImageBuffer 生成tif 代码报空,tif 压缩

来源:互联网 发布:windows phone手机 编辑:程序博客网 时间:2024/05/29 18:09

Iterator writers = ImageIO.getImageWritersByFormatName("TIFF");

if (writers == null || !writers.hasNext()) {
throw new IllegalStateException("No TIFF writers!");
}

最近做项目 要生成 tif文件 在main 函数中 一切正常,但是 拿到 web项目中 jar包添加了,但是,会抛出  throw new IllegalStateException("No TIFF writers!"); 这个异常,Google下

给出的解决办法 看这里吧  http://stackoverflow.com/questions/22523644/issue-in-getimagewritersbyformatname-for-tiff-getting-image-writer   加到 JVM 中 或者代码中添加   

static { ImageIO.scanForPlugins(); }  ;


网上大概给都没有给压缩的单独的代码  只有给的 生成的 5200*6868 大小大概100M 这个就是生成了也不是太好用 压缩内存大小的两个方式  一个是  : 减小位深度 网上大部分传的都是 24位深度  这个在生成 ImageBuffer 的时候 就可以 配置的  image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);  参数 分别是  宽度 高度  图片质量的 配置  当前的就是位深度为一的常量。 压缩大小为原来的 24分之一

第二种是 : 在生成的时候 可以使用  CCITT T.6  进行压缩  压缩大小为原来的 十分之一吧 都是个大概数据 4M 的压缩之后 大概 400多K 具体 的 还要看你里面 具体存的内容。

CCITT T.6 压缩使用的方法 



ImageWriteParam writerParams = writer.getDefaultWriteParam();
writerParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);


writerParams.setCompressionType(compression);
writerParams.setCompressionQuality(0.5f);

// ColorModel colorModel = ColorModel.getRGBdefault();           // 指定压缩时使用的色彩模式   
// writerParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16)));



IIOMetadata imageMetadata = writer.getDefaultImageMetadata(imageType, writerParams);


注意使用方式: 必须为压缩模式 要不然会报错,具体 自己可以点进去看看。 CCITT T.6  只是一种压缩方式 还有CCITT T.4 ,应该是个压缩算法。


具体的生成方式 我也是随手Google   可以看看这个链接http://www.ithao123.cn/content-982412.html 然后 加是我写的就完美了。基本上就没有什么坑了

1 0