拍照,选择照片并且剪裁
来源:互联网 发布:两江国际云计算 编辑:程序博客网 时间:2024/05/01 13:31
现在绝大多数的app都有拍照,选择照片并且剪裁的功能,所以我今天就为大家介绍一下这个功能的实现:
首先,准备工作:
1,如果我们实现拍照功能肯定是需要一个临时文件保存我们拍照完成的时候的文件的,可以定义一个全局的临时文件名称tempFile
private File tempFile = new File(Environment.getExternalStorageDirectory(), getPhotoFileName());
2,getPhotoFileName()表示文件名称:使用系统当前日期加以调整作为照片的名称
private String getPhotoFileName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
return dateFormat.format(date) + ".jpg";
}
准备工作完成之后就可以调用系统的拍照和选择照片加剪裁的功能了
3,拍照(调用系统的拍照功能)
Intent cameraintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 指定调用相机拍照后照片的储存路径
cameraintent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
startActivityForResult(cameraintent, PHOTO_REQUEST_CAREMA);
4,选择照片
// 激活系统图库,选择一张图片
Intent intent = new Intent(Intent.ACTION_PICK);
ntent.setType("image/*");
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
5,可以显示图片了,同时图片返回回来的时候调用系统的剪裁功能
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PHOTO_REQUEST_GALLERY) {
// 从相册返回的数据
if (data != null) {
// 得到图片的全路径
Uri uri = data.getData();
crop(uri);
}
} else if (requestCode == PHOTO_REQUEST_CAREMA) {
// 从相机返回的数据
String SDState = Environment.getExternalStorageState();
if (SDState.equals(Environment.MEDIA_MOUNTED)) {
crop(Uri.fromFile(tempFile));
} else {
Toast.makeText(MainActivity.this, "未找到存储卡,无法存储照片!",
Toast.LENGTH_SHORT).show();
}
} else if (requestCode == PHOTO_REQUEST_CUT) {
// 从剪切图片返回的数据
if (data != null) {
Bitmap bitmap = data.getParcelableExtra("data");
imageView.setImageBitmap(bitmap);
}
try {
// 将临时文件删除
tempFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
6,图片剪裁
private void crop(Uri uri) {
// 裁剪图片意图
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 裁剪后输出图片的尺寸大小
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
intent.putExtra("outputFormat", "JPEG");// 图片格式
intent.putExtra("noFaceDetection", true);// 取消人脸识别
intent.putExtra("return-data", true);
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}
7,这样就可以实现最基本的拍照选择照片加剪裁的功能了,但是还有一个重点记得加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- 拍照,选择照片并且剪裁
- Android调用手机拍照以及从相册选择照片,剪裁
- android 拍照和相册选择照片之后。剪裁图片。
- Android 拍照(获取原图),选择照片并且剪切图片
- android拍照选择图库后将照片剪裁压缩显示到imageview上
- 拍照,系统选择照片
- 拍照,选择照片功能
- 拍照,选择照片
- android选择图片、拍照、并剪裁
- Android仿微信选择照片,拍照
- 选择照片、拍照裁剪上传
- android调用照相机拍照获取照片并做简单剪裁
- android调用照相机拍照获取照片并做简单剪裁
- android调用照相机拍照获取照片并做简单剪裁
- android调用照相机拍照获取照片并做简单剪裁
- Android 调用手机相册、摄像头拍照及剪裁照片
- Android 拍照剪裁,获取相册图片,上传照片至服务端
- 简单实现拍照或者从相册中选取并且剪裁
- startActivityForResult无法调用singleTask的Activity返回的数据
- SpringMVC Controller接收前台ajax的GET或POST请求返回各种参数
- 10个有关快门的必学知识
- 远程桌面配置和常见问题
- Android调查问卷
- 拍照,选择照片并且剪裁
- java web基础 --- forEach标签
- 百度员工离职总结:资质平庸的人该怎么办?
- mycncart 之支付宝即时到帐支付方式
- [细说Java](2)Java中字符串为什么是不可变的
- FZOJ--2214--Knapsack problem(背包)
- 黑马程序员--多线程的应用(1)
- 二叉搜索树BST
- 2015福建省赛 fzoj Super Mobile Charger 2212 (转换)