java - 将 ImageOutputStream 转换为 byte[]

标签 java image jai

一段时间以来,我一直在尝试使用 JAI 将 ImageOutputStream 转换为 byte[]。任何意见表示赞赏。谢谢。

抱歉,这是我正在处理的代码片段。我不得不早点发布它。我面临的问题是,我能够从 ImageOutputStream 获取 ByteArrayOutputStream。但它总是给我零字节。但是如果我使用 FileOutputStream 而不是 ByteArrayOuputStream,我可以写入一个具有非零字节的文件。 :

File file = new File("C:/TIFFImages/tiff-image.tiff");
FileInputStream in = new FileInputStream(file);
long filelength = file.length();
byte[] bytes = new byte[(int)filelength]; 
int offset = 0; 
int numRead = 0; 

while (offset < bytes.length && (numRead=in.read(bytes, offset, bytes.length-offset)) >= 0) { 
    offset += numRead; 
} 
if (offset < bytes.length) { 
    throw new IOException("Could not completely read file "+file.getName()); 
} 

ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

RenderedImage src = JAI.create("stream", SeekableStream.wrapInputStream(bais, true));
RenderedOp renderedOp = MedianFilterDescriptor.create(src, MedianFilterDescriptor.MEDIAN_MASK_SQUARE , 1, null);
BufferedImage image = renderedOp.getAsBufferedImage();

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ImageOutputStream  ios =  ImageIO.createImageOutputStream(baos);
//Instead of baos if I pass a FileOutputStream to the above function. It writes non zero
//bytes to the output file

TIFFImageWriterSpi tiffspi = new TIFFImageWriterSpi();
ImageWriter writer = tiffspi.createWriterInstance();
RenderedImage renderedImage = PlanarImage.wrapRenderedImage(src);
writer.setOutput(ios);
writer.write(image);
writer.write(null,new IIOImage(image, null, null), param);

System.out.println("After tiff ImageIO operations" + baos.toByteArray().length);

谢谢, 维奈

最佳答案

我很确定这是因为您没有在操作结束时调用 ImageOutputStream.flush() - 如果创建的 IOS 是 MemoryCacheOutputStream,它似乎需要对某些 ​​ImageIO 实现进行显式刷新。

关于java - 将 ImageOutputStream 转换为 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3507864/

相关文章:

Java - 创建和移动 xml : cannot access the file because it is being used by another process

java - 连接到数据库的方法给出空指针异常

c++ - 从平铺图像中进行双线性采样有什么好的策略吗?

java - 解压缩 TIFF 文件而不通过 BufferedImage

java - 在特定位置将一张图像添加/覆盖到另一张图像?

java.lang.NoClassDefFoundError : Could not initialize class javax. 媒体.jai.JAI

java - 将 javax.mail.internet.MimeMessage 发送给非 ASCII 名称的收件人?

java - Java GUI App Controller 中的ActionListener是好主意吗?

php - 如何使用 jquery imgAreaSelect 使用 php 裁剪图像?

c# - 设置 JPEG 元数据 - 实现问题