Android图片系列(1)-------调用系统相册与相机获取图片
2015-02-27 22:14
726 查看
Android开发过程中,我们经常需要获取图片,你可以通过获取手机相册的图片,也可以调用相机拍照获取图片。这里主要讲这两个获取图片的方式,并记录其中遇到的小问题。
调用相册获取图片
这个功能非常简单,这里不多说了,这里贴出关键代码
其中CHOOSE_PICTURE是requestCode。执行上述代码,然后在onActivityResult方法中接收返回数据
调用相机拍照获取图片
调用系统相机可以用以下两种方式:
调用相机拍照有两点需要注意,
你可以指定拍照所得照片的保存路径,也可以不指定,直接获得照片。二者区别在于后者会使照片失真(照片文件小很多)
很多相机拍照之后,照片是旋转90度的,所以需要处理照片角度
第二个问题可以这样轻松解决
上面两个方法分别是旋转图片,和计算图片的角度,先调用第二个方法获取图片的角度,然后调用第第一个方法将图片旋转。
调用系统剪切图片功能
有时你想要对图片进行剪切,实现也很简单,如下
首先执行以下代码
然后再onActivityResult中接收数据
以下提供一个完整的例子,源码地址 效果图如下:
调用相册获取图片
这个功能非常简单,这里不多说了,这里贴出关键代码
Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT); openAlbumIntent.setType("image/*"); startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
其中CHOOSE_PICTURE是requestCode。执行上述代码,然后在onActivityResult方法中接收返回数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub if (resultCode != RESULT_OK) return; switch (requestCode) { case CHOOSE_PICTURE: Uri uri = data.getData(); try { if (photo != null) photo.recycle(); photo = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); System.out.println("bitmap size frome gallery = " + Utils.getBitmapSize(photo)); image.setImageBitmap(photo); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; default: break; } }
调用相机拍照获取图片
调用系统相机可以用以下两种方式:
//指定拍照照片保存路径 Intent cameraintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraFile = DiskUtils.generatePhotoFile(this); cameraintent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)); this.startActivityForResult(cameraintent, CAMERA_REQUEST); ////,,,,, //不指定图片保存路径 Intent cameraIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERANF_REQUEST);
调用相机拍照有两点需要注意,
你可以指定拍照所得照片的保存路径,也可以不指定,直接获得照片。二者区别在于后者会使照片失真(照片文件小很多)
很多相机拍照之后,照片是旋转90度的,所以需要处理照片角度
第二个问题可以这样轻松解决
public static int readPictureDegree(String path) { int degree = 0; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; } } catch (IOException e) { e.printStackTrace(); } return degree; } public static Bitmap rotateBitmap(Bitmap bitmap, float rotateDegree){ Matrix matrix = new Matrix(); matrix.postRotate((float)rotateDegree); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); return bitmap; }
上面两个方法分别是旋转图片,和计算图片的角度,先调用第二个方法获取图片的角度,然后调用第第一个方法将图片旋转。
调用系统剪切图片功能
有时你想要对图片进行剪切,实现也很简单,如下
首先执行以下代码
// 图片剪切 private void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // crop为true是设置在开启的intent中设置显示的view可以剪裁 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 0); intent.putExtra("aspectY", 0); // outputX,outputY 是剪裁图片的宽高 // intent.putExtra("outputX", 2000); // intent.putExtra("outputY", 2000); intent.putExtra("return-data", true); intent.putExtra("noFaceDetection", true); this.startActivityForResult(intent, CROP_2_REQUEST); }
然后再onActivityResult中接收数据
photo = data.getExtras().getParcelable("data"); image.setImageBitmap(photo);
以下提供一个完整的例子,源码地址 效果图如下:
相关文章推荐
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- Android中调用系统相机、系统相册来获取图片,并裁剪图片。
- android 调用系统相册选取照片或者打开相机拍照获取图片
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时为什么会回到home界面或者到前一个界面,然后才会跳转到当前activity
- android 调用系统相册选取照片或者打开相机拍照获取图片
- Android调用系统相册或相机获取图片
- Android基础--调用系统相机,打开相册,裁剪图片并展示到界面
- Android打开系统相机、相册,并进行裁剪图片的工具类CameraUtil,以及相册获取图片注意要点。
- iOS开发swift如何调用系统相册和相机获取图片设置用户头像
- Android 调用相机或从相册获取图片
- 调用系统相机拍照获取图片或者从相册中调用本地图片显示问题
- android实例之——调用android系统相机、系统相册,并对得到的图片进行处理
- Android开发基础 调用相机 系统相册(并对图片进行压缩处理)
- Android调用系统相册和相机选择图片并显示在imageview中
- Android跳转系统相机或相册获取图片
- 调用系统相机/相册获取图片的完美解决方案
- iOS图片处理(一)调用系统相机和相册获取图片,给相机添加自定义覆盖物
- android 调用系统相机并获取图片路径
- Android 拍照以及一些常用的处理,例如将图片显示到相册(包含了安卓系统6.0以上调用相机的处理)