2017-03-28 15 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はモバイル側でできる最高の圧縮です。その後も100MBだと、イメージを生成する方法が間違っています@Ammar –

+0

'サイズ/アップロード時間を短縮するために、ある程度圧縮してオリジナルのスケールイメージが必要です。 '。不可能。 jpgはすでに最大圧縮されています。サイズは、品質を落とすためにのみ減らすことができます。しかし、そのためにはまず不可能なビットマップを作成する必要があります。あなたの問題をどのように策定したかは恐ろしいことです。 – greenapps

関連する問題