欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android压缩工具类,android工具类,import andro

来源: javaer 分享于  点击 39000 次 点评:48

Android压缩工具类,android工具类,import andro


import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Environment;import android.text.TextUtils;import android.util.Log;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import utils.ImageRotateUtil;/** * Created by pengkv on 15/12/2. * 图片压缩工具类 */public class ImageCompressUtil {    private static List<String> mImageList = new ArrayList<>();// 临时图片集合    private static String mImagePath = ""; // 单个临时图片    public static String cachePath = "";    public static int reqWidth = 320;    public static int reqHeight = 480;    //压缩单张图片方法    public static void compressImage(final Context ctx, final String filePath, final ProcessImgCallBack callBack) {        mImagePath = "";//清空路径        new Thread(new Runnable() {            @Override            public void run() {                //如果路径是图片,则进行压缩                if (isImage(filePath)) {                    mImagePath = compress(ctx, filePath);                }                callBack.compressSuccess(mImagePath);            }        }).start();    }    //压缩图片集合方法    public static void compressImageList(final Context ctx, final List<String> fileList, final ProcessImgListCallBack callBack) {        mImageList.clear();//清空集合        if (fileList == null || fileList.isEmpty()) {            callBack.compressSuccess(mImageList);            return;        }        new Thread(new Runnable() {            @Override            public void run() {                String tempPath = "";                for (String imagePath : fileList) {                    if (isImage(imagePath)) {                        tempPath = compress(ctx, imagePath);                        mImageList.add(tempPath);                    }                }                callBack.compressSuccess(mImageList);            }        }).start();    }    //图片压缩的方法    public static String compress(Context ctx, String filePath) {        if (TextUtils.isEmpty(filePath))            return filePath;        File file = new File(filePath);        if (!file.exists())//判断路径是否存在            return filePath;        if (file.length() < 1)//文件是否为空            return null;        File tempFile = getDiskCacheDir(ctx);        String outImagePath = tempFile.getAbsolutePath(); // 输出图片文件路径        int degree = ImageRotateUtil.getBitmapDegree(filePath); // 检查图片的旋转角度        //谷歌官网压缩图片        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(filePath, options);        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);        options.inJustDecodeBounds = false;        Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);        // 旋转:这步处理主要是为了处理三星手机拍的照片        if (degree > 0) {            bitmap = ImageRotateUtil.rotateBitmapByDegree(bitmap, degree);        }        // 写入文件        FileOutputStream fos;        try {            fos = new FileOutputStream(tempFile);            bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos);            fos.flush();            fos.close();            bitmap.recycle();        } catch (FileNotFoundException e) {            e.printStackTrace();            return filePath;        } catch (Exception e) {            e.printStackTrace();            return filePath;        }        return outImagePath;    }    /**     * 计算压缩比例值     * 按照2、3、4...倍压缩     *     * @param options   解析图片的配置信息     * @param reqWidth  所需图片压缩尺寸最小宽度     * @param reqHeight 所需图片压缩尺寸最小高度     * @return     */    public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {        final int picheight = options.outHeight;        final int picwidth = options.outWidth;        Log.i("--->", "原尺寸:" + picwidth + "*" + picheight);        int targetheight = picheight;        int targetwidth = picwidth;        int inSampleSize = 1;        if (targetheight > reqHeight || targetwidth > reqWidth) {            while (targetheight >= reqHeight &amp;&amp; targetwidth >= reqWidth) {                inSampleSize += 1;                targetheight = picheight / inSampleSize;                targetwidth = picwidth / inSampleSize;            }        }        Log.i("--->", "最终压缩比例:" + inSampleSize + "倍/新尺寸:" + targetwidth + "*" + targetheight);        return inSampleSize;    }    //图片集合压缩成功后的回调接口    public interface ProcessImgListCallBack {        void compressSuccess(List<String> imgList);    }    //单张图片压缩成功后的回调接口    public interface ProcessImgCallBack {        void compressSuccess(String imgPath);    }    /**     * 获取文件后缀名     *     * @param fileName     * @return 文件后缀名     */    public static String getFileType(String fileName) {        if (!TextUtils.isEmpty(fileName)) {            int typeIndex = fileName.lastIndexOf(".");            if (typeIndex != -1) {                String fileType = fileName.substring(typeIndex + 1).toLowerCase();                return fileType;            }        }        return "";    }    /**     * 判断是否是图片     *     * @param fileName     * @return 是否是图片类型     */    public static boolean isImage(String fileName) {        String type = getFileType(fileName);        if (!TextUtils.isEmpty(type) &amp;&amp; (type.equals("jpg") || type.equals("gif")                || type.equals("png") || type.equals("jpeg")                || type.equals("bmp") || type.equals("wbmp")                || type.equals("ico") || type.equals("jpe"))) {            return true;        }        return false;    }    /**     * 将压缩后的图片存储在缓存中     */    public static File getDiskCacheDir(Context ctx) {        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())                || !Environment.isExternalStorageRemovable()) {            cachePath = ctx.getExternalCacheDir().getPath();        } else {            cachePath = ctx.getCacheDir().getPath();        }        String uniqueName = System.currentTimeMillis() + "_tmp.jpg";        return new File(cachePath + File.separator + uniqueName);    }    /**     * 清理缓存文件夹     */    public static void clearCache(Context ctx) {        File file = new File(cachePath);        File[] childFile = file.listFiles();        if (childFile == null || childFile.length == 0) {            return;        }        for (File f : childFile) {            f.delete(); // 循环删除子文件        }    }    /**     * 从图片路径读取出图片     *     * @param imagePath     * @return     */    private Bitmap decodeFile(String imagePath) {        Bitmap bitmap = null;        try {            File file = new File(imagePath);            BitmapFactory.Options options = new BitmapFactory.Options();            options.inJustDecodeBounds = false;            FileInputStream fis = new FileInputStream(file);            bitmap = BitmapFactory.decodeStream(fis, null, options);            fis.close();        } catch (IOException e) {            e.printStackTrace();        }        return bitmap;    }}
相关栏目:

用户点评