Android 头像上传+图片裁切
来源:互联网 发布:蜜蜂对人类的作用数据 编辑:程序博客网 时间:2024/05/22 16:19
一,简单的一个类帮你搞定头像上传+裁切
(1)这是一个PhotoPresenter类直接封装好了
/** * * <p> * TODO(拍照或选择照片实现类) * </p> * <br/> */public class PhotoPresenter { public static final int CANCEL_PHOTO_ACTION=0; public static final int TAKE_PHOTO_ACTION = 1; public static final int SELECT_PHOTO_ACTION = 2; public static final int CUT_PHOTO_ACTION = 3; private Context mContext; private String mImagePath; private ImageView mImage; public PhotoPresenter(Context context, ImageView image) { mContext = context; mImagePath = 图片本地存储路径;//自己设置 mImage = image; } /** * * <p> * TODO(用相机拍照) * </p> * <br/> */public void takePhoto() {// 用相机拍照Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(mImagePath)));((Activity) mContext).startActivityForResult(intent, TAKE_PHOTO_ACTION);}/** * * <p> * TODO(从相册中选取图片) * </p> * <br/> * <p> * TODO(详细描述) * </p> * * @since 1.0.0 * @author cherish * @param context */public void pickAlbum() {Intent select_intent = new Intent(Intent.ACTION_PICK, null);select_intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");((Activity) mContext).startActivityForResult(select_intent,SELECT_PHOTO_ACTION);}/** * 裁剪图片方法实现 * @param uri */public void startPhotoZoom(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// crop=true是设置在开启的Intent中设置显示的VIEW可裁剪intent.putExtra("crop", true);// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪图片宽高intent.putExtra("outputX", 300);intent.putExtra("outputY", 300);intent.putExtra("return-data", true);((Activity) mContext).startActivityForResult(intent, CUT_PHOTO_ACTION);} /** * 此方法被Activity中onActivityResult回掉,Activity中方法写在下面了往后看 */ public void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == SELECT_PHOTO_ACTION) { //相册中选取if (data != null) {startPhotoZoom(data.getData());}} else if (requestCode == TAKE_PHOTO_ACTION) { //相机拍照照片File temp = new File(mImagePath);if (temp.exists()) {startPhotoZoom(Uri.fromFile(temp));}} else if (requestCode == CUT_PHOTO_ACTION) { //裁切完调用if(resultCode==CANCEL_PHOTO_ACTION){ Toast.makeText(mContext, "已取消", Toast.LENGTH_SHORT).show();}else{getImageToView(data);}}} /** * 保存裁剪之后的图片数据 * * @param picdata */ private void getImageToView(Intent data) {if(data!=null){ final Bundle extras = data.getExtras(); //拿到图片 if (extras != null) { new Thread(){ public void run() { final Bitmap photo = extras.getParcelable("data"); FileUtils.saveImage(photo, mImagePath); //裁切完图片保存到本地 ((Activity)mContext).runOnUiThread(new Runnable() { @Override public void run() { mOnImageSaveListener.onImageSave(mImagePath); //上传服务器(根据自己项目中网络请求提交) mImage.setImageBitmap(photo); //绑定到控件 } }); } }.start(); } }} //绑定头像接口 public interface OnImageSaveListener { public void onImageSave(String imagePath); }}(2)我们再来看一下Activity中方法
在Activity里面更具需求调用takePhoto()或者pickAlbum方法,一般写在弹窗里,然后在Activity里面写下面方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { new PhotoPresenter().onActivityResult(requestCode, resultCode, data); //回掉上面类方法 super.onActivityResult(requestCode, resultCode, data); }(3)图片文件上传到服务器
这里已经拿到了裁剪后的图片,根据自己项目中网络请求上传到服务器!
0 0
- Android 头像上传+图片裁切
- 移动端h5头像上传、头像裁切、上传图片
- Android图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android 图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android图片上传(头像裁切+原图原样)
- Android头像(图片)上传/文件上传
- Android上传头像,图片剪裁,压缩图片
- Android上传头像,图片剪裁,压缩图片
- Android上传头像,图片剪裁,压缩图片
- Android获取图片、裁剪、压缩、上传头像
- 上传图片 头像
- 解决虚拟机中Ubuntu的左边框和上边框消失问题
- RDD键值转换操作(4)–cogroup、join
- java中创建线程主要的三种方式
- Onenote 13与Windows 10冲突之解决方法
- 【Medium】200. Number of Islands
- Android 头像上传+图片裁切
- Neural Networks and Deep Learning 神经网络和深度学习
- VSS (Visual Source Safe 2005) 用法详解
- html+css+Javascript学习
- webview设置
- 读取XML文件
- RDD键值转换操作(5)–leftOuterJoin、rightOuterJoin、subtractByKey
- 极客班C++设计模式第二周课程笔记——常用模式(3)
- BZOJ1458: 士兵占领 最大流