当前位置: 首页 > 面试题库 >

使用Java ImageIO进行Tiff压缩

屈浩波
2023-03-14
问题内容

我在将png转换为tiff时遇到问题。转换很好,但是图像很大。我认为问题是我没有正确执行压缩?有人有什么建议吗?

这是代码示例

public static void test() throws IOException {

    // String fileName = "4958813_1";
    String fileName = "4848970_1";
    String inFileType = ".PNG";
    String outFileType = ".TIFF";

    ImageIO.scanForPlugins();

    File fInputFile = new File("I:/HPF/UU/" + fileName + inFileType);
    InputStream fis = new BufferedInputStream(new FileInputStream(
            fInputFile));
    PNGImageReaderSpi spi = new PNGImageReaderSpi();
    ImageReader reader = spi.createReaderInstance();

    ImageInputStream iis = ImageIO.createImageInputStream(fis);
    reader.setInput(iis, true);
    BufferedImage bi = reader.read(0);

    TIFFImageWriterSpi tiffspi = new TIFFImageWriterSpi();
    ImageWriter writer = tiffspi.createWriterInstance();
    //Iterator<ImageWriter> iter =  ImageIO.getImageWritersByFormatName("TIFF");
    //ImageWriter writer = iter.next();

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

    param.setCompressionType("LZW");
    param.setCompressionQuality(0.5f);
    File fOutputFile = new File("I:\\HPF\\UU\\" + fileName + outFileType);
    ImageOutputStream ios = ImageIO.createImageOutputStream(fOutputFile);
    writer.setOutput(ios);
    writer.write(bi);

}

问题答案:

Writer.getDefaultWriteParam()仅创建一个ImageWriteParam对象,不会将其链接回其他任何对象。

我看不到您的代码中有任何机制param可用于ImageWriter

我相信代替:

writer.write(bi);

您需要使用:

writer.write(null, new IIOImage(bi, null, null), param);


 类似资料:
  • 我想还有另一种方法,因为我们公司有一个扫描仪,可以产生尺寸小得多的JPEG压缩的TIFF图像。有没有人知道另一个库(免费或不免费)可以更有效地处理这种转换,或者在FreeImage中实现这一点? 更新: 我查看了TIFF6.0规范,分析了扫描器生成的文件,并能够编写一个函数,将JPEG包装到一个非常简单的TIFF容器中(也可以处理合并到多页TIFF中的多个JPEG)。 我知道可能有些陷阱我还不知道

  • 我需要压缩一个有几个灰色16bit图像(多页)的tif文件。我已经尝试使用ImageIO如下所示:使用Java ImageIO进行Tiff压缩最初,tif文件中的每个图像都来自另一个Tiff文件。当我想使用压缩机时,我有以下选项: null

  • 本文向大家介绍如何使用html5进行图片压缩上传?相关面试题,主要包含被问及如何使用html5进行图片压缩上传?时的应答技巧和注意事项,需要的朋友参考一下 涉及到H5图片压缩,第一应该想到的是canvas的图片处理api。 先利用canvas.toDataURL('"image/jpeg",quality)中的quality参数进行图片压缩范围是0~1之间,再将图片base64格式转化为blob对

  • 我通常使用压缩,使用解压(由于习惯使用gzip)。 我最近得到了一个带有超线程的四核CPU,所以我有8个逻辑核,我注意到许多核在压缩/解压过程中没有使用。 有什么方法可以利用未使用的内核来加快速度吗?

  • 问题内容: 我想尝试将java.util.zip中的Deflate和Inflate类用于zlib压缩。 我可以使用Deflate压缩代码,但是在解压缩时却遇到此错误- 到目前为止,这是我的代码- 问题答案: 您想在这里做什么?您使用InflaterInputStream来解压缩数据,然后尝试再次将此解压缩后的数据传递给Inflater?使用其中之一,但不能同时使用。 这就是导致您的异常的原因。 除

  • 本文向大家介绍C#使用iCSharpcode进行文件压缩实现方法,包括了C#使用iCSharpcode进行文件压缩实现方法的使用技巧和注意事项,需要的朋友参考一下 本文所述为一个C#使用iCSharpcode压缩的使用类,经测试效果不错。分享给大家供大家参考之用。具体方法如下: 1.参数类 2.工作类 3.使用类 4.文件源码点此本站下载 希望本文所述对大家的C#程序设计有所帮助。