您的位置:首页 > 其它

图片用Base64 和 字符串相互转换 内存压缩 尺寸压缩 等比例压缩

2016-06-16 09:08 806 查看
图片下载   也可以 用  AsyncTask   见本人其他博客

 private Bitmap getBitmap(String uri) {

       InputStream is=null;

        try {

            URL file=new URL(uri);

            HttpURLConnection conn=(HttpURLConnection)file.openConnection();

            conn.setConnectTimeout(5000);

            conn.getContentLength();

            Log.i("文件长度", conn.getContent() + "");

           if(conn.getResponseCode()==200){

               //返回码 200 代表访问成功

               is=conn.getInputStream();

               bitmap= BitmapFactory.decodeStream(is);

               is.close();

           }

        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }finally {

            if(is!=null){

                try {

                    is.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

        return bitmap;

    }//转换为 bitmap     放在子线程里面   访问网络 不能放在主线程  会报异常

//图片Base64 转换为字符串   在子线程中可以用 handler  sendmessage 发送  在主线程接受 并转换为 bitmap 更改主线程

  private String ToString(Bitmap bitmap1){

        ByteArrayOutputStream b=new ByteArrayOutputStream();

        bitmap1.compress(Bitmap.CompressFormat.JPEG,100,b);

        byte [] bytes=b.toByteArray();

        String bit= Base64.encodeToString(bytes,Base64.DEFAULT);

        Log.i("图片字符串",bit);

        return bit;

    }

//字符串转换为 bitmap

private Bitmap toBitmap(String str){

    Bitmap bit=null;

    byte[] bitArray;

    bitArray=Base64.decode(str,Base64.DEFAULT);

    bit=BitmapFactory.decodeByteArray(bitArray,0,bitArray.length);

    return bit;

}

//按比例 压缩 图片尺寸  也可以改变图片大小  但是 有具体大小需求的话  不建议采用   有具体大小见下

 //按比例压缩图片

    private Bitmap changeSize(Bitmap b,int n){

        ByteArrayOutputStream out=new ByteArrayOutputStream();

        b.compress(Bitmap.CompressFormat.JPEG, 100, out);

        BitmapFactory.Options options=new BitmapFactory.Options();

        options.inSampleSize=n;//此处只能为偶数  奇数无效

        ByteArrayInputStream bis=new ByteArrayInputStream(out.toByteArray());

        Bitmap bit=BitmapFactory.decodeStream(bis,null,options);

        return bit;

    }

//按照具体内存大小 修改图片 不失真

 private Bitmap changeMapSize(Bitmap bit){

        double MaxSize =100.00;//图片允许最大空间

        ByteArrayOutputStream bos=new ByteArrayOutputStream();

        bit.compress(Bitmap.CompressFormat.JPEG,100,bos);

        byte [] b=bos.toByteArray();//字节

        //字节转换为 KB

        double mid=b.length/1024;//KB

        Bitmap bitmap1=null;

        if(MaxSize<mid){

       //图片超过规定大小

           double n=mid/MaxSize; //允许压缩倍数

           double newWidth = bit.getWidth() /n;

           double newHeight = bit.getHeight() / n;

           Matrix matrix=new Matrix();

           matrix.postScale(((float)newWidth)/bit.getWidth(),((float)newHeight)/bit.getHeight());

           bitmap1=Bitmap.createBitmap(bit,0,0,bit.getWidth(),bit.getHeight(),matrix,true);

       }

        getSize(bitmap1);

        return bitmap1;

    }

    private void getSize(Bitmap bitmap1) {

        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();

        bitmap1.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);

        double ww= byteArrayOutputStream.toByteArray().length/1024;

        Log.i("压缩后的大小",ww+"KB");

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息