私のアンドロイドアプリケーションを使用してギャラリーから画像を選択し、環境ディレクトリに保存せずに保存しました。元の画像サイズは1.4Mbでしたが、新しい保存画像サイズは4Mbを超えています。 私が使用したコードは以下の通りです。保存した画像がギャラリから選択した画像より大きい
case REQUEST_CODE_FROM_GALLERY:
String datastring1=data.getDataString();
Uri uri = data.getData();
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
Log.e("..............",bitmap.getHeight()+","+bitmap.getWidth());
} catch (IOException e) {
e.printStackTrace();
}
storeImage(bitmap);
break;
private boolean storeImage(Bitmap image) {
File pictureFile = createDir(MEDIA_TYPE_IMAGE);
try {
FileOutputStream fileOutputStream = new FileOutputStream(pictureFile);
image.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
private File createDir(int type) {
File file;
File filedir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "EffitientImageLoading");
if (!filedir.exists()) {
if (!filedir.mkdir())
Toast.makeText(this, "Directory could not be created!! Try Again"
, Toast.LENGTH_LONG).show();
}
String timestamp = new SimpleDateFormat("ddmmyy_hhmmss").format(new Date());
if (type == MEDIA_TYPE_IMAGE) {
file = new File(filedir.getPath() + File.separator +
"IMG_" + timestamp + ".png");
} else {
return null;
}
currentphotopath = "file:" + file.getAbsolutePath();
return file;
}
「Bitmap.CompressFormat.JPEG、100」を「Bitmap.CompressFormat.JPEG、10」に変更するとどうなりますか?より小さいサイズ、最悪の品質。あなたの場合、比率は1:3(1.4MBから4.2MB)のようです。したがって、 'Bitmap.CompressFormat.JPEG、33'はそのトリックを行うべきです。また、JPEGはLOSSY圧縮を使用しています。したがって、イメージを保存するたびに、品質が悪化し、より悪化します。 –
はい、ただし100は保存された画像の品質が100%、つまり画像のサイズと同じであることを意味します。しかし、ここでは画像のサイズがオリジナルよりも増えています。私が100の代わりに33を置くと、質の低下が起こります。 @Rotwang –
それは**まったく間違っています**。イメージはメモリ内で解凍されます。元の画像ではなく、圧縮解除された画像の100%を保存しています。 –