`
coding1688
  • 浏览: 236722 次
  • 来自: 上海
社区版块
存档分类
最新评论

Base64编码的img,慎用

 
阅读更多

Base64编码的img介绍

在程序中用到了 xheditor 这个超文本编辑器,它在 FF/Chrome 下支持粘贴(Ctrl+V)剪贴板上的图片,但在 IE/Opera/Safari 下不行。

 

粘贴的图片,与我们平常的不一样,如下所示:

 

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAMGUlEQVRIiS3NeTTUi+IA8DnnvfPOue/87m2RLMNMY4Yxxk4KWcsSSpYkkWpqomeIpJQsWW9IRHYSckUTYxmzmH1hGgYzhrEO9bq920L3Vma+8/1Ov3/uOZ//P7CQX/4Z9vM/Y4x+SbFDXcGaELHGOT4OzedPDGRc7rwaVxkRmO118KKlebjh7vNY1GV7K6KzFcEZfckVneiCJrjjSQHul464xDrj41xtI2xQMXaYOAfL/OjgocIs3qP7vIpcWNjP/4iH7yoJOnzHE18U4EpOS3j9MEdadY9blDGcldSdHP+MeC7H1+2CpXkCxuyCDTLdyyHd2+6ah3WqrwPJxzHeER3ngE08aH/GwTrWySbJzyMjxD8vOjQvKqgkJqQ6MQJGtDCsCjtSddKz48KJuZr81fYHM9W5c7X5ssd50uq8npT4qtOBv57wq4kNKw33KzjukRt4KM0Dmx3onOqJi8OZRqIMIy1MYqyQcfa4KDvrKHtcCMY8BA0Px5gnOFkT3HCw5pggetYVYVHaZmflSmupsqFA1Vyy2FIqbyqcaywZupvcTYqnF6QP3r42mH1tNDeVmkdqTz7dQDhZEx9adMqP5GGbgEOeQcNPocyOmpl4Ge3z2PeL1/7dnnv/LxhpFIk1h0mKb641laoaC5QNBequivVnFYqmYtXTio8jTzf6GziVd2Zay9f6mmaay1d66hVtlaLqPHFN/lxrOaMksy057lHcyUxv1zMHjMMRxkEIeBDSPAhpFoZGnsKiTttaRuFQMEVNgbLu/kJL0cbz6tXuqsWOCmVHpbyjUtFZza+9P9nyYOppFbeuePFFk+L5E97jQmlz+XJvI+9R/nRzBacil1Fyp5kQd9v3MNHFLhKLOYFGHUfCg82Mww6YBpruC0eZwuYbS2fri6RPCpa6a2ZaH3CrcrmPChiVecO/5nTeITXeIDbcIDZlErvzb/TkZz7LJg09uCdpq2HXlEpbqsm5N/pup7Vfu5R97EiGr0eis10I3Oio4S4/g59DTPeFmhqcRsNh0/UlopoCSmF6VxaxKSUxNyr4ZpgfwcuV4O2WEnqUEHDkSojP1VC/eB83YoBXWnhgKfF8x73MzpybPfeyBovudd4kpXq7RaNNCc64BDwmHoeKRpmcwcDjsYhYlPF5rBmsPyelNf3iw8sxRC+n9BDfGyeDcs+dzoqJzI4/m50YH+PjedLjYIy/V5CjXZC9bQDeOgCHPWZl4Y0wDbWyyI+NastMfZAY25hypZVEKDjhe/eY+x3/Q8lOVhes4IkY48tWprCOW1crrpxpuUWqIJ6vyyCVJV3Jio2J8/HxtcG5IJBWBntRe3ehDHbjTUzwxsZ2JqaOpiYO+42c9hseMjK0/elfrrt+Crc+cD8usjwhsuyUf9258MbzESQH9GVL40xXbKYzBtaXf/Mh8XzZpXNEf69wvLWvGdx5zx4XQ0M3M7irOdzHBuuKRjqjzA9bYTywWE9rnDfe1g9vF+rk4mmO9EEgA9AW7kYGEfa4lEDvwujgF7evscpyXmYlDWenjN0jMfNIsKuezqewqDCMRSjaIgKHO+vkFOPgcM7tYFLgsTMeB6PdXcIPO7mjzf3xWLyhwSG0hYe1tZ2JqZeltS8GF2CJj3I55HMA5Wq03x+DJB493JGdOlicza8rU/3WtN7f/J7SBsuLDHqQeLYmmXg38lROVMSdiHCil2dq4LH69NTuwoIi4qXLwce8LBABeOuDZvDQQ26+dnaO5ggnuLkH0sIHiQm1xkc6uoTY4L0Rpn5Iwyg7y8Y04ifWyGcW5d3o8z/Z/TBOTdFwaW57OulZ5vU6IuFmUMBFV+ebIcHsusdz/X2jNY/i3A/5HkCctLc/gkAcs8W3lBb31T8JdXO13WNwyMj4sKFhMBodaW8b6WgTbGXuY2oQ62DdmpY096zp3UjvR1ovTFxfOlx0u+9ORjuJ2Pqfq7WExLshQen+vuzqR4svydLOrlM4nLexyXG0pRfczNlwX6yvd7CrgzsGabdnl4exscc+A39T41hH27yzURnhx6PsrQPgRk3/uTpRX/OBTvlIJ8Pmn1fL2qsmHv/KrSxilRcxywp7Mq8XR0U0JSctk8nv6Ix4J9dgc+QxE3gwCuVust/F1NDGcC/e4BfnfbvcDfcEIEzCDsDjHHC1JGJn/t2MsOMhSER5fBy7skLSWPuJOQTbGGp5Q2lX97Wt9DTL22qnG6unmmvZlb8+SowfLS35NiUj+fidRKDCzMxDEIhoBzy5qqy3suig8W6Xvf/2NtodjDAKNDGIwiKpVWXCjhZyaeGtkOBTSMRy72+chw8+MUdgH1k9n9m928yXW7SXvw/1qMmda/1ds0+bKPdzG5KubI5RudWPo9GWMRj0aUtU6lHvv2bE20szyUGenvt+OmFhHGODCkXuzz4ZsD42sEofFD9tJBfkxOOxrdeI0831m4MvYFrpiGZy+Buf8id7cJsz+Jk9+J5Gfkcb2Bwlc+uqBgrzhPVPik9HXbS3ScBj4mzRFRdjGlMvJrpYxVjBE+0xkWiTi252Iw8L3wto/xPQ1kb7Jc21TwgJZzGoqaYaVU8bDJylQzKaTkoHp8Z10yzNFOurhPk7m/JJQP/Ap69Q+obLCnvvZj2Mj74d4EFwtiS4WF73dsz0dSbYWyTgzKPQJg3XiW/51C9zgj+EI+/oL1dfdogelSS52Ly6mzbbXg2DFCxIPg7OjEMzHN0sRzPL0czx/ppmf5Gy/ssa+h9vbEcmZj0up+TfHM5Pb0s+l+njmORkkeqCJTlZ5gZ69N1J+51H3ZaLP0yzPoqHd17Tl3obZ1sqh3Ku1xOiZS3lMHCeA8nZulmWZnr8+8y4Zo6jUXCBBeHXWfbXGe4b1uBHAe0t49V7Wq+koXS0IL2TlNB4IbzjSoykIu8N+ZlmiqOViz/P8N7wKesjTzcordKGYnZJ1lRdcQvxtKylDKZXiSAVXzfP1spZmjmmVs4ClVz9gkC/KNQvigE5b1tMfUN78Xa0Z5XcttLXstjTIK4tpBVlDt299io7abQgbbQwY7gwg1GaScu/1p+ewLyfus3o2Rrp6E1PeD/cDtMvi/XLQr2Kp1OytHKmZo4BKNiAnK2Ts/Xz/B8LQmieD8xyNBLGF97QB2b/O2rPf0e63lOfq182qbqr5e0PXtfmC8pvTVRmc+6TBjISRm4TpmpyRBW3XmQkbDOew36sTOiXhZCKBy5ydEqWbp6lm+eASi6o5Orn+T+Ugh8LQv08H5CxIRkHkrE1k7Qv3MEvnFdfueQdwSuN4NUX+vMPlLaPlLY/XjZsdFUtPy1XNBdPVudQC1L+GOuAQasT0IoQWuKDS1xQxQUXeboFLqDkaBQsQMEFlXxQydcpeJCcC8nY2tcMrWRMO0ndEY3sCAa/cshb9N8+jT7bGuv6i/H800jbn7RnW9Snn0Y7PtO63lKawakRGLQ68fexKoRWBKCKDyxwdYs83SIPUHIBJReY5+zMjQMzLJ2MBUgZWilNM0n9wh34Jhj4zh/4yiH/yezdondv0bu/MLu/cnq3md0f6V2aSco2p1c7NQyD1iah1QlgiQ+uCP+2LABVfN0ib0fB2lGwtPNs7Tx7Z5qpnWbuvB7bkVA1r8e+iYY1E8M7Iso33qsd/oBGMPCdT94a7/kmJGsnKVucXkjO0EiHtLJRGKiWgOpJSD0BrYvBNRGwIgBWBMASH1ji65YFwBJfq+JpFzhaBRuYYwGz41oZUzvN0E7RdyaHv4uHvoko34WDO0LKd9Hgt4nB75IhjXREMz2qkVEBOR1cGIeBGxJwQwJuSqANCaieBNcndWsiYE2kWxWCayJwVQCs8IAlrm6RBy5wdfMcQM4G5ljaGSYgowHTNEBKBaRU3WsqMDWmldG0MzTNLF0rZwDzDN3COLjEhkFvpODma92GRLchAdSTuvVJ3bpYty7WqcWQWgypReC6EFwTQKtC/YoQWhLoFnnAAkc3zwGVbEjB1itYkHxcPzcOyscBJetvC2xQxYZWuPp1Pgx6KwXfSoFNCbApATYkgHoSUIsBtVi3MQFtiqFNMbghAtVCvVqkXxdBa0JoVQAt86Alnl4l0KsEPxYFPxb4P5Q8SMnTLfIAFQdQcXRLXHCZB67xoXX+/wMtBpikEJfRFAAAAABJRU5ErkJggg==" alt="眼睛" />

 

 

显示效果如下:


 

这就是所谓的 inline base64 image,经过测试发现它在 FF/Chrome/Opera/Safari/IE8/IE9 下正常显示,在 IE6/IE7 下不能显示。

 

下面是这种嵌入的图片数据格式简要说明:

 

data: URI定义于IETF标准的RFC 2397 

data: URI的基本使用格式如下: 

data:[<MIME-type>][;base64|charset=some_charset],<data> 

mime-type是嵌入数据的mime类型,比如png图片就是image/png。 

如果后面跟base64,说明后面的data是采用base64方式进行编码的 

 

 

对于 IE6/IE7 下不能显示这种嵌入图片的情况,下面的网站给出了一个用js+后台的解决方法:

http://dean.edwards.name/weblog/2005/06/base64-ie/

 

下面是我参考之后做的一个测试,发现 img.src 的如果太长的话,在 IE6/IE7 下就会出错,因为超过了 IE6/IE7 的最大 URL 长度,大约 2K(Maximum URL length is 2,083 characters in Internet Explorer 在IE中URL最大长度是2083字节)。因此这种方法不能解决所有的问题,谁能保证图片就这么小。

 

下面的代码,保存到 test.html 中,然后就可以在各个浏览器中正常显示了(但是如果换成上面的 img 代码就不行了)。

 

<img src="data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA////ALx8TgBSRD4AuLa4AIaBhgA+FQUAjlAtAN7a2gB5ZF4AtZ+MACIgJgBfLRYA
zZNwAJ50YQCmZj4AQSskAG1BKwCqh3gA1LmqAM7GyADy6+oAoJ6hABwTDABfWV0AgVhGADo5OgBp
TUUAy4paAJmQkAAzHBcAf3JuAJV9cgB8TDQAVE5SALejngCve2MAqHNSAMm8uADDsKwAUi8hALRx
RQCqlJAA287MAPr09QC+hWEAmIOAAOTj5QCKY0wAsKywAGxZVgCUWTcAs4htAD8jFgBXJg0AeFtQ
AGA+KwCBenwAe0coADUnJwDBopAAcEk4AIdVOwDCwMIATygXAI6KjwA0MDQAq6KlALCQfgB1aWgA
lnpnAKmbmwBeT00AW0pAANDOzwDW1NYAhnNmACwjIwDHtKMA8PDzAEhCQACrbEUAinp3AKZ4XAA5
Fw0AZVVRAJ+OiQCilpQAQzo6AGhJPADFtbMAazwkAMWKYwCib00A6ujpAJiKhgC8vLwArXVZAMWU
cABuX1sARCkdALuysgA6LCoAfmlhAGZbWwCITCsAtI54AMG6twCwoZ4A/vr6AMfDxgDg3eAA3dTX
ALl7VABqQTEAp6CgAJOMigCaclwATj89AMjBwAC4dUgAh3x8AO7s7wDZ0tAAsrC0AJWSlACFcGsA
xry9AL61twCtmI0AeWhkAMWGXwBUKRUAz8zKALaxsACdlZIAzMPEAMeyqQB1ZmEA+fn5AMC0sgA4
HRcAfVlJAKaTjQD19PUApZmZAJJ4aQApJiUA1NHTANLHygDIxcoAal1XAKt9YgDx7+4ARSYaAHlL
MQDXzcsAu7i7AH1QNQC1s7QAmI2JAPj28gDs6uwAq5WLAP38/QDi3N0AMzM2AMW+wADIv7oAqp6d
AKWVkgCNeXUA0s7MALmytQCQjJEA2s/RANjMzgDRxccAvLm+ALyxrwCJgoUAsbCxAH5oXgCCcWsA
9/f4AO7s6wDe3t4A3NjZAM/MzQDEwcQAxry6AJd7cQDOxMYAvry+AHtqZACai4kANTIzANrRzgDI
xccAqqSkAPHw8QDT0dEAwLW4AK1rRQB7ZF8AnZOSAP7+/gD9+/sA+fX2AKmfngD+/f0A4dvdAG1A
KgCyr7EAk3dpAOzq6wDp6OkAz8zOAMbDxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAjBkhET0qwAGkxpTZ2kvTr3tyDDYGjavQncGulrJvlbG5G0CEVCh1K3pK1UExva2wz8yaZB4+
DSB8L8lgBD+AsM5SEGZC1MsOaAVu17yfc2XOHU3EWFsHJL+RQ6cUynnHzhYLpkkzD2ESkid/iEcu
nM61GpM4KRwtmFPWObTDCRXOfVAXnngCXCWbMFUiY4rSyBg7NTppUYNxXU6pRQOHAdh2WTyJo0Rq
NGIKdIJIuwGQMo4TLAEBAQGhI6p+zQEBzr43gSalXqK4T3BXwpkBAc4B0WePWmyzhmtfH4UBAQHO
AQHFVrdMRraXoG0BAQEBAc7OzosIrKh3us7Ozs7OzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" height="16" width="16" border="0">
<script type="text/javascript">
//alert(navigator.userAgent);
if (/MSIE [67]/.test(navigator.userAgent)) {
	//alert("sss");
  	// a regular expression to test for Base64 data
	var BASE64_DATA = /^data:.*;base64/i;
	// path to the PHP module that will decode the encoded data
	var base64Path = "http://dean.edwards.name/my/base64.php";
	function fixBase64(img) {
		// check the image src
		//alert(img.src);	// IE6: 错误:无效指针
		//alert(img.getAttribute("src"));	// IE6: 错误:无效指针
		try {
			if (BASE64_DATA.test(img.src)) {
				// pass the data to the PHP routine
				//alert("xxx");
				img.src = base64Path + "?" + img.src.slice(5);
			}
		} catch (ex) {
			alert("内嵌图片可能太大了,无法显示");
		}
	};
	// fix images on page load
	onload = function() {
		//alert("onload "+document.images.length);
		for (var i = 0; i < document.images.length; i++) {
			fixBase64(document.images[i]);
		}
	};
}
</script>

 

上面这个解决方法肯定是不完美的。还有人提出了一种更完美的方案。就是用一堆 JS 去解码 base64 的数据、然后对图像处理、去生成图片。这种方式好繁琐。

 

个人观点:

在目前情况下,在互联网中 IE6 还占有相当大的份额的情况, base64 image 最好还是不用的好;但是在移动互联网中,大部分浏览器都支持 html5,可以尝试使用。因此,如果碰到在超文本编辑器中提交的图片是 base64 格式的,那么就应该进行处理,提取出该数据(img.src),然后 base64 解码,保存成对应的图片,并将 img.src 设置成文件。

 

参考资料:

 

在浏览器中解析Base64编码图像

http://hi.baidu.com/sonan/blog/item/54ab0a4f690e1025aec3ab86.html

 

BASE64编码的图片在网页中的显示问题的解决

http://staratsky.iteye.com/blog/314651

 

Base64 Encoded Images for Internet Explorer

http://dean.edwards.name/weblog/2005/06/base64-ie/

http://dean.edwards.name/my/base64-sordid.html

http://dean.edwards.name/my/base64-sexy.html

 

HTTP Get请求URL最大长度

http://www.4ucode.com/Study/Topic/1080587

 

IE6.0                :url最大长度2083个字符,超过最大长度后无法提交。

IE7.0                :url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2083个字符。

firefox 3.0.3     :url最大长度7764个字符,超过最大长度后无法提交。

Opera 9.52       :url最大长度7648个字符,超过最大长度后无法提交。

Google Chrome 2.0.168   :url最大长度7713个字符,超过最大长度后无法提交。

 

 

 

 

 

  • 大小: 3.1 KB
3
0
分享到:
评论

相关推荐

    labview 图片缩放 base64编码base64解码

    在这个特定的场景中,我们关注的是如何在LabVIEW中处理图片,包括图片的缩放、Base64编码和解码。 1. **图片缩放**: 在LabVIEW中,你可以使用图像处理库来实现图片的缩放功能。这个库提供了各种图像操作函数,...

    易语言汇编base64编码

    Base64编码的基本原理是将每3个8位字节(24位)的数据转换成4个6位的十六进制数字,每个6位对应一个字符,这些字符来自于Base64的字符集,包括大小写字母、数字以及"+"和"/",末尾不足四位的数据用"="进行填充。...

    js 显示base64编码的二进制流网页图片

    第二种则是使用Data URI scheme直接在&lt;img&gt;标签中嵌入Base64编码后的图片数据,如下所示:&lt;img src="data:image/gif;base64,R0lGODlhAgACAIAAAP///wAAACwAAAAAAgACAAACAoRRADs=" /&gt;。这种方式可以节省HTTP请求,但...

    Base64编码解码工具

    这个压缩包中的"Base64"文件应该是一个工具程序,用户无需安装,解压后直接运行即可对Base64文本进行编码和解码操作。这样的工具对于开发者、网络管理员或者需要处理Base64数据的用户非常方便,他们可以直接通过这个...

    Base64编码解码工具V1.5

    编码时,6位二进制转换为对应的Base64字符,不足的位用0补足,最后根据填充的0的数量在结果后面添加等于号"="。 描述中提到的"Base64编码解码工具V1.5"是一款实用软件,能够帮助用户对Base64编码的数据进行解码。在...

    Base64编码解码工具成品+源码

    Base64编码是一种在网络上传输二进制数据的文本编码方式,主要应用于电子邮件、网页编码等领域,确保数据在传输过程中的安全性和可读性。它将任意二进制数据转换成可打印的ASCII字符,避免了非ASCII字符在传输过程中...

    java和js相互base64编码解码

    在IT行业中,Base64是一种常见的数据编码方式,它将任意二进制数据转换为可打印的ASCII字符,常用于在网络上传输包含非ASCII字符的数据,如图片或PDF等。在Java和JavaScript中,Base64编码和解码是两个重要的功能,...

    base64编码解码离线工具

    Base64编码是一种在网络上传输二进制数据时常用的编码方式,它将任意二进制数据转换成可打印的ASCII字符序列。这种编码方法最初是为了在电子邮件系统中传输非ASCII字符而设计的,如今在很多场景下都有应用,如图片...

    C语言base64编码解码库

    在IT领域,Base64是一种常见的编码方式,用于将二进制数据转化为可以在电子邮件系统、文本文件等中安全传输的ASCII字符串。C语言是编程语言的基础,被广泛应用于系统编程和嵌入式开发,因此一个C语言实现的Base64...

    文件转换为Base64编码

    Base64编码是一种在互联网上常见的数据编码方式,主要用于在不支持二进制传输的环境(如邮件系统)中传输二进制数据。它将任意的二进制数据转化为可打印的ASCII字符序列,以便在文本格式下进行传输和存储。这种编码...

    Base64编码jar包

    6. **URL安全的Base64编码**:在某些场景中,你需要使用URL安全的Base64编码,这种编码不包含`+`和`/`字符,而是使用`-`和`_`。`javabase64-1.3.1.jar`可能提供了这种编码方式,具体实现取决于库的API。 注意,虽然...

    易语言 base64编码转图片 如何 提高转换速度.zip

    Base64编码将每3个字节的数据(24位)转化为4个6位的Base64字符,不足3字节的数据会用零填充,并在编码结果末尾添加额外的字符。解码时则逆向进行,将这4个6位的字符还原为原始的24位数据。 在易语言中,实现Base64...

    BASE64编码方法

    **BASE64编码方法** BASE64是一种广泛用于网络数据传输和存储的编码方式,它将任意二进制数据转换成可打印的ASCII字符序列。这种方法最初被设计用来在电子邮件系统中传输非ASCII字符,现在则被应用于各种场景,如在...

    Base64.zip_labview base64

    这个VI是用LabVIEW编写的,目的就是提供一个纯LabVIEW环境下的Base64编码解决方案。下面我们将详细探讨如何在LabVIEW中实现Base64编码以及这个VI可能的工作原理。 1. **Base64编码原理**: - Base64编码基于64个可...

    Base64编码解码器

    Base64编码是一种在互联网上广泛使用的数据编码方式,它将任意二进制数据转换成可打印的ASCII字符,主要用于在不支持二进制传输的环境下(如电子邮件)传输数据。这种编码方式将每3个字节的数据转换为4个6位的十六...

    二维码生成 图片Base64编码解码

    二维码生成和图片Base64编码解码是两个在IT领域中常见的操作,广泛应用于数据传输、网页设计和移动应用等领域。下面将详细讲解这两个主题。 首先,二维码(Quick Response Code)是一种二维条形码,可以存储更多的...

    将图片进行Base64编码后传输

    "将图片进行Base64编码后传输"是一种高效且便捷的方式,它允许我们直接将图片数据嵌入到文本格式中,方便在网络中传递。这种技术广泛应用于JSON API、HTML页面以及任何不支持二进制数据流的系统。 Base64是一种编码...

    Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)

    本篇将深入探讨如何在C/C++环境中,利用从Chromium库中提取的代码进行Base64的编码与解码。 首先,Base64编码的原理是将每3个字节(24位)的数据转换为4个6位的字符,然后将这4个6位字符对应到Base64的字符集(包括...

    QT图片BAse64编码与解码

    QT图片Base64编码与解码是C++编程中一种常见的技术,特别是在处理网络传输或者存储图片数据时。Base64是一种将二进制数据转换为可打印ASCII字符的编码方式,它通过特定的算法将每3个字节的数据转换为4个ASCII字符,...

    c++ base64 编码

    在IT领域,Base64是一种用于在网络上传输和存储非ASCII字符的数据编码方式。它将任意二进制数据转换为可打印的ASCII字符序列,主要应用于电子邮件、HTTP传输以及XML文档中。C++作为一门通用的编程语言,也支持Base64...

Global site tag (gtag.js) - Google Analytics