如何从OutputStream制作BufferedImage

时间:2011-08-23 12:17:23

标签: java bufferedimage

我开始使用LLJTran进行JPEG图像的无损旋转。 我对这个库唯一的问题是它的iterface。

理想情况下,transform()会返回BufferedImage对象,但它不会返回任何内容,只会写出OutputStream。

这是API。 http://mediachest.sourceforge.net/mediautil/javadocs/mediautil/image/jpeg/LLJTran.html

有谁知道如何从OutputStream获取BufferedImage?

5 个答案:

答案 0 :(得分:2)

  

有谁知道如何从OutputStream获取BufferedImage?

  1. 创建ByteArrayOutputStream
  2. 从操作系统读取字节,写入BAOS。
  3. 完成后,BAOS将包含所有字节。使用BAOS.toByteArray()获取byte[]
  4. 将作为参数返回的byte[]交给ByteArrayInputStream的构造函数。
  5. 将BAIS传递给ImageIO.read(InputStream)

答案 1 :(得分:1)

OutputStream os = new OutputStream();
InputStream is = new ByteArrayInputStream(os.toByteArray());
BufferedImage bi = ImageIO.read(is);

从字面上看,只有3行代码。不知道为什么我们要让彼此变得困难。

答案 2 :(得分:0)

答案 3 :(得分:0)

尝试自己进行轮换,因为BufferedImage无论如何都会包含未压缩的数据。 因此,将JPEG文件解压缩为BufferedImage,然后允许无损旋转(由于未压缩的数据)。

示例:

File unrotatedImageFile = ...;
BufferedImage srcImage = ImageIO.read( unrotatedImageFile );

AffineTransformOp t = new AffineTransformOp( 
    AffineTransform.getRotateInstance( Math.toRadians( 90.0 ) ), 
    AffineTransformOp.TYPE_NEAREST_NEIGHBOR );
BufferedImage rotatedImage = t.filter( srcImage, null );

答案 4 :(得分:0)

您是否尝试使用BasicJpeg的子类LLJTran? 它有一个getBufferedImage()方法,但文档并不详细......我不知道API。

如果这不起作用,您可以LLJTran写一封与PipedOutputStream相关联的PipedInputStream,该ImageIO将按照AlexR的建议提供{{1}}。