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

Android选择本地图片并裁剪工具类

发布时间:2020-05-28 22:25:02 所属栏目:Java 来源:互联网
导读:Android选择本地图片并裁剪工具类

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

对于Android的本地图片选择,相信很多开发者都有被恶心过的经历。什么内存溢出啊,部分机型的不兼容啊什么的,我因为是个懒人,所以把之前项目的解决方法封装起来,以后几句代码解决~~爽爽哒
//这句代码启动相机拍照
SelectPicUtil.getByCamera(this);
//这句代码跳转到相册选图
SelectPicUtil.getByAlbum(this);
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
//输出图片800*400大小,选择图片时的裁剪比例是2:1
bm=SelectPicUtil.onActivityResult(this,requestCode,resultCode,data,800,400,2,1);
if(bm!=null){
...
}
}
importjava.io.FileNotFoundException;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.net.Uri;
importandroid.os.Environment;
importandroid.provider.MediaStore;
/**
*选择本地图片工具类
*<br>
*因为直接获取图片容易崩溃,所以直接存入SD卡,再获取
*<br>
*又因为写法不正确容易导致部分机型无法使用,所以封装起来复用
*<br>
*使用方法:
*<br>
*1、调用getByAlbum、getByCamera去获取图片
*<br>
*2、在onActivityResult中调用本工具类的onActivityResult方法进行处理
*<br>
*3、onActivityResult返回的Bitmap记得空指针判断
*
*<br><br>
*PS:本工具类只能处理裁剪图片,如果不想裁剪,不使用本工具类的onActivityResult,自己做处理即可
*
*@authorlinin630
*
*/
publicclassSelectPicUtil{

/**临时存放图片的地址,如需修改,请记得创建该路径下的文件夹*/
privatestaticfinalStringlsimg="file:///sdcard/temp.jpg";

publicstaticfinalintGET_BY_ALBUM=801;//如果有冲突,记得修改
publicstaticfinalintGET_BY_CAMERA=802;//如果有冲突,记得修改
publicstaticfinalintCROP=803;//如果有冲突,记得修改

/**从相册获取图片*/
publicstaticvoidgetByAlbum(Activityact){
IntentgetAlbum=newIntent(Intent.ACTION_GET_CONTENT);
getAlbum.setType("image/*");
act.startActivityForResult(getAlbum,GET_BY_ALBUM);
}

/**通过拍照获取图片*/
publicstaticvoidgetByCamera(Activityact){
Stringstate=Environment.getExternalStorageState();
if(state.equals(Environment.MEDIA_MOUNTED)){
IntentgetImageByCamera=newIntent(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
*/
publicstaticBitmaponActivityResult(Activityact,intrequestCode,Intentdata){
returnonActivityResult(act,0,0);
}
/**
*处理获取的图片,注意判断空指针
*/
publicstaticBitmaponActivityResult(Activityact,Intentdata,
intw,inth,intaspectX,intaspectY){
Bitmapbm=null;
if(resultCode==Activity.RESULT_OK){
Uriuri=null;
switch(requestCode){
caseGET_BY_ALBUM:
uri=data.getData();
act.startActivityForResult(crop(uri,w,h,aspectX,aspectY),CROP);
break;
caseGET_BY_CAMERA:
uri=Uri.parse(lsimg);
act.startActivityForResult(crop(uri,CROP);
break;
caseCROP:
bm=dealCrop(act);
break;
}
}
returnbm;
}

/**默认裁剪输出480*480,比例1:1*/
publicstaticIntentcrop(Uriuri){
returncrop(uri,480,1,1);
}
/**
*裁剪,例如:输出100*100大小的图片,宽高比例是1:1
*@paramw输出宽
*@paramh输出高
*@paramaspectX宽比例
*@paramaspectY高比例
*/
publicstaticIntentcrop(Uriuri,intw,inth,intaspectY){
if(w==0&&h==0){
w=h=480;
}
if(aspectX==0&&aspectY==0){
aspectX=aspectY=1;
}
Intentintent=newIntent("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);
returnintent;
}

/**处理裁剪,获取裁剪后的图片*/
publicstaticBitmapdealCrop(Contextcontext){
//裁剪返回
Uriuri=Uri.parse(lsimg);
Bitmapbitmap=null;
try{
bitmap=BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri));
}catch(FileNotFoundExceptione){
e.printStackTrace();
}
returnbitmap;
}
}

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

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

    推荐文章
      热点阅读