快速选择图片 并且上传
来源:互联网 发布:淘宝网男装t恤 编辑:程序博客网 时间:2024/04/30 01:04
在Android编程中,从相册选取或是拍照选取一张照片然后对其进行剪切的需求非常的多
之前的一篇文章只说到如何从相册中获取一张照片,今天就跟大家说说如何将获取到的相片进行剪切
完整源码下载
我们先说一下思路,在android系统中就自带了图片剪切的应用,所以,我们只需要将我们获取到的相片传给图片剪切应用,再将剪切好的相片返回到我们自己的界面显示就ok了
第一步,我们可以先激活系统图片或是相机来获取相片,看代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* 从相册获取
*/
public
void
gallery(View view) {
// 激活系统图库,选择一张图片
Intent intent =
new
Intent(Intent.ACTION_PICK);
intent.setType(
"image/*"
);
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
}
/*
* 从相机获取
*/
public
void
camera(View view) {
// 激活相机
Intent intent =
new
Intent(
"android.media.action.IMAGE_CAPTURE"
);
// 判断存储卡是否可以用,可用进行存储
if
(hasSdcard()) {
tempFile =
new
File(Environment.getExternalStorageDirectory(),
PHOTO_FILE_NAME);
// 从文件中创建uri
Uri uri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
}
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA
startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
}
第二步,通过startActivityForResult()方法我们可以在onActivityResult()中来获取到相应的返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@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) {
// 从相机返回的数据
if
(hasSdcard()) {
crop(Uri.fromFile(tempFile));
}
else
{
Toast.makeText(MainActivity.
this
,
"未找到存储卡,无法存储照片!"
,
0
).show();
}
}
else
if
(requestCode == PHOTO_REQUEST_CUT) {
// 从剪切图片返回的数据
if
(data !=
null
) {
Bitmap bitmap = data.getParcelableExtra(
"data"
);
this
.iv_image.setImageBitmap(bitmap);
}
try
{
// 将临时文件删除
tempFile.delete();
}
catch
(Exception e) {
e.printStackTrace();
}
}
super
.onActivityResult(requestCode, resultCode, data);
}
第三步,注意到里边有一个crop()方法,顾名思义,就是用于剪切图片的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* 剪切图片
*/
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);
}
第四步,在剪切完成图片后,切图应用就会将图片通过onActivityResult()返回给我们
通过Bitmap bitmap = data.getParcelableExtra("data");我们就拿到了我们想要的bitmap
接下来拿着这个bitmap你想干嘛就干嘛吧
由于上边的代码涉及到读写sdcard,所以要记得在清单文件中授权
1
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
></uses-permission>
0 0
- 快速选择图片 并且上传
- 选择多张图片上传显示,并且删除。
- PHP上传图片并且显示
- 图片上传并且支持预览
- 个人界面 < 头像 > 图片选择(相册,拍照)--如何调用系统的相册,裁剪并且上传
- HTML5移动端实现选择裁剪图片并且ajax上传服务器
- Swift从相册选择图片,图文混排并且可以保存、上传数据
- nodejs之上传图片并且显示图片
- C#上传图片并且缩放图片代码
- Android 选择图片、上传图片
- 上传图片并且显示所略图
- 上传图片,加水印并且产生缩略图
- html图片上传阅览并且点击放大
- 图片上传预览,并且限制图片大小
- 快速实现:删除和预览当前选择需要上传的图片
- html5 上传 图片 预览 选择
- 图片上传保存位置选择
- Android 选择图片裁剪,上传
- Android 动态获取ListView的高度
- 用css3动画制作幻灯片效果实现不了的问题
- 努力学java框架以及前端语言
- 选择相册图片,会自动旋转90度显示
- linux下mysql、redis、mongodb的配置
- 快速选择图片 并且上传
- redis
- 【ARM-Linux开发】【DSP开发】AM5728介绍
- myeclipse部署An internal error occurred 错误的几种情况
- Eclipse Git提交代码,多了一个“工程同名的文件夹”,找不到解决办法!!!
- 圆的扫描生成算法
- 常见软件许可证
- JS权威指南学习笔记-浏览器中的JS
- 第十二周实践——多文件组织(银行储蓄系统)