起因

通常在qml中,Image控件的source属性赋值,都是使用“qrc:/path/../xxx.png”的方式内嵌的qt的资源系统,今天发现一种新的写法:

Image {
    source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}

查阅资料,这种方式,是把一张图片(一般小图片)使用base64转码工具转换为一段字符串,内嵌到代码里边;
其中"data:image/png;base64,"分别指定了图片文件的MIME类型和编码格式。

什么是base64

(1)有这样一个数组,长度为64,存放64的字符,字符由大写AZ和小写az,还有数字0~9,以及'+'和'/组成;
(2)此时,有一个png图片,假设长度为3个字节(24个bit),把它按照6个bit一组,可以分为4组;
(3)6个bit能组成的最大值为64,也就说每组根据组成的值,都可以作为数组下标,在上面数组中找到一个对应的字符;
(4)如此,这个3个字节的图片数据,就转为成了4个字节的字符串,即base64的编码;
(5)不足3个字节的数据,转换后缺少的部分用‘=’补充,比如“QQ==”;
总结:简单来说,就是按照自定义的规则,对二进制数据的一种抽象解释;也可以修改规则,比如base32等;

为什么需要base64