android - 从 Google Photos Gallery 加载图像进行裁剪

标签 android google-plus crop photos

是否可以从 Google 相册裁剪图片?我正在创建的应用程序允许用户选择图像并进行裁剪。选择图像时,要求用户选择一个应用程序来完成操作(相册、Google 相册等)从相册中选择和裁剪图像效果很好,但从 Google 相册中选择一个图像会崩溃且没有错误。 BBM 和 WhatsApp 等应用程序允许从照片中裁剪以上传个人资料照片。我想做类似的事情。

这是我的代码:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
Intent i = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, PICK_FROM_FILE);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case PICK_FROM_FILE:
    mImageCaptureUri = data.getData();
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);

    int size = list.size();

    if (size == 0) {
        Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();
        return;
    } else {
        intent.setData(mImageCaptureUri);
        intent.putExtra("outputX", 650);
        intent.putExtra("outputY", 650);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);
        Intent i = new Intent(intent);
        ResolveInfo res = list.get(0);
        i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
        startActivityForResult(i, CROP_FROM_CAMERA);
    }
    break;
    case CROP_FROM_CAMERA:
      Bundle extras = data.getExtras();
      if (extras != null) {
         Bitmap photo = extras.getParcelable("data");
         mImageView.setImageBitmap(photo);
         mImageView.setBackgroundColor(0);
      }
      File f = new File(mImageCaptureUri.getPath());
      if (f.exists()) f.delete();
      break;
    }
}

附注:这是针对 KitKat 及更高版本 (API19) 的

最佳答案

解决方法如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CROP_PIC_REQUEST_CODE) {
        if (data != null) {

            Bitmap bitmap = null;

            if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
                Bundle extras = data.getExtras();
                bitmap = extras.getParcelable("data");
            }
            else {
                Uri uri = data.getData();

                try {
                    bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(bitmap!=null) billImg.setImageBitmap(bitmap);
        }
    }
}

问题可能是因为,在android 5.0以上,Crop函数在onActivityResult中返回一个URI而不是一个位图,所以你必须相应地处理 ti。

无论如何,我认为最好使用像 https://github.com/ArthurHub/Android-Image-Cropper 这样的库,经过优化并处理不同的情况。

关于android - 从 Google Photos Gallery 加载图像进行裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30089262/

相关文章:

没有相应URL的Android深度链接

IOS Google+ 分享显示空的 prefillText

iphone - 在 iOS 中裁剪视频

ios - 在 UIStackView 中缩放 UIImage 的图像以适应 iOS 应用程序中的屏幕大小

Android 应用程序在启动时不断崩溃

Android 设计布局是否带软按钮

php - 如何获取电子邮件地址以及 google plus API 中的人员列表

javascript - TypeError : gapi. client.plus 未定义

ios - 无法快速使用 CGImageCreateWithImageInRect 裁剪触摸位置

android - 后台发送数据到邮箱