短视频商城源码有时会面临一次性上传多个图片的问题,针对这一问题,分享一下关于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. 通过 http post 方式上传多张图片
  3. Android 上传图片到服务器(多文件上传)
  4. Android多点触控(图片的缩放Demo)
  5. Android 获取控件高度宽度三种方法,防止0的出现
  6. Android 使用FTP上传文件
  7. Android Bitmap精确缩放到指定大小
  8. android后台上传数据demo
  9. android中利用socket上传文件

随机推荐

  1. Android(安卓)N(SDK7.0)新特性
  2. android 保持屏幕长亮及解锁的方法
  3. android使用Intent操作拨打电话和发送短
  4. Android(安卓)Studio gradle插件版本和gr
  5. EXOPlayer居中播放,类似ImageView的CENTER
  6. android 获取进程名字
  7. android按钮main.xm_基础篇
  8. Android之checkbox使用
  9. test
  10. Android WebView图片显示问题