加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读