您的位置:首页 > 其它

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

2016-07-09 15:52 369 查看

创建的一个工具类

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();
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片