【发布时间】:2018-01-17 16:04:53
【问题描述】:
我注意到,如果您使用 base64 字符串表示 JPG 或 PNG 的原始字节,请调用此<B>,然后使用 either 将 datauri 发送到浏览器:
data:image/png;base64,<B>
或
data:image/jpeg;base64,<B>
所有四个组合都有效(我的意思是 Chrome 渲染它们),四个组合 <B> 是原始 png 图像或原始 jpeg 图像,并且数据 uri 使用 MIME 类型。
这是为什么? jpeg 和 png 的二进制编码不一样。我期待如果 <B> 是 png 的原始字节,jpeg datauri 将无法呈现,反之亦然。
【问题讨论】:
-
浏览器旨在尝试修复所有废话并从所有可能的错误中恢复(标记汤规则!)。从失败的图形格式解码中恢复看起来很容易,对图片进行基于签名的文件格式检测同样简单。
-
@ÁlvaroGonzález 如果是这样,为什么不能删除 dataURI MIME 类型包含?
-
强制无法声明内容类型有什么意义?数据 URI 可能包含任何1000+ MIME types,其中许多甚至无法使用基于签名的启发式方法可靠地检测到。这相当于在您的硬盘中的文件中没有文件扩展名。
-
@ÁlvaroGonzález 但在这种情况下,我强行告诉浏览器 MIME 类型,我预计会失败(在糟糕的情况下),但它“决定更进一步”并尝试其他 MIME类型?在我没有传递 MIME 类型的情况下,我可以使用基于签名的猜谜游戏,但在用户传递 MIME 的情况下则不行
-
这就是我的两个cmets的意思。你确实需要类型信息。但是当它出错时,浏览器会尝试提供帮助。
标签: data-uri