开源中国 OsChina Android 客户端源码分析(6)拍照、图库、裁剪
2015-07-17 14:56
375 查看
1开源中国 OsChina Android 客户端源码拍照、图库、裁剪分析代码在net.oschina.app.fragment包下,MyInformationFragmentDetail类中;
2该类实现了两种设置用户图像的方法:从图册选择以及拍照获取图片;
3对获取到的图片进行裁剪处理,以获取用户指定大小的图片;
4拍照分析:拍照的核心代码,通过意图调用系统API 进行拍照
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent,ImageUtils.REQUEST_CODE_GETIMAGE_BYCAMERA);
这里的uri 是和拍照后图片相对应的资源标识符,也就是拍照后的照片的保存位置,源码中是将照片在SD卡中指定目录下以时间命名jpg格式来保存图片的。所以在startTakePhoto()函数中,首先进行了SD卡相关情况的判断,以及文件名和uri的生成,然后进行拍照。
拍照以后,在onActivityResult()中对保存在上述uri中的图片进行裁剪。这就是为什么会声明一个全局的origUri
5裁剪分析,使用裁剪时一个是裁剪框的长宽比,裁剪大小,裁剪后去黑边的设置,这里的data参数实际上就是上述拍照后保存的图片所对应的uri. 这句代码 intent.putExtra("output", this.getUploadTempFile(data));实际上是将裁剪后的图片保存在指定的URI中.
private void startActionCrop(Uri data) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(data, "image/*");
intent.putExtra("output", this.getUploadTempFile(data));
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);// 裁剪框比例
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", CROP);// 输出图片大小,用户自定义大小
intent.putExtra("outputY", CROP);
intent.putExtra("scale", true);// 去黑边
intent.putExtra("scaleUpIfNeeded", true);// 去黑边
startActivityForResult(intent,
ImageUtils.REQUEST_CODE_GETIMAGE_BYSDCARD);
}
6 从图库选择,这里需要注意4.4以下和以上调用系统相册的意图不同,获取后,在onActivityResult()中通过意图获取选择的图片,然后同上进行图片裁剪。
2该类实现了两种设置用户图像的方法:从图册选择以及拍照获取图片;
3对获取到的图片进行裁剪处理,以获取用户指定大小的图片;
4拍照分析:拍照的核心代码,通过意图调用系统API 进行拍照
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent,ImageUtils.REQUEST_CODE_GETIMAGE_BYCAMERA);
这里的uri 是和拍照后图片相对应的资源标识符,也就是拍照后的照片的保存位置,源码中是将照片在SD卡中指定目录下以时间命名jpg格式来保存图片的。所以在startTakePhoto()函数中,首先进行了SD卡相关情况的判断,以及文件名和uri的生成,然后进行拍照。
拍照以后,在onActivityResult()中对保存在上述uri中的图片进行裁剪。这就是为什么会声明一个全局的origUri
5裁剪分析,使用裁剪时一个是裁剪框的长宽比,裁剪大小,裁剪后去黑边的设置,这里的data参数实际上就是上述拍照后保存的图片所对应的uri. 这句代码 intent.putExtra("output", this.getUploadTempFile(data));实际上是将裁剪后的图片保存在指定的URI中.
private void startActionCrop(Uri data) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(data, "image/*");
intent.putExtra("output", this.getUploadTempFile(data));
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);// 裁剪框比例
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", CROP);// 输出图片大小,用户自定义大小
intent.putExtra("outputY", CROP);
intent.putExtra("scale", true);// 去黑边
intent.putExtra("scaleUpIfNeeded", true);// 去黑边
startActivityForResult(intent,
ImageUtils.REQUEST_CODE_GETIMAGE_BYSDCARD);
}
6 从图库选择,这里需要注意4.4以下和以上调用系统相册的意图不同,获取后,在onActivityResult()中通过意图获取选择的图片,然后同上进行图片裁剪。
相关文章推荐
- C#实现将网页保存成图片的网页拍照功能
- 基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
- JQuery Jcrop 实现图片裁剪的插件
- android 拍照和上传的实现代码
- js+jquery实现图片裁剪功能
- php结合imgareaselect实现图片裁剪
- PHP实现图片裁剪、添加水印效果代码
- 使用JavaScript+canvas实现图片裁剪
- android 调用系统相机拍照,并保存到SD卡
- 安卓拍照和选择照片上传功能代码
- Android裁剪圆形头像源码
- Flex Mobile拍照并保存在自定义目录
- 手机拍照获取不到图片?<部分手机>
- 拍照
- 图片裁剪插件jcrop用法
- JQuery WebCam 网页拍照配置 保存服务端
- Android+Camera+拍照
- Qt for Android - JNI
- java——利用jmf拍照
- WP7开发调用相机和选择相片任务