Android 图片先gzip压缩然后在Base64转成字符串

原创 2017年09月05日 09:30:59

图片用gzip解压,然后转为Base64

 public static String pngToString(File f1, File f2) throws Exception {

//第一个File是需要压缩的图片路径,第二个File是图片压缩后生成的一个文件路径
     //   InputStreamReader in = new InputStreamReader(new FileInputStream(f1), "UTF-8");
        FileInputStream in = new FileInputStream(f1);
        //使用GZIPOutputStream包装OutputStream流,使其具体压缩特性,最后会生成.gz压缩包
        // 并且里面有一个文件
        BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(f2)));
        System.out.println("开始写压缩文件...");
        int c;
        byte[] buf = new byte[1024];

        while ((c = in.read(buf, 0, 1024)) != -1) {
         /*
        * 注,这里是压缩一个字符文件,前面是以字符流来读的,不能直接存入c,因为c已是Unicode
         * 码,这样会丢掉信息的(当然本身编码格式就不对),所以这里要以UTF-8来解后再存入。
         *///out.write(String.valueOf((char) c).getBytes("UTF-8"));
            out.write(buf, 0, c);
        }
        in.close();
        out.close();
//        System.out.println("开始读压缩文件...");
//        //使用GZIPInputStream包装InputStream流,使其具有解压特性
//        BufferedReader in2 = new BufferedReader(new InputStreamReader(
//                new GZIPInputStream(new FileInputStream(f2)), "UTF-8"));
//        String s;
//        //读取压缩文件里的内容
//        while ((s = in2.readLine()) != null) {
//            System.out.println(s);
//        }
//        in2.close();

        //下面转Base64
        String base64 = null;
        InputStream in1 = null;
        try {
            in1 = new FileInputStream(f2);
            byte[] bytes = new byte[in1.available()];
            int length = in1.read(bytes);
            base64 = Base64.encodeToString(bytes, 0, length, Base64.DEFAULT);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return base64;

    }

onActivityResult获得的图片返回

 if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            final Uri selectedImage = data.getData();
            final String path = ImageUtils.getRealPathFromUri(getActivity(), selectedImage);

            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Log.e("Person", selectedImage + "     -----path" + path);   // content://media/external/images/media/789294


            Glide.with(this).load(selectedImage).bitmapTransform(new CropCircleTransformation(getActivity())).into(ivPersonPic);

            new Thread() {
                @Override
                public void run() {
                    super.run();
                    final String gzip = ContastUtils.IMAGE_PATH + "/" + System.currentTimeMillis() + ".gz";
                    File filep = new File(path);
                    final File fileg = new File(gzip);
                    String base = null;
                    try {
                        //  TypeConverter.zip(filep, fileg);

                        base = TypeConverter.pngToString(filep, fileg);//得到base64字符串
                        final String finalBase = base;
                        getActivity().runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Log.e("--------", gzip);

                            }
                        });
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }.start();


        }
版权声明:本文为博主原创文章,未经博主允许不得转载。

减小网络传输图片大小,使用gzip进行压缩

package com.servlet;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputS...
  • lsj19830812
  • lsj19830812
  • 2009年11月03日 14:14
  • 8151

每天一个linux命令(32):gzip命令

减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用...
  • u013651026
  • u013651026
  • 2018年01月15日 23:30
  • 51

Glide源码分析4 -- 缓存,编解码和网络请求

1. 概述和核心类在Glide源码分析 – request创建与发送过程一文中,我们谈到request最终通过GenericRequest的onSizeReady()方法进行,其中调用了engine....
  • u013510838
  • u013510838
  • 2016年08月07日 16:14
  • 2090

Android 通过Base64上传图片到服务器

之前做上传图片是采用HttpServlet上传,不过用了一下Base64上传图片后,感觉比HttpServlet方便很多,大家也可以跟着尝试一下。 前台图片处理:(传Bitmap对象即可) /*...
  • h7870181
  • h7870181
  • 2014年02月26日 14:35
  • 53890

微信端图片压缩转base64,然后转file形式上传

提交 //由于微信端上传是上传至微信服务器返回一个url 所以要定义一个list记录上传成功的文件 var kcidList = []; //记录已成功上传的id $(".upload-f...
  • In_God
  • In_God
  • 2017年06月27日 17:49
  • 2123

js图片转base64并压缩

js图片转base64 压缩
  • u012150301
  • u012150301
  • 2015年09月29日 17:35
  • 14907

Java Gzip类 - base64压缩和解压

Java Gzip类 - base64压缩和解压
  • csharp25
  • csharp25
  • 2016年11月17日 22:28
  • 3124

canvas实现图片尺寸等比压缩并转换为base64字符串

这里的img_this是一个img对象,首先我们先得到这个图片的宽高比,然后指定canvas的宽度为720,高度由之前的宽高比来定。这里指定了canvas的宽度为720后,将图片画在canvas里面后...
  • cczhumin
  • cczhumin
  • 2016年03月27日 09:56
  • 12934

JS前端上传图片、压缩、并且处理旋转问题,生成base64数据

简介JS前端上传图片、压缩、并且处理旋转问题,生成base64数据演示地址http://www.tkc8.com/test/pic/index.html代码https://github.com/big...
  • spring_cheng
  • spring_cheng
  • 2017年08月08日 09:23
  • 1455

图片转Base64并压缩,解压

###图片转Base64并压缩 首先需要Apache下的两个jar包                               commons-codec             commons...
  • qq_20545159
  • qq_20545159
  • 2016年11月26日 16:20
  • 2030
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 图片先gzip压缩然后在Base64转成字符串
举报原因:
原因补充:

(最多只允许输入30个字)