Android Bitmap、InputStream、Drawable、byte[]、Base64之间的转换关系

Android Image涉及相关转换(Bitmap、InputStream、Drawable、byte\[\]、Base64)。

复制代码
public class Utils {


    //将Bitmap转换成InputStream 压缩率 100表示不压缩、10表示压缩90%
    public InputStream bitmapInputStream(Bitmap bm, int quality) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, quality, baos);
        InputStream is = new ByteArrayInputStream(baos.toByteArray());
        return is;
    }


    // 将InputStream转换成Bitmap
    public Bitmap inputStreamBitmap(InputStream is) {
        return BitmapFactory.decodeStream(is);

    }

    // Drawable转换成InputStream
    public InputStream drawableInputStream(Drawable d) {
        Bitmap bitmap = drawableBitmap(d);
        return bitmapInputStream(bitmap, 100);
    }

    // InputStream转换成Drawable
    public Drawable inputStreamDrawable(InputStream is) {
        Bitmap bitmap = inputStreamBitmap(is);
        return bitmapDrawable(bitmap);
    }

    // Drawable转换成byte[]
    public byte[] drawableBytes(Drawable d) {
        Bitmap bitmap = drawableBitmap(d);
        return bitmapBytes(bitmap);
    }

    // byte[]转换成Drawable
    public Drawable bytesDrawable(byte[] b) {
        Bitmap bitmap = bytesBitmap(b);
        return bitmapDrawable(bitmap);

    }

    // Bitmap转换成byte[]
    public byte[] bitmapBytes(Bitmap bm) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }

    // byte[]转换成Bitmap
    public Bitmap bytesBitmap(byte[] b) {
        if (b.length != 0) {
            return BitmapFactory.decodeByteArray(b, 0, b.length);
        }
        return null;
    }

    // 将byte[]转换成InputStream
    public InputStream byteInputStream(byte[] b) {
        return new ByteArrayInputStream(b);
    }

    // 将InputStream转换成byte[]
    public byte[] inputStreamBytes(InputStream is) {
        String str = "";
        byte[] readByte = new byte[1024];
        int readCount = -1;
        try {
            while ((readCount = is.read(readByte, 0, 1024)) != -1) {
                str += new String(readByte).trim();
            }
            return str.getBytes();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // Drawable转换成Bitmap
    public Bitmap drawableBitmap(Drawable drawable) {
        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        return bitmap;
    }

    // Bitmap转换成Drawable
    public Drawable bitmapDrawable(Bitmap bitmap) {
        BitmapDrawable bd = new BitmapDrawable(bitmap);
        Drawable d = (Drawable) bd;
        return d;
    }

    //将Bitmap转换成Base64
    public String getImageStr(Bitmap bit) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bit.compress(Bitmap.CompressFormat.JPEG, 100, bos);//参数100表示不压缩104byte[] bytes=bos.toByteArray();
        return Base64.encodeToString(bos.toByteArray(), Base64.DEFAULT);
    }

    //将Base64转换成bitmap
    public Bitmap getImage(String str) {
        byte[] bytes;
        bytes = Base64.decode(str, 0);
        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    }

}
相关推荐
传奇开心果编程1 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
李游Leo4 小时前
《HarmonyOS 7 精准碰一碰跨设备协作开发实战》07:异常恢复、状态机与CrossDrop工程收尾【鸿蒙心迹】
android·harmonyos
方白羽7 小时前
Android APK安全防护
android·安全·apk
小黄人软件7 小时前
AndroidStudio老项目 macOS运行BlueTooth蓝牙串口助手(Android+Studio源码).rar
android·macos
00后程序员张7 小时前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
天神哥哥啊7 小时前
cocos联调注意事项-安卓
android
TDengine (老段)7 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
蓝速科技8 小时前
政务自助终端信创选型与无人值守落地方案
android·大数据·数据库·人工智能·科技·技术分享·政务
硫酸锌019 小时前
在手机上运行Python增量备份手机数据到PC电脑
android·windows·python
hai_android9 小时前
子 View 被压小时,如何向父容器"告状"?——MEASURED_STATE_TOO_SMALL 向上传递机制
android·kotlin·android jetpack