0

我目前在运行时将 tiff 图像存储在 BufferredImage 中,并在 hmtl 的图像 src 标记中显示相同的图像。

我的 tiff 图像大小约为 60kb,目前在网络浏览器中加载大约需要 1 秒。

有什么方法可以压缩 tiff 图像或 BufferedImage 以便在浏览器中加载图像的时间更快。

下面是我在 BufferredImage 中保存 tiff 图像的代码。

public BufferedImage savetiff(File srcFilePath) throws IOException {
            FileSeekableStream stream = new FileSeekableStream(srcFilePath);
            TIFFDecodeParam decodeParam = new TIFFDecodeParam();

            decodeParam.setDecodePaletteAsShorts(true);
            ParameterBlock params = new ParameterBlock();

            params.add(stream);
            RenderedOp image1 = JAI.create("tiff", params);
            BufferedImage img = image1.getAsBufferedImage();

            return img;
    }

将 tiff 转换为图像的代码,但在此代码中,我必须将 jpeg 图像保存在磁盘中,然后我必须再次读取它。如果有任何方法可以将 tiff 转换为 JPEG 并保存在 BufferedImage 中。

public boolean tiff2JPG(File srcFilePath, File destFilePath) {
            boolean status = false;
            SeekableStream s = null;
            RenderedImage op = null;
            ImageDecoder dec = null;
            TIFFDecodeParam param = null;
            FileOutputStream fos = null;
            JPEGEncodeParam jpgparam = null;
            ImageEncoder en = null;
            try {
                    s = new FileSeekableStream(srcFilePath);
                    dec = ImageCodec.createImageDecoder("tiff", s, param);
                    op = dec.decodeAsRenderedImage(0);
                    fos = new FileOutputStream(destFilePath);
                    jpgparam = new JPEGEncodeParam();

                    jpgparam.setQuality(67);
                    en = ImageCodec.createImageEncoder("jpeg", fos, jpgparam);
                    en.encode(op);
                    status = true;
            } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            } catch (Exception e) {
                    e.printStackTrace();
            } finally {
                    try {
                            fos.flush();
                            fos.close();
                    } catch (IOException io) {
                            // TODO Auto-generated catch block
                            io.printStackTrace();
                    } catch (Exception e) {
                            e.printStackTrace();
                    }

            }
return status;

请指教。

问候,
Dinesh Pise

4

0 回答 0