欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 编辑头像功能简单实现实例(图片选取,裁剪)

程序员文章站 2023-11-04 15:54:22
本文介绍了android 编辑头像功能的简单实例,可以实现拍照,图片选取,裁剪。 拍照 public static void startcamera(fra...

本文介绍了android 编辑头像功能的简单实例,可以实现拍照,图片选取,裁剪。

拍照

public static void startcamera(fragment fragment){
   file file=new file(environment.getexternalstoragepublicdirectory(environment.directory_dcim)+
       file.separator+"user_icon.jpg");
   intent intent=new intent(mediastore.action_image_capture);//intent隐式调用启动拍照界面
   intent.putextra("return-data",false);//该属性设置为false表示拍照后不会将数据返回到onresluet方法中(建议设置为false,这样获取的图片会比较清晰)
   componentname componentname=intent.resolveactivity(fragment.getcontext().getpackagemanager());
   intent.putextra(mediastore.extra_output, uri.fromfile(file));//该属性设置的是拍照后图片保存的位置
   //防止app启动意图时崩溃
   if (componentname!=null){
     fragment.startactivityforresult(intent,variable.request_camera_code);
   }
}

从相册中选取

public static void startphoto(fragment fragment){
   intent intent = new intent(intent.action_get_content);//intent隐式调用启动相册界面
   intent.settype("image/*");//设置数据类型
   componentname componentname = intent.resolveactivity(fragment.getcontext().getpackagemanager());
   log.d("tag", "startphoto: "+componentname);
   if (componentname != null) {//防止启动意图时app崩溃
     fragment.startactivityforresult(intent, variable.request_photo);
   }
 }

裁剪选取或拍摄的图片

public static void cropphoto(fragment fragment, uri uri){
   //设置裁剪图片保存位置
   file bomb=new file(fragment.getcontext().getexternalcachedir(),"bmob");
   log.d("tag", "cropphoto: "+bomb);
   if (!bomb.exists()){
     bomb.mkdir();
   }
   file file=new file(bomb,"user_icon.jpg");
   if (!file.exists()){
     try {
       file.createnewfile();
     } catch (ioexception e) {
       e.printstacktrace();
     }
   }
   intent intent=new intent("com.android.camera.action.crop");//intent隐式调用启动拍照界面
   intent.setdataandtype(uri,"image/*");//设置需要裁剪的图片地址
   intent.putextra("crop", "true");//通过put(key,value)方法设置相关属相
   intent.putextra("aspectx", 1);//设置图片宽高比例
   intent.putextra("aspecty", 1);
   intent.putextra("outputx", 240);//设置图片宽高
   intent.putextra("outputy", 240);
   intent.putextra("return-data", false);//该属性设置为false表示拍照后不会将数据返回到onresluet方法中(建议设置为false,这样获取的图片会比较清晰)
   intent.putextra(mediastore.extra_output, uri.fromfile(file));//该属性设置的是拍照后图片保存的位置
   intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//设置输出格式
   intent.putextra("nofacedetection", true);//是否取消人脸识别
   /*componentname componentname = intent.resolveactivity(context.getpackagemanager());
   log.d("tag", "cropphoto: "+componentname);
   if (componentname!=null){
     fragment.startactivityforresult(intent,variable.request_crop);
   }*/
   fragment.startactivityforresult(intent,variable.request_crop);
 }

重写onactivityresult方法获取并设置对应数据

@override
 public void onactivityresult(int requestcode, int resultcode, intent data) {
   super.onactivityresult(requestcode, resultcode, data);
   switch (requestcode){
     case variable.request_camera_code://当返回的请求码是启动拍照时设置的,此时调用裁剪方法
       assist.cropphoto(registerfragment.this, uri.fromfile(new file(environment
           .getexternalstoragepublicdirectory(environment.directory_dcim),"user_icon.jpg")));
       break;
     case variable.request_photo://当返回的请求码是启动相册时设置的,此时获取图片uri并调用裁剪方法
       assist.cropphoto(registerfragment.this,data.getdata());
       break;
     case variable.request_crop://当返回的请求码是启动裁剪时设置的,此时便可获取最终裁剪好的图片
       operation op=new operation(context);
       string path=context.getexternalcachedir()+
           file.separator+"bmob"+file.separator+"user_icon.jpg";//裁剪好的图片保存位置
       bitmap icon=op.decodebitmap(path);//加载本地图片,并获取大小合适的bitmap
       if (icon!=null){
         user_icon.setimagebitmap(icon);//将获取的图片设置到imagerview
         bmobfile=new bmobfile(new file(path));
         bmobfile.uploadblock(new uploadfilelistener() {
           @override
           public void done(bmobexception e) {
             if (e==null){
              //bmob上传图片成功
             }
           }
         });
       }

       break;
   }
}

最终效果展示

Android 编辑头像功能简单实现实例(图片选取,裁剪)

Android 编辑头像功能简单实现实例(图片选取,裁剪)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。