BitmapUtil(高效壓縮不失真)

來源:互聯網
上載者:User

標籤:

package com.changim.patient.app.utils;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.net.Uri;import android.provider.MediaStore;import android.view.Gravity;import android.widget.Toast;import java.io.File;/** * Created by zzw on 2016/2/23 0023. */public class ImageUtils {    /**     * 根據圖片的Uri得到它的路徑     *     * @param activity     * @param imageUri     * @return 返回null表示不能找到此圖片     */    public static String getImagePathFromImageUri(Activity activity, Uri imageUri) {        String[] filePathColumn = {MediaStore.Images.Media.DATA};        Cursor cursor = activity.getContentResolver().query(imageUri, filePathColumn, null, null, null);        if (cursor != null) {            cursor.moveToFirst();            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);            String imagePath = cursor.getString(columnIndex);            cursor.close();            if (imagePath == null || imagePath.equals("null")) {                Toast toast = Toast.makeText(activity, "不能發現圖片", Toast.LENGTH_SHORT);                toast.setGravity(Gravity.CENTER, 0, 0);                toast.show();                return null;            }            return imagePath;        } else {            File file = new File(imageUri.getPath());            if (!file.exists()) {                Toast toast = Toast.makeText(activity, "不能發現圖片", Toast.LENGTH_SHORT);                toast.setGravity(Gravity.CENTER, 0, 0);                toast.show();                return null;            }            return file.getAbsolutePath();        }    }    /**     * 根據圖片的路徑得到圖片資源(壓縮後)     * 如果targetW或者targetH為0就自動壓縮     *     * @param path     * @param     * @return 壓縮後的圖片     */    public static Bitmap getYaSuoBitmapFromImagePath(String path, int targetW, int targetH) {        BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(path, options);        int height = options.outHeight;        int width = options.outWidth;        int inSampleSize = calculateInSampleSize(options);        options.inSampleSize = inSampleSize;        options.inJustDecodeBounds = false;        Bitmap src = BitmapFactory.decodeFile(path, options);        if (src == null) {            return null;        }        Bitmap bitmap = null;        if (targetH == 0 || targetW == 0) {            bitmap = Bitmap.createScaledBitmap(src, width / inSampleSize, height / inSampleSize, false);        } else {            bitmap = Bitmap.createScaledBitmap(src, targetW, targetH, false);        }        if (src != bitmap) {            src.recycle();        }        return bitmap;    }    /**     * 計算壓縮比     *     * @param options     * @return     */    public static int calculateInSampleSize(BitmapFactory.Options options) {        int height = options.outHeight;        int width = options.outWidth;        int min = height > width ? width : height;        int inSampleSize = min / 400;        if (inSampleSize == 0)            return 1;        return inSampleSize;    }    /**     * 根據圖片的路徑得到該圖片在表中的ID     *     * @param cr     * @param fileName     * @return     */    public static String getImageIdFromPath(ContentResolver cr, String fileName) {        //select condition.        String whereClause = MediaStore.Images.Media.DATA + " = ‘" + fileName + "‘";        //colection of results.        Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media._ID}, whereClause, null, null);        if (cursor == null || cursor.getCount() == 0) {            if (cursor != null)                cursor.close();            return null;        }        cursor.moveToFirst();        //imageView id in imageView table.        String imageId = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID));        cursor.close();        if (imageId == null) {            return null;        }        return imageId;    }    /**     * 根據圖片的ID得到縮圖     *     * @param cr     * @param imageId     * @return     */    public static Bitmap getThumbnailsFromImageId(ContentResolver cr, String imageId) {        if (imageId == null || imageId.equals(""))            return null;        Bitmap bitmap = null;        BitmapFactory.Options options = new BitmapFactory.Options();        options.inDither = false;        options.inPreferredConfig = Bitmap.Config.ARGB_8888;        long imageIdLong = Long.parseLong(imageId);        //via imageid get the bimap type thumbnail in thumbnail table.        bitmap = MediaStore.Images.Thumbnails.getThumbnail(cr, imageIdLong, MediaStore.Images.Thumbnails.MINI_KIND, options);        return bitmap;    }    /**     * 獲得圓角圖片的方法     *     * @param bitmap 源Bitmap     * @param roundPx 圓角大小     * @return 期望Bitmap     */    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),                bitmap.getHeight(), Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(output);        final int color = 0xff424242;        final Paint paint = new Paint();        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());        final RectF rectF = new RectF(rect);        paint.setAntiAlias(true);        canvas.drawARGB(0, 0, 0, 0);        paint.setColor(color);        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        canvas.drawBitmap(bitmap, rect, rect, paint);        return output;    }}

 

BitmapUtil(高效壓縮不失真)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.