Android选择本地图片并裁剪工具类
发布时间:2020-12-15 03:19:33 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 对于Android的本地图片选择,相信很多开发者都有被恶心过的经历。什么内存溢出啊,部分机型的不兼容啊什么的,我因为是个懒人,所以把之前项目的解决
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
对于Android的本地图片选择,相信很多开发者都有被恶心过的经历。什么内存溢出啊,部分机型的不兼容啊什么的,我因为是个懒人,所以把之前项目的解决方法封装起来,以后几句代码解决~~爽爽哒
//这句代码启动相机拍照 SelectPicUtil.getByCamera(this); //这句代码跳转到相册选图? SelectPicUtil.getByAlbum(this); protected?void?onActivityResult(int?requestCode,?int?resultCode,?Intent?data)?{ ??//输出图片800*400大小,选择图片时的裁剪比例是2:1? ??bm?=?SelectPicUtil.onActivityResult(this,?requestCode,?resultCode,?data,?800,?400,?2,?1); ??if?(bm!=null)?{ ????... ??} } import?java.io.FileNotFoundException; import?android.app.Activity; import?android.content.Context; import?android.content.Intent; import?android.graphics.Bitmap; import?android.graphics.BitmapFactory; import?android.net.Uri; import?android.os.Environment; import?android.provider.MediaStore; /** ?*?选择本地图片工具类 ?*?<br> ?*?因为直接获取图片容易崩溃,所以直接存入SD卡,再获取 ?*?<br> ?*?又因为写法不正确容易导致部分机型无法使用,所以封装起来复用 ?*?<br> ?*?使用方法: ?*?<br> ?*?1、调用getByAlbum、getByCamera去获取图片 ?*?<br> ?*?2、在onActivityResult中调用本工具类的onActivityResult方法进行处理 ?*?<br> ?*?3、onActivityResult返回的Bitmap记得空指针判断 ?*? ?*?<br><br> ?*?PS:本工具类只能处理裁剪图片,如果不想裁剪,不使用本工具类的onActivityResult,自己做处理即可 ?*? ?*?@author?linin630 ?* ?*/ public?class?SelectPicUtil?{ ? ?/**临时存放图片的地址,如需修改,请记得创建该路径下的文件夹*/ ?private?static?final?String?lsimg?=?"file:///sdcard/temp.jpg"; ? ?public?static?final?int?GET_BY_ALBUM?=?801;//如果有冲突,记得修改 ?public?static?final?int?GET_BY_CAMERA?=?802;//如果有冲突,记得修改 ?public?static?final?int?CROP?=?803;//如果有冲突,记得修改 ? ?/**从相册获取图片*/ ?public?static?void?getByAlbum(Activity?act){ ??Intent?getAlbum?=?new?Intent(Intent.ACTION_GET_CONTENT); ??getAlbum.setType("image/*"); ??act.startActivityForResult(getAlbum,?GET_BY_ALBUM); ?} ? ?/**通过拍照获取图片*/ ?public?static?void?getByCamera(Activity?act){ ??String?state?=?Environment.getExternalStorageState(); ??if?(state.equals(Environment.MEDIA_MOUNTED))?{ ???Intent?getImageByCamera?=?new?Intent(MediaStore.ACTION_IMAGE_CAPTURE); ???getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT,?Uri.parse(lsimg)); ???getImageByCamera.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,?0); ???act.startActivityForResult(getImageByCamera,?GET_BY_CAMERA); ??}?else?{ ???L.e("请确认已经插入SD卡"); ??} ?} ?/** ??*?处理获取的图片,注意判断空指针,默认大小480*480,比例1:1 ??*/ ?public?static?Bitmap?onActivityResult(Activity?act,?int?requestCode,?Intent?data){ ??return?onActivityResult(act,?0,?0); ?} ?/** ??*?处理获取的图片,注意判断空指针 ??*/ ?public?static?Bitmap?onActivityResult(Activity?act,?Intent?data,? ???int?w,?int?h,int?aspectX,int?aspectY){ ??Bitmap?bm?=?null; ??if?(resultCode?==?Activity.RESULT_OK)?{ ???Uri?uri?=?null; ???switch?(requestCode)?{ ???case?GET_BY_ALBUM: ????uri?=?data.getData(); ????act.startActivityForResult(crop(uri,w,h,aspectX,aspectY),CROP); ????break; ???case?GET_BY_CAMERA: ????uri?=?Uri.parse(lsimg); ????act.startActivityForResult(crop(uri,CROP); ????break; ???case?CROP: ????bm?=?dealCrop(act); ????break; ???} ??} ??return?bm; ?} ? ?/**默认裁剪输出480*480,比例1:1*/ ?public?static?Intent?crop(Uri?uri){ ??return?crop(uri,480,1,1); ?} ?/** ??*?裁剪,例如:输出100*100大小的图片,宽高比例是1:1 ??*?@param?w?输出宽 ??*?@param?h?输出高 ??*?@param?aspectX?宽比例 ??*?@param?aspectY?高比例 ??*/ ?public?static?Intent?crop(Uri?uri,int?w,int?h,int?aspectY){ ??if?(w==0&&h==0)?{ ???w=h=480; ??} ??if?(aspectX==0&&aspectY==0)?{ ???aspectX=aspectY=1; ??} ??Intent?intent?=?new?Intent("com.android.camera.action.CROP"); ??//?照片URL地址 ??intent.setDataAndType(uri,?"image/*"); ??intent.putExtra("crop",?"true"); ??intent.putExtra("aspectX",?aspectX); ??intent.putExtra("aspectY",?aspectY); ??intent.putExtra("outputX",?w); ??intent.putExtra("outputY",?h); ??//?输出路径 ??intent.putExtra(MediaStore.EXTRA_OUTPUT,?Uri.parse(lsimg)); ??//?输出格式 ??intent.putExtra("outputFormat",?"JPEG"); ??//?不启用人脸识别 ??intent.putExtra("noFaceDetection",?true); ??intent.putExtra("return-data",?false); ??return?intent; ?} ? ?/**处理裁剪,获取裁剪后的图片*/ ?public?static?Bitmap?dealCrop(Context?context){ ??//?裁剪返回 ??Uri?uri?=?Uri.parse(lsimg); ??Bitmap?bitmap?=?null; ??try?{ ???bitmap?=?BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri)); ??}?catch?(FileNotFoundException?e)?{ ???e.printStackTrace(); ??} ??return?bitmap; ?} } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |