通过照相机拍照或者图库选择图片上传给服务器作为头像
来源:互联网 发布:caffe 测试集 验证集 编辑:程序博客网 时间:2024/05/21 06:58
通过照相机拍照或者图库选择图片上传给服务器作为头像
一个自定义的dialog
public class SettingAvatarDialog extends Dialog implements View.OnClickListener{ public static final int CAMERA = 33; public static final int PICTRUE_LIBS = 22; public static final int CUTTING = 11; public static final String IMAGE_UNSPECIFIED = "image/*"; private View view; private TextView tv_camera; private TextView tv_picture_libs; private TextView tv_cancel; private Activity mActivity; /** * @param context * @param cancelable * @param cancelListener */ public SettingAvatarDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); } /** * @param context * @param theme */ public SettingAvatarDialog(Context context, int theme) { super(context, theme); } /** * @param context */ public SettingAvatarDialog(Context context) { super(context); this.mActivity = (Activity) context; requestWindowFeature(Window.FEATURE_NO_TITLE); view = View.inflate(context,R.layout.activity_camera,null); this.setContentView(view); initView(); initOnclickListener(); } /** * 初始化位置,让其位于屏幕的下方 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setGravity(Gravity.BOTTOM); Display display = getWindow().getWindowManager().getDefaultDisplay(); int width = display.getWidth(); WindowManager.LayoutParams attributes = getWindow().getAttributes(); attributes.width = width; getWindow().setAttributes(attributes); this.setCancelable(false); } /** * 初始化点击事件 */ private void initOnclickListener() { tv_camera.setOnClickListener(this); tv_picture_libs.setOnClickListener(this); tv_cancel.setOnClickListener(this); } /** * 初始化子控件 */ private void initView() { tv_camera = (TextView) view.findViewById(R.id.tv_camera); tv_picture_libs = (TextView) view.findViewById(R.id.tv_picture_libs); tv_cancel = (TextView) view.findViewById(R.id.tv_cancel); } /** * 处理点击事件 * * @param v */ @Override public void onClick(View v) { Intent intent; switch (v.getId()) { case R.id.tv_camera: // 拍照上传 String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 相机捕捉图片的意图 Uri picFileFullName = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")); i.putExtra(MediaStore.EXTRA_OUTPUT, picFileFullName);// 指定系统相机拍照保存在imageFileUri所指的位置 mActivity.startActivityForResult(i, CAMERA); } else { ToastUtils.show(MyApplication.getCtx(), "请插入内存卡"); } break; case R.id.tv_picture_libs: // 图库上传 intent = new Intent(Intent.ACTION_PICK, null); // intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // IMAGE_UNSPECIFIED); intent.setType(IMAGE_UNSPECIFIED); mActivity.startActivityForResult(intent, PICTRUE_LIBS); break; case R.id.tv_cancel: // 取消 this.dismiss(); break; } } /** * 对头像进行裁剪 * * @param uri */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); // //裁剪图片意图 intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // 裁剪框的比例,1:1 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // 裁剪后输出图片的尺寸大小 intent.putExtra("outputX", 240); intent.putExtra("outputY", 240); // 图片格式 intent.putExtra("outputFormat", "JPEG"); intent.putExtra("noFaceDetection", true); intent.putExtra("return-data", true); mActivity.startActivityForResult(intent, CUTTING); this.dismiss(); }}
调用时的代码(当点击头像,准备设置头像之时)
SettingAvatarDialog dialog = new SettingAvatarDialog(this);dialog.show();
另外重写
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ToastUtils.show(this, "homeactivity返回了"); switch (requestCode) { case 33: //拍照返回的结果 if (resultCode == this.RESULT_OK) { File file = new File(Environment.getExternalStorageDirectory(), "temp.jpg"); if (file != null) { dialog.startPhotoZoom(Uri.fromFile(file)); } }else{ dialog.dismiss(); } break; case SettingAvatarDialog.PICTRUE_LIBS: //拍照返回的结果 if (resultCode == this.RESULT_OK) { Uri uri = data.getData(); if (uri != null) { dialog.startPhotoZoom(uri); } else { dialog.dismiss(); ToastUtils.show(this, "无法加载图片"); } }else{ dialog.dismiss(); } break; case SettingAvatarDialog.CUTTING: //拍照返回的结果 if (resultCode == this.RESULT_OK) { Bundle extras = data.getExtras(); if (extras != null) { final Bitmap photo = extras.getParcelable("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG, 75, stream); imageView.setImageBitmap(photo); }else{ dialog.dismiss(); } } break; default: break; }
值得注意的地方
上述代码是在Activity中使用的过程,如果在Fragment中使用时
- 在我们重写的onActivityResult()方法中this.RESULTOK改为mActivity.RESULTOK
- Fragment和Activity在通过startActivityForResult()方法打开acitivyt时,他俩都可以重写onAcitivityResult(),但是在上述的代码中如果将onAcitivityResult()写到framgnet里面,onAcitivityResult()将不会被正确调用,所以使用fragment的同学们需要找到fragment依附的activity,在其中重写onAcitivityResult()方法
- 一般的,常用的方法(将Bitmap对象转为由Base64编码的字符串)
Bitmap photo = extras.getParcelable("data");ByteArrayOutputStream stream = new ByteArrayOutputStream();photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);String base64Photo = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);
0 0
- 通过照相机拍照或者图库选择图片上传给服务器作为头像
- 通过拍照或者图库获取图片并上传服务器
- 个人资料上传头像模块,拍照+图库+图片剪裁+圆形头像
- 两分钟搞定从图库或者拍照上传头像~
- Android手机拍照或选取图库图片作为头像
- 拍照/选择图库头像/裁剪
- iOS 调用相机拍照和选择图库图片 设置头像
- 头像的选择 从图库、照相机照片 设置 图片为头像
- angularjs手机webapp 利用input拍照,图库选择上传图片
- iOS上传图片或者头像到服务器。
- ImageSeclect和Glide实现从图库选择或者拍照设置头像
- 安卓实现拍照、在手机中选择图片通过webservice上传图片到服务器
- Android拍照选择图片通过webservice上传图片到到服务器
- 安卓实现拍照、在手机中选择图片通过webservice上传图片到服务器
- 上传头像(拍照或者本地上传)
- Android 4.4以上拍照或者从图库选择图片,获取图片路径
- android从摄像头或者图库选择图片,并进行裁剪,可以用来用户头像处理
- 调用相机拍照或者从图库里选择图片裁剪后设置到界面
- 软件开发技术:国际化(globalization )
- centos7 kvm网卡故障
- JSP JSTL SQL标签操作数据库
- 世界六大银行卡组织
- Android 获取充电状态
- 通过照相机拍照或者图库选择图片上传给服务器作为头像
- 文件解析漏洞总结
- Nmap Cheat Sheet Part 1
- iOS分类(Category)和类扩展(Extension)的简单区别
- 探知Java虚拟机——初识Java
- nmap学习笔记
- 安装及使用yuicompressor
- Android之drawable state各个属性详解
- Type Java compiler level does not match the version of the installed Java project facet