如何在Android上旋转JPEG文件而不会降低质量并获得文件大小?

and*_*per 6 android jpeg image image-compression

背景

我需要旋转相机拍摄的图像,以便它们始终具有正常方向.

为此,我使用下一个代码(使用此帖子来获取图像方向)

//<= get the angle of the image , and decode the image from the file
final Matrix matrix = new Matrix();
//<= prepare the matrix based on the EXIF data (based on https://gist.github.com/9re/1990019 )
final Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(),matrix,false);
bitmap.recycle();
fileOutputStream = new FileOutputStream(tempFilePath);
rotatedBitmap.compress(CompressFormat.JPEG, 100, fileOutputStream);
rotatedBitmap.recycle();
Run Code Online (Sandbox Code Playgroud)

这里压缩率(AKA"质量"参数)是100.

问题

代码工作正常,但结果比原来大,大得多.

原始文件大约为600-700 KB,而生成的文件大约为3MB ...

即使输入文件和输出文件都具有相同的格式(JPEG),这也是如此.

相机设置为"超精细"质量.不确定它意味着什么,但我认为这与压缩率有关.

我试过的

我试图将"filter"参数设置为false或true.两者都导致了大文件.

即使没有旋转本身(只是解码和编码),我也会获得更大的文件大小......

只有当我将压缩比设置为大约85时,我才会得到类似的文件大小,但我想知道与原始文件相比质量会受到什么影响.

这个问题

它为什么会发生?

有没有办法获得完全相同的输入文件的大小和质量?

使用与原始文件相同的压缩率会使它发生吗?甚至可以获得原始文件的压缩率?

拥有100%压缩率意味着什么?


编辑:我发现这个链接谈论JPEG文件的旋转而不会丢失质量和文件大小,但在Android上是否有解决方案?

这是另一个链接,说它是可能的,但我找不到任何允许旋转jpeg文件而不会失去其质量的库

use*_*532 -2

100% 质量率可能是比最初保存文件的设置更高的质量设置。这会导致尺寸更大但(几乎)相同的图像。

\n\n

我不确定如何获得完全相同的尺寸,也许只需将质量设置为 85% 就可以了(快速和肮脏)。

\n\n

但是,如果您只想以 90\xc2\xb0 步旋转图片,则可以仅编辑 JPEG 元数据,而无需接触像素数据本身。

\n\n

不确定它在 android 中是如何完成的,但这就是它的工作原理。

\n