欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 图片压缩与Bitmap转Base64编码/转File

程序员文章站 2022-03-04 17:21:21
...

图片压缩

/* @param path 图 片路径
     * @param quality 质量 0-100,100表示原图
     * @return
     */
    public static Bitmap losslessScale(String path,int quality){
        Bitmap bitmap = BitmapFactory.decodeFile(path);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        bitmap.compress(CompressFormat.JPEG, quality, baos);
        Log.e("哈哈","原始大小:" + baos.toByteArray().length);
        // 因为质量压缩不是可以无限缩小的,所以一张高质量的图片,再怎么压缩,
        // 最终size可能还是大于你指定的size,造成异常
        // 所以不建议循环压缩,而是指定quality,进行一次压缩就可以了
//        while (baos.toByteArray().length / 1024 > maxSize) {  
//            quality -= 10;  
//            baos.reset();  
//            bitmap.compress(CompressFormat.JPEG, quality, baos);  
//            Log.e("哈哈","过程中大小为:"  
//                    + baos.toByteArray().length);
//        }  
        bitmap.compress(CompressFormat.JPEG, quality, baos);  
        Log.e("哈哈","最终大小" + baos.toByteArray().length);
        Bitmap compressedBitmap = BitmapFactory.decodeByteArray(  
                baos.toByteArray(), 0, baos.toByteArray().length);  
        return compressedBitmap;  
    }

Bitmap转Base64编码

 /**
     * //将Bitmap转换成字符串
     * @param bitmap
     * @return
     */
    public String bitmapToString(Bitmap bitmap) {

        String string = null;
        ByteArrayOutputStream bStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, bStream);
        byte[] bytes = bStream.toByteArray();
        string = Base64.encodeToString(bytes, Base64.DEFAULT);
        return string;
    }

Bitmap转File文件

public static File compressImage(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
        int options = 100;
        while (baos.toByteArray().length / 1024 > 500) {  //循环判断如果压缩后图片是否大于500kb,大于继续压缩
            baos.reset();//重置baos即清空baos
            options -= 10;//每次都减少10
            bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
            long length = baos.toByteArray().length;
        }

        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date(System.currentTimeMillis());
        //图片名
        String filename = format.format(date);

        File file = new File(Environment.getExternalStorageDirectory(), filename + ".png");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            try {
                fos.write(baos.toByteArray());
                fos.flush();
                fos.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }

        Log.i("TAG", "compressImage: " + file);
        // recycleBitmap(bitmap);
        return file;
    }

    public static void recycleBitmap(Bitmap... bitmaps) {
        if (bitmaps == null) {
            return;
        }
        for (Bitmap bm : bitmaps) {
            if (null != bm && !bm.isRecycled()) {
                bm.recycle();
            }
        }
    }

相关标签: 开发语言