如何在android中调整图像的实际大小?

时间:2015-07-31 03:43:05

标签: android image bitmap image-resizing

我的应用程序进入图库并且用户选择图像然后返回到我的活动中的onActivityResult方法,其中我获得了图像的文件路径。我可以通过实现:

来获得位图的高度和宽度
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
int height = options.outHeight;
int width = options.outWidth;

现在,如果位图的宽度大于500像素,我需要调整图像大小以使其最大宽度为500像素,并缩小高度。这是我将用于缩放高度的公式:

        int origWidth = width;
        int origHeight = height;
        int destHeight, destWidth;

        if (origWidth <= 500 || origHeight <= 500) {
            destWidth = origWidth;
            destHeight = origHeight;
        } else {
            destWidth = 500;
            destHeight = (origHeight * destWidth) / origWidth;
        }

        Bitmap bitmap = BitmapFactory.create(/*bitmap source*/, 0, 0, destWidth, destHeight); 

如何创建位图,因为inJustDecodeBounds属性设置为true,为位图对象返回null。如果我将其设置为false,选择大于内存的图像将导致OutOfMemory错误。

2 个答案:

答案 0 :(得分:0)

使用Intent(“com.android.camera.action.CROP”)

这是一个示例代码:

Intent intent = new Intent("com.android.camera.action.CROP");
// this will open all images in the Galery
intent.setDataAndType(photoUri, "image/*");
intent.putExtra("crop", "true");
// this defines the aspect ration
intent.putExtra("aspectX", aspectY);
intent.putExtra("aspectY", aspectX);
// this defines the output bitmap size
intent.putExtra("outputX", sizeX);
intent.putExtra("outputY", xizeY);
// true to return a Bitmap, false to directly save the cropped iamge
intent.putExtra("return-data", false);
//save output image in uri
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

答案 1 :(得分:0)

如果图片的宽度为&gt;,请尝试使用以下代码段缩小图片。 500。

$pattern = '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\s])/'
$str = "Ab0: padding";
if (preg_match($pattern, $str)) {    // false
  // do stuff
} else {
  // Do other stuff
}