Android拍照或从相册选取以及裁剪
2016-08-23 15:41
295 查看
private void getPicFromPhoto() { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, PHOTO_REQUEST); } private void getPicFromCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //intent.putExtra("android.intent.extras.CAMERA_FACING", 1); // 调用前置摄像头 // 下面这句指定调用相机拍照后的照片存储的路径 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File( Environment.getExternalStorageDirectory(), "test.jpg"))); startActivityForResult(intent, CAMERA_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case CAMERA_REQUEST: switch (resultCode) { case -1:// -1表示拍照成功 File file = new File(Environment.getExternalStorageDirectory() + "/test.jpg"); if (file.exists()) { photoClip(Uri.fromFile(file)); } break; default: break; } break; case PHOTO_REQUEST: if (data != null) { photoClip(data.getData()); } break; case PHOTO_CLIP: if (data != null) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); faceImage.setImageBitmap(photo); } } break; default: break; } } private void photoClip(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", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 150); intent.putExtra("outputY", 150); intent.putExtra("return-data", true); startActivityForResult(intent, PHOTO_CLIP); }
public static Bitmap resizeImage(String path, int width, int height) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true;//不加载bitmap到内存中 BitmapFactory.decodeFile(path,options); int outWidth = options.outWidth; int outHeight = options.outHeight; options.inDither = false; options.inPreferredConfig = Bitmap.Config.ARGB_8888; options.inSampleSize = 1; if (outWidth != 0 && outHeight != 0 && width != 0 && height != 0) { int sampleSize= (int) (Math.ceil((outWidth/width+outHeight/height)/2)); Logger.d( "sampleSize = " + sampleSize); options.inSampleSize = 4; } options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(path, options); }
将bitmap压缩到指定大小:
从Android 2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework包下的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取。
/** * * 创建一个指定大小的缩略图 * @param source 源文件(Bitmap类型) * @param width 压缩成的宽度 * @param height 压缩成的高度 */ ThumbnailUtils.extractThumbnail(source, width, height); /** * 创建一个指定大小居中的缩略图 * * @param source 源文件(Bitmap类型) * @param width 输出缩略图的宽度 * @param height 输出缩略图的高度 * @param options 如果options定义为OPTIONS_RECYCLE_INPUT,则回收@param source这个资源文件 * (除非缩略图等于@param source) * */ ThumbnailUtils.extractThumbnail(source, width, height, options); /** * 创建一张视频的缩略图 * 如果视频已损坏或者格式不支持可能返回null * * @param filePath 视频文件路径 如:/sdcard/android.3gp * @param kind kind可以为MINI_KIND或MICRO_KIND * */ ThumbnailUtils.createVideoThumbnail(filePath, kind);
相关文章推荐
- Android从相册以及拍照选取照片,然后裁剪保存遇到的问题
- Android之拍照和相册选取图片并裁剪得到路径
- Android启动相机拍照、相册选取图片,裁剪图片
- android打开相册选取图片或打开相机拍照并进行裁剪
- Android调用相册或相机拍照选取照片并裁剪
- Android之拍照和相册选取图片并裁剪得到路径
- H5调用手机的摄像头拍照上传以及手机相册选取照片但不支持Android的分析
- Android实现拍照,以及从相册选择图片裁剪功能同时保存在本地
- android头像相册/拍照选取,裁剪及上传综合案例
- Android调用相册或相机拍照选取照片并裁剪
- Android调用系统相册、拍照以及裁剪最简单的实现(兼容7.0)
- Android拍照、相册选取、裁剪图片
- android头像相册/拍照选取,裁剪及上传综合案例
- Android调用相册或相机拍照选取照片并裁剪
- android 打开默认的系统相册,或拍照选取图片,并图片裁剪;
- Android之本地相册图片选取和拍照以及图片剪辑
- Android之拍照和相册选取图片并裁剪得到路径
- 黑马程序员--------------------------------Android 拍照、相册选图、裁剪上传
- Android调用手机拍照以及从相册选择照片