图片工具类,照相,相册,剪裁,uri转换为string地址,缩放图片

来源:互联网 发布:淘宝售前客服用语 编辑:程序博客网 时间:2024/05/17 23:40

创建的一个工具类

import android.app.Activity;import android.content.Context;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.provider.MediaStore;import android.support.v4.app.Fragment;/** * Created by Administrator on 2016/7/9. */public class ImageUtils {    private static final int ww = 480;    private static final int hh = 800;    //单例模式    private ImageUtils() {    }    private static ImageUtils instance = null;    public static ImageUtils getInstance(){        if (instance == null) {            instance = new ImageUtils();        }        return instance;    }    //判断调用者是Fragment还是Activity    private void startActivityForResult(Object object,int requestCode,Intent intent){        if(object instanceof Fragment){            Fragment fragment=(Fragment)object;            fragment.startActivityForResult(intent, requestCode);        }else if(object instanceof Activity){            Activity activity=(Activity)object;            activity.startActivityForResult(intent, requestCode);        }    }    //调用系统相机    public void getCameraPic(Uri uri,Object object) {        Intent intent = new Intent();        intent.setAction("android.media.action.IMAGE_CAPTURE");        intent.addCategory("android.intent.category.DEFAULT");        // 照完照片后要保存起来,        // 先获取外部储存卡的路径        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);        startActivityForResult(object,Consts.CAMEAR_REQUEST,intent);    }    //调用本地相册    public void getFilePic(Object object){        Intent intent = new Intent();        intent.setAction("android.intent.action.PICK");        intent.addCategory("android.intent.category.DEFAULT");        intent.setType("image/*");        startActivityForResult(object,Consts.OPEN_PHOTO,intent);    }    //调用系统截取图片的方法    public void crop(Uri uri,Object object) {        Intent intent = new Intent();        intent.setAction("com.android.camera.action.CROP");        intent.addCategory("android.intent.category.DEFAULT");        intent.setDataAndType(uri, "image/*");        // 是否要裁剪        intent.putExtra("crop", true);        // x和y的宽高比        intent.putExtra("aspectX", 1);        intent.putExtra("aspectY", 1);        // 宽和高的像素        intent.putExtra("outputX", 250);        intent.putExtra("outputY", 250);        // 裁剪后的照片格式        intent.putExtra("outputFormat", "JPEG");        // 是否返回        intent.putExtra("return-data", true);        //因为需要裁剪后的照片,所以需要返回结果        startActivityForResult(object,Consts.CROP_PIC,intent);    }    //通过路径获取bitmap,并进行缩放    public Bitmap pathToBitmap(String filePath) {        if (filePath == null) {            return null;        }        BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);        int width = options.outWidth;        int height = options.outHeight;        float scale = 1f;        if (width > ww && width > height) {            scale = width / ww;        } else if (height > hh && height > width) {            scale = height / hh;        } else {            scale = 1;        }        options.inSampleSize = (int) scale;        options.inJustDecodeBounds = false;        bitmap = BitmapFactory.decodeFile(filePath, options);        return bitmap;    }    //uri转换为String地址    public static String uriToRealPath(Context context, Uri uri) {        Cursor cursor = context.getContentResolver().query(uri,                new String[]{MediaStore.Images.Media.DATA},                null,                null,                null);        cursor.moveToFirst();        String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));        return path;    }}

可以用Activity调用也可以用Fragment的调用

★★★注意在Fragment使用onActivityResult的方法的时候,要使用fragment.startActivityForResult(),不能使用activity,不然回传的时候接受不到值

这里使用的是Fragment,有两个地方进行请求,一个剪裁(flag==0),一个不剪裁(flag==1)

@Override    public void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        //相机传来的消息        if (requestCode == Consts.CAMEAR_REQUEST) {            if(flag==0){            //进行剪裁                imageUtils.crop(Uri.fromFile(saveFile),Fragment_me.this);            }else if(flag==1){            //为图片设置背景,讲将图片的地址转换为Bitmap并进行转缩放                meRelTitlebg.setBackground(new BitmapDrawable(imageUtils.pathToBitmap(saveFile.getPath())));            }        }        //剪裁图片        else if (requestCode == Consts.CROP_PIC) {            if(data!=null){                Bitmap bitmap = data.getParcelableExtra("data");                meIcon.setImageBitmap(bitmap);            }        }        //打开本地图册回传的消息        else if (requestCode == Consts.OPEN_PHOTO) {            if(data!=null){                if(flag==0){                //获取照相的图片路径                    Uri uri=data.getData();                    imageUtils.crop(uri,Fragment_me.this);                }else if(flag==1){                    Uri uri=data.getData();                    try {                    //通过uri获取图片路径                        String path = imageUtils.uriToRealPath(activity, uri);                        meRelTitlebg.setBackground(new BitmapDrawable(imageUtils.pathToBitmap(path)));                        //drawable解析uri转换为Drawable对象//meRelTitlebg.setBackground(Drawable.createFromStream(activity.getContentResolver().openInputStream(uri),null));                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        }    }
0 0
原创粉丝点击