Android - 如何压缩或缩小图像?

时间:2011-02-09 09:21:47

标签: android image compression

ImageButton avatarButton = (ImageButton) findViewById(R.id.ImageButton_Avatar);
avatarButton.setImageResource(R.drawable.avatar);
strAvatarFilename =  "Image.jpg"; 
final Uri imageUriToSaveCameraImageTo = Uri.fromFile(new File(Environment.getExternalStorageDirectory()+"/Folder/"+strAvatarFilename));
avatarButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent pictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        pictureIntent.putExtra( MediaStore.EXTRA_OUTPUT, imageUriToSaveCameraImageTo );
        startActivityForResult(Intent.createChooser(pictureIntent, strAvatarPrompt), TAKE_AVATAR_CAMERA_REQUEST);
        Editor editor = Preferences.edit();
        editor.putString(PREFERENCES_AVATAR, imageUriToSaveCameraImageTo.getPath());
        editor.commit();
    }
});

我有这个代码。它需要一张照片,然后将它存储在两个位置,SD卡上的默认位置和/文件夹/文件我希望照片也存储在其中。一旦拍下,我就用这个刷新屏幕...

ImageButton avatarButton = (ImageButton) findViewById(R.id.ImageButton_Avatar);
String strAvatarUri = Preferences.getString(PREFERENCES_AVATAR, "");
Uri imageUri = Uri.parse(strAvatarUri);
avatarButton.setImageURI(null);
avatarButton.setImageURI(imageUri);

这会刷新图像按钮,以便用户可以看到他们拍摄的图像。然而,这显得非常大并且填满了屏幕。有什么方法可以压缩或缩小图像,以便用户可以以合理的尺寸看到它吗?谢谢

3 个答案:

答案 0 :(得分:17)

Bitmap thumb = Bitmap.createScaledBitmap (BitmapFactory.decodeFile(photoPath), 96, 96, false);

其中createScaledBitmap的第二个和第三个参数分别是宽度和高度。

http://developer.android.com/reference/android/graphics/Bitmap.html#createScaledBitmap%28android.graphics.Bitmap,%20int,%20int,%20boolean%29

编辑:我现在想到您可以使用B itmapFactory.OptionsinSampleSize选项以更快,更有效的方式执行此操作:

BitmapFactory.Options opts = new BitmapFactory.Options ();
opts.inSampleSize = 2;   // for 1/2 the image to be loaded
Bitmap thumb = Bitmap.createScaledBitmap (BitmapFactory.decodeFile(photoPath, opts), 96, 96, false);

通过这种方式,您可以节省更多内存,缩小尺寸的时间也会缩短。

答案 1 :(得分:1)

你可以搞乱ImageButton的scaleType属性(例如fitXY,或cropCenter),通过设置一个固定的大小到LayoutPreferences(高度和宽度),你将全部设置。

答案 2 :(得分:0)

Android库SiliCompressor提供此功能,可以在保持图像质量的同时压缩图像。