Android 下壓縮圖片—微弱失真

來源:互聯網
上載者:User

標籤:android   style   blog   java   color   檔案   

Android下壓縮圖片的方法:

大概能將3M左右的圖片壓縮到100K左右, 幾乎不失真。 代碼如下:

import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.OutputStream;import android.graphics.Bitmap;import android.graphics.BitmapFactory;public class BitmapUtil {    /**     * 壓縮圖片之後儲存為檔案     *      * @param filePath     *            原始圖片的完整路徑     * @param storeImgPath     *            壓縮之後要儲存的圖片的完整路徑     * @return boolean     * @author Doraemon     * @time 2014年6月27日下午5:10:19     */    public static boolean saveCompressImg(String filePath, String storeImgPath) {        Bitmap bm = getSmallBitmap(filePath);        OutputStream stream = null;        try {            stream = new FileOutputStream(storeImgPath);        } catch (FileNotFoundException e) {            e.printStackTrace();        }        return bm.compress(Bitmap.CompressFormat.JPEG, 40, stream);    }    /**     * 根據路徑獲得突破並壓縮返回bitmap用於顯示     *      * @param imagesrc     * @return     */    private static Bitmap getSmallBitmap(String filePath) {        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(filePath, options);        // Calculate inSampleSize        options.inSampleSize = calculateInSampleSize(options, 480, 800);        // Decode bitmap with inSampleSize set        options.inJustDecodeBounds = false;        return BitmapFactory.decodeFile(filePath, options);    }    /**     * 計算圖片的縮放值     *      * @param options     * @param reqWidth     * @param reqHeight     * @return     */    private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {        // Raw height and width of image        final int height = options.outHeight;        final int width = options.outWidth;        int inSampleSize = 1;        if (height > reqHeight || width > reqWidth) {            // Calculate ratios of height and width to requested height and            // width            final int heightRatio = Math.round((float) height / (float) reqHeight);            final int widthRatio = Math.round((float) width / (float) reqWidth);            // Choose the smallest ratio as inSampleSize value, this will            // guarantee            // a final image with both dimensions larger than or equal to the            // requested height and width.            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;        }        return inSampleSize;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.