1. 程式人生 > >Android ImageUtils 圖片工具類,包括:小米從相簿調影象空指標,三星旋轉照片,壓縮圖片,儲存Bitmap到本地,獲取本地視訊的縮圖,毛化玻璃效果,程式碼以後會更新

Android ImageUtils 圖片工具類,包括:小米從相簿調影象空指標,三星旋轉照片,壓縮圖片,儲存Bitmap到本地,獲取本地視訊的縮圖,毛化玻璃效果,程式碼以後會更新

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;
    }