Android从相机、相册选择图片并裁剪
2014-11-20 20:04
459 查看
Android从相机、相册选择图片并裁剪
调用相册直接返回的是Uri,调用相机是设置图片输出路径,然后直接从设置的路径里提取数据
效果图:
package com.example.imagescale; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Display; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class ImageScaleActivity extends Activity implements OnClickListener{ private String TAG = "ImageScaleActivity"; public static final String IMAGE_S***E = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera"; public final static int REQ_CODE_GALLERY = 201; public final static int REQ_CODE_CAMERA = 203; public final static int REQ_CODE_PHOTO_CROP = 102; private Button mSelectBtn; private Button mScaleBtn; private ImageView mImageView; public Uri mCameraImageUri; public Uri mImageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_scale); Log.d(TAG, "onCreate"); Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); Log.d(TAG, "width = " + width + "-- height = " + height); double scale = getResources().getDisplayMetrics().density; Log.d(TAG, "scale = " + scale); initViews(); } private void initViews(){ mImageView = (ImageView)findViewById(R.id.jimageview); mSelectBtn = (Button)findViewById(R.id.selectpic); mScaleBtn = (Button)findViewById(R.id.scalepic); mSelectBtn.setOnClickListener(this); mScaleBtn.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.selectpic: showPostMenu(); break; case R.id.scalepic: if(mImageUri != null){ cropImage(mImageUri, 500, 500, REQ_CODE_PHOTO_CROP); } break; default: break; } } private void showPostMenu() { new AlertDialog.Builder(this).setItems(new String[] { "拍照", "相册" }, new DialogInterface.OnClickListener() { public void onClick(DialogInterface paramDialogInterface, int paramInt) { if (paramInt == 0){ Intent localIntent1 = new Intent("android.media.action.IMAGE_CAPTURE"); //设置相机图片的输出路径 mCameraImageUri = Uri.fromFile(new File(IMAGE_S***E, new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date()) + ".jpg")); localIntent1.putExtra("output", mCameraImageUri); Log.d(TAG, "mCameraImageUri:" + mCameraImageUri); ImageScaleActivity.this.startActivityForResult(localIntent1, REQ_CODE_CAMERA); return; } else { Intent localIntent2 = new Intent(); localIntent2.setType("image/*"); localIntent2.setAction("android.intent.action.GET_CONTENT"); ImageScaleActivity.this.startActivityForResult(Intent.createChooser(localIntent2, "选择照片"), REQ_CODE_GALLERY); } } }).show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Log.d(TAG, "onActivityResult"); if(resultCode == RESULT_OK){ if (requestCode == REQ_CODE_GALLERY) { // 从相册返回 Uri localUri = data.getData(); if (localUri == null){ return; } Bitmap localBitmap = BitmapLoader.decodeSampledBitmapFromUri(getContentResolver(), localUri, 100, 100); if (localBitmap != null) { if (localBitmap.getHeight() != localBitmap.getWidth()) { Log.d(TAG, "localUri:" + localUri); mImageUri = localUri; mImageView.setImageURI(localUri); // cropImage(localUri, 500, 500, REQ_CODE_PHOTO_CROP); } } } else if (requestCode == REQ_CODE_CAMERA){ // 从相机返回,从设置相机图片的输出路径中提取数据 Log.d(TAG, "mCameraImageUri:" + mCameraImageUri); mImageView.setImageURI(mCameraImageUri); mImageUri = mCameraImageUri; //cropImage(mImageUri, 500, 500, REQ_CODE_PHOTO_CROP); } else if (requestCode == REQ_CODE_PHOTO_CROP) { // 从剪切图片返回的数据 if (data != null) { Bitmap bitmap = data.getParcelableExtra("data"); mImageView.setImageBitmap(bitmap); } } } } //调用系统的裁剪图片功能 public void cropImage(Uri uri, int outputX, int outputY, int requestCode){ Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // crop为true是设置在开启的intent中设置显示的view可以剪裁 intent.putExtra("crop", "true"); //裁剪框比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); //图片输出大小 intent.putExtra("outputX", outputX); intent.putExtra("outputY", outputY); intent.putExtra("outputFormat", "JPEG"); intent.putExtra("noFaceDetection", true); intent.putExtra("return-data", true); startActivityForResult(intent, requestCode); } }
调用相册直接返回的是Uri,调用相机是设置图片输出路径,然后直接从设置的路径里提取数据
效果图:
相关文章推荐
- Android之圆形头像(实现相机拍摄+相册选择+图片裁剪功能)
- Android选择图片(从相册或相机)并裁剪
- android选择系统相机拍照和系统相册,裁剪图片并保存和设置头像,适配至7.0
- Android之圆形头像(实现相机拍摄+相册选择+图片裁剪功能)
- Android 相机或相册选择图片裁剪
- Android4.4以上的相册,相机图片选择和裁剪
- Android从相机或相册获取图片裁剪
- Android基础--调用系统相机,打开相册,裁剪图片并展示到界面
- Android开发之从相机或相册获取图片裁剪【转】
- Android 从相机或相册获取图片并裁剪
- Android图片裁剪(拍照和从相册选择)
- JS 使用 Android + IOS 相册 + 相机 进行自定义头像 + 限制裁剪后图片尺寸 + base64 string 与 图片互相转换
- android调用系统相机、调用系统相册,调用系统图片裁剪报错的解决方案
- 关于Android 选择相册图片裁剪的坑
- android客户端学习-拍照或从相册选择图片并裁剪
- [Android] 调用相机、打开相册、裁剪图片
- Android从相机或相册获取图片裁剪
- android开发——从相册中选择图片不裁剪
- Android 从相册、照相机选择图片并裁剪(支持 KiKat 4.4+)
- android打开相册选取图片或打开相机拍照并进行裁剪