2017-03-28 160 views
0

我在SD卡上有一个很大的图像文件,我想在上传到服务器之前进行压缩。但要使用Bitmap.compress(CompressFormat format, int quality, OutputStream stream)来压缩图像,我们需要将图像读入内存并保存压缩版本。 有没有办法生成图像的压缩版本,而不会将位图读入内存。在没有读入内存的情况下压缩图像

我正在使用以下代码进行压缩。

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = false; 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

Bitmap finalBitmap = BitmapFactory.decodeFile(originalFile.getAbsolutePath(), options);  

File local = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "/my_images"); 
local.mkdirs(); 
File compressedFile = new File(local, "test.jpg"); 
FileOutputStream out = new FileOutputStream(compressedFile); 
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 70, out); 
+1

将位图保存在磁盘上并压缩文件。 –

+0

图像已保存在磁盘上,大小约为100MB。所以我不想将位图加载到内存中,因为它会导致OOM。我需要的是创建一个压缩版本的文件,以优化上传时间。你上传图片的格式是 – Ammar

+0

? –

回答

0

BitmapFactory可以在从磁盘读取的同时调整图像文件的大小。你最终得到一个小的位图。然后压缩该位图文件并上传该文件。

+0

我不想缩小图像,而是需要使用某些压缩来缩小原始缩放图像以缩小上传时间。 – Ammar

+0

jpeg是您可以在移动端进行的最佳压缩。即使在那之后,如果它是100 MB,那么你如何生成图像就有问题了@Ammar –

+0

'我需要通过一些压缩来缩小原始缩放图像,以缩短上传时间。 '。不可能。一个jpg已经是最大压缩。尺寸只能降低质量。但为此,您首先必须创建不可能的位图。你如何制定你的问题是可怕的。 – greenapps

相关问题