更新:我正在向 OP 提供用于通过 JavaScript 加载图像的工作代码。该示例有两个图像,一个具有直接嵌入在 HTML 中的数据 URI,另一个具有由 Ajax 回调在下载包含 base64 图像数据的文本文件后构造的数据 URI。请注意
- 空白在 URL 中正式不安全/不受支持,因此我提前从文本文件中的 base64 数据中删除了空白/换行符。您可以通过添加以下行来修改我的代码以在 JavaScript 中执行此操作
base64img = base64img.replace(/\s+/g, '');
- 查看此链接时,您应该会看到两张图片:http: //www.codelib.net/2013/7-9/example.html
- 我的示例为 Ajax 等使用了一些非常精简的库函数,但我不建议您使用它们。您自己的功能应该也能正常工作。
- 我的示例中的结果适用于最新版本的 Opera、Chrome、Firefox、Safari 和 Internet Explorer(包括版本 8)。
- 尽管您正在加密和解密您的数据,但原则上显示图像的工作原理是一样的。但是,我建议您查看解密数据,以确保您的解密算法在所有浏览器中都能正常工作,如果您仍然无法正常工作。
构建数据 URI 的正确方法很重要。目前所有主流浏览器的最新版本都支持正确格式的数据 URI。听起来您正在根据您的评论使用正确的 URI 方案,但是查看您的代码将帮助其他人或我自己诊断正在发生的事情。
您是使用二进制数据形成数据 URI 还是将其保留为 base64 编码?将其保留为 base64 编码可能是必要的,以避免某些浏览器试图将二进制数据解释为 Unicode 字符值。您的图像src
应该类似于下面的示例,但我只看到您的问题中的,
而不是前面;base64
的,这就是为什么我想知道您是否使用 base64 编码的 URL,它比尝试使用二进制数据更安全(即使它由 JavaScript 生成):
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==
也许您需要的只是;base64
在逗号之前提供缺失的内容,然后它应该可以工作。Internet Explorer 从版本 8 开始就支持这样的数据 URI,在版本 9 中提供了更好的支持。谷歌浏览器肯定支持这种类型的图像。
请注意,用户仍然可以毫无问题地保存图像(我只是尝试保存数据图像,即使在 Internet Explorer 10 中也与保存普通图像没有什么不同)。即使您禁用右键单击,人们仍然可以打开文档检查器或其等效项,并通过检查页面资源来保存图像。您可以绘制到画布元素,但即便如此,用户仍然可以截屏并获得图像的逐像素渲染。