Android ImageUtils 图片工具类,包括:小米从相册调图像空指针,三星旋转照片,压缩图片,保存Bitmap到本地,获取本地视频的缩略图,毛化玻璃效果,代码以后会更新
2017-04-07 10:14
1316 查看
package com.snyj.wsd.kangaibang.utils; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Matrix; import android.media.ExifInterface; import android.net.Uri; import android.provider.MediaStore.Images; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * Created by ruin on 2016/11/15. */ public class ImageUtils { //小米手机从相册调图空指针问题 public static Uri getPictureUri(android.content.Intent intent, Context context) { Uri uri = intent.getData(); String type = intent.getType(); if (uri.getScheme().equals("file") && (type.contains("image/"))) { String path = uri.getEncodedPath(); if (path != null) { path = Uri.decode(path); ContentResolver cr = context.getContentResolver(); StringBuffer buff = new StringBuffer(); buff.append("(").append(Images.ImageColumns.DATA).append("=") .append("'" + path + "'").append(")"); Cursor cur = cr.query(Images.Media.EXTERNAL_CONTENT_URI, new String[]{Images.ImageColumns._ID}, buff.toString(), null, null); int index = 0; for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { index = cur.getColumnIndex(Images.ImageColumns._ID); // set _id value index = cur.getInt(index); } if (index == 0) { // do nothing } else { Uri uri_temp = Uri .parse("content://media/external/images/media/" + index); if (uri_temp != null) { uri = uri_temp; } } } } return uri; } /** * 旋转照片 * * @param img * @param degree * @return */ public static Bitmap toturn(Bitmap img, int degree) { Matrix matrix = new Matrix(); matrix.postRotate(degree); /*翻转90度*/ int width = img.getWidth(); int height = img.getHeight(); img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true); return img; } /** * 读取照片exif信息中的旋转角度 * * @param path 照片路径 * @return角度 */ public static int readPictureDegree(String path) { int degree = 0; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; } } catch (IOException e) { e.printStackTrace(); } return degree; } //缩小图片 public static Bitmap smallImage(Bitmap bitmapOrg) { //获取这个图片的宽和高 int width = bitmapOrg.getWidth(); int height = bitmapOrg.getHeight(); //定义预转换成的图片的宽度和高度 int newWidth = 1200; // int newHeight = 960; //计算缩放率,新尺寸除原始尺寸 float scaleWidth = ((float) newWidth) / width; // float scaleHeight = ((float) newHeight) / height; // 创建操作图片用的matrix对象 Matrix matrix = new Matrix(); // 缩放图片动作 matrix.postScale(scaleWidth, scaleWidth); // 创建新的图片 Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true); //将上面创建的Bitmap转换成Drawable对象,使得其可以使用在ImageView, ImageButton中 return resizedBitmap; } //保存Bitmap到本地 public static void saveBitmap(Bitmap bm, String path) { File f = new File(path); if (f.exists()) { f.delete(); } try { FileOutputStream out = new FileOutputStream(f); bm.compress(Bitmap.CompressFormat.PNG, 90, out); out.flush(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
加点东西,选择本地视频的时候,获取视频的缩略图方法~
//获取视频缩略图 public static Bitmap getVideoThumbnail(String filePath) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(filePath); bitmap = retriever.getFrameAtTime(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); } finally { try { retriever.release(); } catch (RuntimeException e) { e.printStackTrace(); } } return bitmap; } /** * 毛化玻璃效果 * * @param context * @param radius 毛化程度(取值0-24) * @param sentBitmap 原图片 */ public static Bitmap blur(Context context, float radius, Bitmap sentBitmap) { Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); final RenderScript rs = RenderScript.create(context); final Allocation input = Allocation.createFromBitmap(rs, sentBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); final Allocation output = Allocation.createTyped(rs, input.getType()); final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setRadius(radius); script.setInput(input); script.forEach(output); output.copyTo(bitmap); return bitmap; }
相关文章推荐
- android 打开相机/打开相册(版本兼容)-获取照片,压缩100K一下保存到本地
- 图像获取(根据路径或从相册获取后从uri获取路径)、压缩(参数路径或Bitmap)、旋转角度、图像保存
- Android-->原生保存Bitmap(图片),压缩图片,创建图片缩略图和视频缩略图(任意大小)
- Android app中将图片保存到本地相册并自命名相册名的代码方法
- Android读取本地照片和视频相册实例代码
- Android本地图片或者网络图片高斯模糊效果(毛玻璃效果)图片模糊效果一行代码搞定
- Android本地图片或者网络图片高斯模糊效果(毛玻璃效果)图片模糊效果一行代码搞定
- Android本地图片或者网络图片高斯模糊效果(毛玻璃效果)图片模糊效果一行代码搞定
- 关于Android开发保存bitmap获取图片到本地方法
- Android图片工具类:获取Bitmap,压缩
- Android中图片处理(压缩 保存 显示 截屏 视图View转为图片Bitmap)函数工具类
- Android相机、相册获取图片显示(压缩)并保存到SD卡
- Android中相机拍摄照片,以及相册选择图片压缩上传(压缩后保存进SD中)(可用于修改头像等)
- Android 代码片段---从相册或相机获取图片保存并处理
- Android 保存bitmap图像到本地之后,相册查看不显示问题
- 史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码i
- Android图像处理之Bitmap 生成图片 解析 保存文件 获取 问题
- 史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码i
- Android保存照片到本地,并立即更新在相册显示
- Android开发之获取相册照片和获取拍照照片三之 图片旋转