【Data URI scheme 格式】src="data:image/png;base64,xxxx

DataURI是一种将小数据直接嵌入网页的技术,避免了外部文件加载,适用于文本、HTML、CSS、JavaScript及各种图片格式。本文介绍了DataURI的使用方法及支持的类型,包括base64编码的应用。

Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到浏览器的地址栏中并转到,就能看到它了。
在上面的Data URI中,data表示取得数据的协定名称,image/png 是数据类型名称,base64 是数据的编码方法, 逗号后面就是这个image/png文件base64编码后的数据。

 

目前,Data URI scheme支持的类型有:

data:,文本数据
data:text/plain,文本数据
data:text/html,HTML代码
data:text/html;base64,base64编码的HTML代码
data:text/css,CSS代码
data:text/css;base64,base64编码的CSS代码
data:text/javascript,Javascript代码
data:text/javascript;base64,base64编码的Javascript代码
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据  data:image/x-icon;base64,base64编码的icon图片数据

 

base64简单地说,它把一些 8-bit 数据翻译成标准 ASCII 字符,网上有很多免费的base64 编码和解码的工具,在目前,IE8、Firfox、Chrome、Opera浏览器都支持这种小文件嵌入。

### 3.1 PHP QRcode::png 生成的二维码图片无法显示在网页中的问题分析与解决方案 当使用 `PHP QRcode` 库中的 `QRcode::png()` 方法生成二维码时,若直接调用该方法输出图像数据到浏览器而未正确设置 MIME 类型或处理输出缓冲区,会导致网页中无法正常显示二维码图片。 在默认情况下,`QRcode::png()` 函数会将生成的 PNG 图像直接输出到浏览器。如果页面中包含其他 HTML 内容,或者没有显式地设置响应头为 `image/png`,则浏览器可能将其识别为文本内容而非图像内容,从而导致图片无法渲染[^2]。 #### 示例代码(错误写法): ```php <?php require_once('phpqrcode/qrlib.php'); QRcode::png('https://example.com', false, QR_ECLEVEL_H, 4); ?> ``` 上述代码虽然可以生成二维码图像,但如果嵌入在 HTML 页面中,由于未控制输出流和响应头,可能导致图像无法被正确解析[^1]。 --- ### 3.2 解决方案:通过独立脚本输出图像并使用 `<img>` 标签引用 推荐做法是将生成二维码的逻辑封装在一个独立的 PHP 文件中,并通过 `<img>` 标签引入该文件作为图像源。这样可确保浏览器接收到正确的 MIME 类型。 #### 正确示例代码: ```php // qrcode.php <?php require_once('phpqrcode/qrlib.php'); $data = 'https://example.com'; $errorCorrectionLevel = QR_ECLEVEL_H; $matrixPointSize = 4; header("Content-Type: image/png"); QRcode::png($data, false, $errorCorrectionLevel, $matrixPointSize); exit; ``` 然后在 HTML 页面中使用如下方式引用: ```html <img src="qrcode.php" alt="QR Code"> ``` 此方法确保了图像数据以正确的 `image/png` 响应类型返回给浏览器,避免因混合 HTML 输出而导致图像损坏或不显示的问题[^3]。 --- ### 3.3 使用 Base64 编码嵌入图像数据 另一种方式是将生成的二维码图像编码为 Base64 字符串,并以内联方式嵌入 HTML 的 `<img>` 标签中。这种方式适用于动态生成图像且无需单独请求的情况。 #### 示例代码: ```php <?php require_once('phpqrcode/qrlib.php'); $data = 'https://example.com'; $errorCorrectionLevel = QR_ECLEVEL_H; $matrixPointSize = 4; ob_start(); QRcode::png($data, false, $errorCorrectionLevel, $matrixPointSize); $imageData = ob_get_clean(); $base64Image = "data:image/png;base64," . base64_encode($imageData); ?> <img src="<?php echo $base64Image; ?>" alt="QR Code"> ``` 此方法通过 `ob_start()` 和 `ob_get_clean()` 捕获图像输出流,并转换为 Base64 数据 URI,随后可以直接插入网页中进行展示[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良之才-小良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值