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

如何在Java中将TIFF转换为JPEG / PNG

林劲
2023-03-14
问题内容

最近,当我尝试显示图像文件时遇到问题。不幸的是,图像格式是TIFF格式,主要的网络浏览器不支持该格式(因为我知道Safari仅支持该格式)。由于某些限制,我必须将此格式转换为主流浏览器支持的其他格式。但是,当我尝试转换格式时,这给我带来了很多问题。

我已经在网上搜索过,尽管在此链接中发布了类似的问题,但我如何在Java中将TIF转换为PNG?“但是我无法获得建议的结果。

因此,我再次提出这个问题,希望大家能有更好的解释和指导。

在提出建议的解决方案期间,我几乎没有遇到任何问题:

1)根据 Jonathan Feinberg 提出的答案,需要安装JAI和JAI /
ImageIO。但是,安装完这两个文件后,我仍然无法在Netbean 7.2中导入文件。NetBean 7.2仍然建议导入默认的imageIO库。

2)当我使用默认的ImageIO库Read方法时,它将返回NULL值,并且我无法继续进行。

3)我还尝试了其他方法,例如使用BufferedOutputStream方法将TIFF文件转换为BIN文件,但结果文件大于11
MB,该文件太大而无法加载,最终加载失败。

 if (this.selectedDO != null) {
        String tempDO = this.selectedDO.DONo;
        String inPath = "J:\\" + tempDO + ".TIF";
        String otPath = "J:\\" + tempDO + ".bin";

        File opFile = new File(otPath);

        File inFile = new File(inPath);

        BufferedInputStream input = null;
        BufferedOutputStream output = null;
        try {
            input = new BufferedInputStream(new FileInputStream(inPath), DEFAULT_BUFFER_SIZE);
            output = new BufferedOutputStream(new FileOutputStream(otPath), DEFAULT_BUFFER_SIZE);

            byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

        } finally {
            try {
                output.flush();
                output.close();
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

因此,希望能得到大家的帮助和建议,以便我可以将TIFF格式转换为其他格式,例如JPEG / PNG。


问题答案:

经过一些研究和测试,找到了一种将TIFF转换为JPEG的方法,对不起,这么久才上传了这个答案。

SeekableStream s = new FileSeekableStream(inFile);
TIFFDecodeParam param = null;
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);
RenderedImage op = dec.decodeAsRenderedImage(0);

FileOutputStream fos = new FileOutputStream(otPath);
JPEGEncodeParam jpgparam = new JPEGEncodeParam();
jpgparam.setQuality(67);
ImageEncoder en = ImageCodec.createImageEncoder("jpeg", fos, jpgparam);
en.encode(op);
fos.flush();
fos.close();

otPath是您要存储JPEG图像的路径。例如:“ C:/image/abc.JPG”;
inFile是输入文件,即TIFF文件

至少这种方法对我可行。如果还有其他更好的方法,请与我们分享。



 类似资料:
  • 问题内容: 我正在寻找将JPEG文件流转换为TIFF文件的Java API。我查看了JAI,但未找到与我正在查看的内容类似的内容。 有人可以指出我要这样做的一个好的API吗? 问题答案: 这里有一个例子 http://log.robmeek.com/2005/08/write-tiff-in- java.html

  • 所以我再次提出这个问题,希望能从大家那里有更好的解释和指导… 在执行所提出的解决方案时,我遇到的问题很少: 1)根据Jonathan Feinberg提出的答案,需要安装JAI和JAI/imageIO,但在安装了这两个文件后,仍然无法导入NetBean7.2中的文件。NetBean7.2仍然建议导入默认的imageIO库。 3)我也尝试了其他方法,例如使用BufferedOutputStream方

  • 问题内容: 我有一台保存TIFF图像的服务器。大多数客户端可以读取和显示TIFF图像,因此没有问题。但是,某些客户端无法处理此格式,但可以处理JPG。我想到了使用PHP的GD库为没有TIFF阅读能力的客户端进行服务器端转换。但是我注意到GD也无法读取TIFF文件。 Imagick无法在Windows中工作,我的想法是创建一个imageFetcher.php,它将获取客户端所需的实际图像作为参数。它

  • 问题内容: 我在将简单的PNG转换为JPEG格式时遇到问题。我正在使用以下代码: … … 我最后遇到一个JAI异常-> java.lang.RuntimeException:只能写入1或3字节的字节数据。在com.sun.media.jai.codecimpl.JPEGImageEncoder.encode(JPEGImageEncoder.java:148)… 退出选项。有什么建议吗? 问题答案

  • 问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon

  • 问题内容: 我一直在这里找到问题,并且Google的人们遇到了麻烦,而不是遇到了其他麻烦。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个到。 我发现的唯一其他答案是“首先将其设置为Long”,这实际上并没有解决这个问题。 我最初尝试投射,但得到了“ ” 如您所料,我有点困惑,我被困住了,因为有些内容以形式出现,而我要存储其信息的实体要求序列号为Long。 问题答案: 请注意,强制转换为和强制