首页 > 代码库 > Android 下压缩图片—微弱失真

Android 下压缩图片—微弱失真

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