我开始使用LLJTran进行JPEG图像的无损旋转。我对该库的唯一问题是它的iterface。
理想情况下,transform()将返回BufferedImage对象,但它不返回任何内容,而只是写入OutputStream。
这里是API。http://mediachest.sourceforge.net/mediautil/javadocs/mediautil/image/jpeg/LLJTran.html
有人知道我如何从OutputStream获取BufferedImage吗?
有人知道我如何从OutputStream获取BufferedImage吗?
ByteArrayOutputStream
BAOS.toByteArray()
获得byte[]
。 byte[]
作为参数返回给ByteArrayInputStream
的构造函数。 ImageIO.read(InputStream)
。使用ImageIO.read(InputStream input)
尝试并自行进行旋转,因为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 );
您是否尝试过使用BasicJpeg
的子类LLJTran
?它有一个getBufferedImage()
方法,但是文档不是那么冗长...而且我也不知道API。
如果这不起作用,您可以让LLJTran
写入连接到PipedOutputStream
的PipedInputStream
,并按照AlexR的建议将其馈送到ImageIO
。
OutputStream os = new OutputStream();
InputStream is = new ByteArrayInputStream(os.toByteArray());
BufferedImage bi = ImageIO.read(is);
从字面上看只有3行代码。不知道为什么我们试图让彼此变得困难。