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
原创粉丝点击