图片工具类,照相,相册,剪裁,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(); } } } } }
相关文章推荐
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- C#实现图片加相框的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- 一起动手编写Android图片加载框架
- C++实现读取图片长度和宽度