Android图片选择及裁剪

来源:互联网 发布:网络感叹号 不能上网 编辑:程序博客网 时间:2024/04/27 21:15

        Android 的头像上传一般步骤 :选取相册图片或者调用系统照相机拍照,进行图片剪切后上传 。

        在相册中选取图片和调用相机拍照这个还是比较靠谱的,按照通用 标准调用就好,但是对于图片剪切,同样的调用方式,却可能因为手机品牌的不一样导致姜蓉性问题,话不多说,开始手把手教学。


1. 选取图片

      

 /**     * 调用系统相册等工具选择图片,activity 的onActivityResult中返回结果     *     * @param activity     */    public static void pickPicture(Activity activity) {        Intent it = new Intent(Intent.ACTION_GET_CONTENT);        it.setType("image/*");        activity.startActivityForResult(it, PICK_REQUEST);    }

2.调用系统相机拍照

    

     

/**     * 调用系统照相,照相数据存储在uri文件中     *  uri 要考虑Android系统版本的uri存储方式改变     * @param activity     * @param uri     */    public static void takePicture(Activity activity, Uri uri) {        Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        it.putExtra(MediaStore.EXTRA_OUTPUT, uri);        activity.startActivityForResult(it, TAKE_REQUEST);    }

3.接收回传数据,跳转到图片剪切界面

protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == RESULT_OK && requestCode == ImageUtils.PICK_REQUEST) {            Uri uri = data.getData();            toCopper(uri);        } else if (resultCode == RESULT_OK && requestCode == ImageUtils.TAKE_REQUEST) {            toCopper(takeUri);        } else if (resultCode == RESULT_OK && requestCode == ImageUtils.CROPPER_REQUEST) {            Bitmap bitmap = data.getParcelableExtra("data");            ImageView imageView = (ImageView) findViewById(R.id.imageView);            imageView.setImageBitmap(bitmap);        }    }

4.第三方剪切库的调用方式

    参加系统Crooper的调用方式,封装的CropperActivity 。

 private void toCopper(Uri uri) {        Intent intent = new Intent("com.edmodo.cropper.action_crop");        intent.putExtra("uri", ImageUtils.getPath(this, uri));        intent.putExtra(CropperActivity.ASPECTRATIOX, 1);//裁剪框比例        intent.putExtra(CropperActivity.ASPECTRATIOY, 1);        intent.putExtra(CropperActivity.OUTPUTX, 300);//输出图片大小        intent.putExtra(CropperActivity.OUTPUTY, 300);        startActivityForResult(intent, ImageUtils.CROPPER_REQUEST);    }


5.CropperActivity

 

package com.edmodo.cropper;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.Window;import android.widget.Button;import com.edmodo.cropper.util.ImageViewUtil;/** * Created by Administrator on 2015/8/2. */public class CropperActivity extends Activity {    private CropImageView mCropImageView;    private Button buttonCancel;    private Button buttonOk;    private Button buttonRotate;    public static final String ASPECTRATIOX = "aspectRatioX";    public static final String ASPECTRATIOY = "aspectRatioY";    public static final String OUTPUTX = "outputX";    public static final String OUTPUTY = "outputY";    private int mAspectRatioX = 1;    private int mAspectRatioY = 1;    private int mOutputX = 300;    private int mOutputY = 300;    private int degree = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.copper_activity_layout);        initWidget();        getIntentData();        initCropperView();    }    private void initWidget() {        mCropImageView = (CropImageView) findViewById(R.id.cropper_imageView);        buttonOk = (Button) findViewById(R.id.button_ok);        buttonCancel = (Button) findViewById(R.id.button_cancel);        buttonRotate = (Button) findViewById(R.id.button_rotate);        buttonOk.setOnClickListener(okClickListener);        buttonCancel.setOnClickListener(onCancelClickListener);        buttonRotate.setOnClickListener(rotateClickListener);    }    private void getIntentData() {        Intent intent = getIntent();        mAspectRatioX = intent.getIntExtra(ASPECTRATIOX, 1);        mAspectRatioY = intent.getIntExtra(ASPECTRATIOY, 1);        mOutputX = intent.getIntExtra(OUTPUTX, 1);        mOutputY = intent.getIntExtra(OUTPUTY, 1);    }    private void initCropperView() {        //设置剪切形状的宽高比        mCropImageView.setFixedAspectRatio(true);        mCropImageView.setGuidelines(0);        String uri = getIntent().getStringExtra("uri");        mCropImageView.setImageBitmap(ImageViewUtil.getBitmapFromUri(uri));        mCropImageView.setAspectRatio(mAspectRatioX, mAspectRatioY);    }    private View.OnClickListener rotateClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {            degree = +90;            if (degree == 360) {                degree = 0;            }            mCropImageView.rotateImage(degree);        }    };    private View.OnClickListener okClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {            //返回剪切后的bitmap            Intent it = new Intent();            it.putExtra("data", getScaledBitmap(mCropImageView.getCroppedImage()));            setResult(RESULT_OK, it);            finish();        }    };    private View.OnClickListener onCancelClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {            finish();        }    };    /**     * scale bitmap to the require width and height     *     * @param bitmap     * @return     */    private Bitmap getScaledBitmap(Bitmap bitmap) {        if (bitmap.getHeight() > mOutputY || bitmap.getWidth() > mOutputX) {            return bitmap.createScaledBitmap(bitmap, mOutputX, mOutputY, false);        } else {            return bitmap;        }    }}
说明:CropperActivity 是对开源库com.demodo.cropper的封装;
      界面功能的定制化需要重写<span style="font-family: Arial, Helvetica, sans-serif;">CropperActivity类 </span>
  
效果图:
</pre><pre name="code" class="java">
<img src="http://img.blog.csdn.net/20150808175739544?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="360" height="640" alt="" />      <img src="http://img.blog.csdn.net/20150808175946730?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="360" height="640" alt="" />



0 0