我开始使用LLJTran进行JPEG图像的无损旋转。 我对这个库唯一的问题是它的iterface。
理想情况下,transform()会返回BufferedImage对象,但它不会返回任何内容,只会写出OutputStream。
这是API。 http://mediachest.sourceforge.net/mediautil/javadocs/mediautil/image/jpeg/LLJTran.html
有谁知道如何从OutputStream获取BufferedImage?
答案 0 :(得分:2)
有谁知道如何从OutputStream获取BufferedImage?
ByteArrayOutputStream
BAOS.toByteArray()
获取byte[]
。 byte[]
交给ByteArrayInputStream
的构造函数。 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}}。