短视频商城源码有时会面临一次性上传多个图片的问题,针对这一问题,分享一下关于Android多图上传压缩算法的代码

/**     * 质量压缩方法     *     * @param image     * @return     */    private static Bitmap compressImage(Bitmap image) {             ByteArrayOutputStream baos = new ByteArrayOutputStream();        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);        int options = 100;        while (baos.toByteArray().length / 1024 > 100) {                 baos.reset();            image.compress(Bitmap.CompressFormat.JPEG, options, baos);            options -= 10;        }        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);        return bitmap;    }    /**     * 图片按比例大小压缩方法(根据路径获取图片并压缩)     *     * @param srcPath     * @return     */    private static Bitmap getImage(String srcPath) {             BitmapFactory.Options newOpts = new BitmapFactory.Options();        newOpts.inJustDecodeBounds = true;        Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空        newOpts.inJustDecodeBounds = false;        int w = newOpts.outWidth;        int h = newOpts.outHeight;        // 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为        float hh = 800f;// 这里设置高度为800f        float ww = 480f;// 这里设置宽度为480f        // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可        int be = 1;// be=1表示不缩放        if (w > h && w > ww) {     // 如果宽度大的话根据宽度固定大小缩放            be = (int) (newOpts.outWidth / ww);        } else if (w < h && h > hh) {     // 如果高度高的话根据宽度固定大小缩放            be = (int) (newOpts.outHeight / hh);        }        if (be <= 0)            be = 1;        newOpts.inSampleSize = be;// 设置缩放比例        // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了        bitmap = BitmapFactory.decodeFile(srcPath, newOpts);        return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩    }    /**     * 将压缩的bitmap保存到SDCard卡临时文件夹,用于上传     *     * @param filename     * @param bit     * @return     */    private static String saveMyBitmap(String filename, Bitmap bit) {             String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/chdd/";        String filePath = baseDir + filename;        File dir = new File(baseDir);        if (!dir.exists()) {                 dir.mkdir();        }        File f = new File(filePath);        try {                 f.createNewFile();            FileOutputStream fOut = null;            fOut = new FileOutputStream(f);            bit.compress(Bitmap.CompressFormat.PNG, 100, fOut);            fOut.flush();            fOut.close();        } catch (IOException e1) {                 e1.printStackTrace();        }        return filePath;    }    /**     * 压缩上传路径     *     * @param path     * @return     */    public static String compressImageUpload(String path) {             String filename = path.substring(path.lastIndexOf("/") + 1);        Bitmap image = getImage(path);        return saveMyBitmap(filename, image);    }    /**     * 清除缓存文件     */    public static void deleteCacheFile() {             File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/chdd/");        RecursionDeleteFile(file);    }    /**     * 递归删除     */    private static void RecursionDeleteFile(File file) {             if (file.isFile()) {                 file.delete();            return;        }        if (file.isDirectory()) {                 File[] childFile = file.listFiles();            if (childFile == null || childFile.length == 0) {                     file.delete();                return;            }            for (File f : childFile) {                     RecursionDeleteFile(f);            }            file.delete();        }    }
用法 //上传文件    public void postFileRequest(String url, Map params, ArrayList pathList, MyStringCallBack callback) {             Map files = new HashMap<>();        for (int i = 0; i < pathList.size(); i++) {                 String newPath = BitmapUtils.compressImageUpload(pathList.get(i).path);            files.put(pathList.get(i).name+i,new File(newPath));        }        mPost.url(url)                .files("files",files)                .build()                .execute(callback);    }

以上就是关于短视频商城源码,多图上传压缩算法的代码,更多相关信息,欢迎关注之后的文章
本文转载自网络,转载仅为分享干货知识,如有侵权欢迎联系云豹科技进行删除处理

更多相关文章

  1. Android(安卓)Bitmap 缩放 旋转 水印 裁剪操作
  2. Android(安卓)Bitmap详细介绍
  3. Android(安卓)照片压缩
  4. android 读取本地超大图片
  5. Android之glide加载图片圆角效果
  6. Android多点触控(图片的缩放Demo)
  7. Android(安卓)BitmapFactory.Options 介绍
  8. Android(安卓)ImageView.ScaleType说明
  9. android之Matrix

随机推荐

  1. 实现导航栏的左右滑动效果
  2. Android - Navigation
  3. android 开发技巧(13)--处理空列表
  4. Android基础知识总结(转载)
  5. 在Android中创建启动界面 编辑
  6. Ubuntu中编译Android(安卓)JellyBean 4.2
  7. (2) 搭建 Android 系统开发环境
  8. android 播放assets目录内的音乐,及使用Se
  9. YOLOv5-pytorch迁移至android
  10. Android RxJava与Retrofit与RecyclerView