天天看点

android调用系统拍照程序和从图库选取图片,返回后调用系统裁剪工具

调用系统拍照

intent i = new intent(mediastore.action_image_capture);

file myimagedir = new file(temp_take_photo_file_path);

//创建图片保存目录

if (!myimagedir.exists()) 

{

mylog.d(this, "create the path:" + temp_take_photo_file_path);

myimagedir.mkdirs();

}

//根据时间来命名

imagfile = file.createtempfile(""+system.currenttimemillis(), ".jpg",myimagedir);

tmpuri = uri.fromfile(imagfile);

i.putextra(mediastore.extra_output, tmpuri); 

startactivityforresult(i, take_photo_request_code);

从图库选择图片

intent innerintent = new intent(intent.action_get_content); // "android.intent.action.get_content"

innerintent.settype("image/*"); // 查看类型

// stringimage_unspecified="image/*";详细的类型在com.google.android.mms.contenttype中

intent wrapperintent = intent.createchooser(innerintent, null);

act.startactivityforresult(wrapperintent, select_photo_request_code);

返回后接收并调用系统裁剪工具

@override

protected void onactivityresult(int requestcode, int resultcode,

intent intent) {

if (requestcode == mediahelper.take_photo_request_code || requestcode == mediahelper.select_photo_request_code) {

if (resultcode == result_ok ) {

uri uri = null;

if(requestcode == mediahelper.select_photo_request_code) {

uri = intent.getdata();

}else if(requestcode == mediahelper.take_photo_request_code) {

uri = mediahelper.tmpuri;

if (uri != null) {

    final intent intent1 = new intent("com.android.camera.action.crop"); 

      intent1.setdataandtype(uri, "image/*");

      intent1.putextra("crop", "true");

      intent1.putextra("aspectx", 1);

      intent1.putextra("aspecty", 1);

      intent1.putextra("outputx", 132);

      intent1.putextra("outputy", 132);

      intent1.putextra("return-data", true);

      startactivityforresult(intent1, mediahelper.cut_photo_request_code);

else if(requestcode == mediahelper.cut_photo_request_code) {

if (resultcode == result_ok && intent != null) {

bm= intent.getparcelableextra("data");

在裁剪图片时,遇到有些图片不能按照某一指定的比例进行裁剪,查看了源码后才知道:系统的裁剪图片默认对图片进行人脸识别,当识别到有人脸时,会按aspectx和aspecty为1来处理,如果想设置成自定义的裁剪比例,需要设置nofacedetection为true。

即iintent.putextra("nofacedetection", true);  取消人脸识别功能。

继续阅读