不管如何,图片的下载始终都要向服务器发出请求,要是图片的下载不用向服务器发出请求,而可以随着 HTML 的下载同时下载到本地那就太好了。而目前,浏览器已经支持了该特性,我们可以将图片数据编码成 BASE64 的字符串,使用该字符串代替图像地址。假设用 S代表这个 BASE64 字符串,那么就可以使用 <img src="data:image/png;base64,S"> 来显示这个图像。可以看出,图像的数据包含在了 HTML 代码里,无需再次访问服务器。那么图像要如何编码成 BASE64 字符串呢?可以使用 在线的工具---“Base64 Online”,这个工具可以上传图片将图片转换为 BASE64 字符串。当然,如果读者有兴趣,完全可以自己实现一个 BASE64 编码工具,比如使用 Java 开发,它的代码就如清单 7 所示。
public static String getPicBASE64(String picPath) { String content = null; try { FileInputStream fis = new FileInputStream(picPath); byte[] bytes = new byte[fis.available()]; fis.read(bytes); content = new sun.misc.BASE64Encoder().encode(bytes); // 具体的编码方法 fis.close(); } catch (Exception e) { e.printStackTrace(); } return content; }
本文编码了一个图像,并且将编码获得的 BASE64 字符串,写到了 HTML 之中,如下清单 8 所示。
<html> <body> <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAeQAAAB8BAMAAABKwt5QAAAAA3NCSVQICAjb4U/gAAAAGFBMVEX/ ……(省略了大部分编码)… BJRU5ErkJggg=="> </body> </html>
由于图片数据包含在了 BASE64 字符串中,因此无需向服务器请求图像数据,结果显示如下图所示。
然而这种策略并不能滥用,它适用的情况是浏览器连接服务器的时间 > 图片下载时间,也就是发起连接的代价要大于图片下载,那么这个时候将图片编码为 BASE64 字符串,就可以避免连接的建立,提高效率。如果图片较大的话,使用 BASE64 编码虽然可以避免连接建立,但是相对于图像下载,请求的建立只占很小的比例,如果用 BASE64,对于动态网页来说图像缓存就会失效(静态网页可以缓存),而且 BASE64 字符串的总大小要大于纯图片的大小,这样一算就非常不合适了。因此,如果你的页面已经静态化,图像又不是非常大,可以尝试 BASE64 编码,客户端会将网页内容和图片的 BASE64 编码一起缓存;而如果你的页面是动态页面,图像还较大,每次都要下载 BASE64 字符串,那么就不能用 BASE64 编码图像,而正常引用图像,从而使用到浏览器的图像缓存,提高下载速度。从现实我们接触的角度看,如一些在线 HTML 编辑器,里面的小图标,如笑脸等,都使用到了 BASE64 编码,因为它们非常小,数量多,BASE64 可以帮助网页减少图标的请求数,提高效率。
原创文章@java教程网 转载请标明出处
java教程网编辑发布:希望本系列的文章对你的个人成长和发展有帮助。
从java新手入门,开发工具到 Java进阶,高级编程,java教程网几乎囊括了java编程的所有方面的资料。
相关推荐
在现代Web应用中,图像处理是一项重要的任务,尤其是在前端领域,因为大图片会显著增加页面加载时间,影响用户体验。...理解这一过程的工作原理,以及如何在前端和后端实现,对于开发高性能的Web应用至关重要。
为了在Web页面上展示处理后的图像,可以将字节数组转化为Base64编码,嵌入到HTML的`<img>`标签中。同时,也可以将处理后的图像保存到服务器,提供一个链接供用户下载。 在Spring MVC框架中,我们可以创建一个...
- **简介**:Codec 是一个包含了多种常见编解码器的工具包,如 Base64、Hex、电话号码编码和 URL 编码等。 - **特点**: - 支持多种编码和解码方式。 - 提供了一组方便的方法来处理不同的编码需求。 - 可以简化与...
在进行Web开发时,我们经常会遇到使用HTML5的`canvas`元素处理图像的情况,特别是将图像转换成`base64`编码或者特定格式如JPEG。然而,在处理具有透明度的PNG图片时,可能会遇到一个问题:当`canvas`将PNG转换为JPEG...
可实现高效、高质量存储影像文档,同时支持自动校正、去黑边、获取BMP 位图(24 位)的Base64 编码数据、图像压缩、防伪水印、网页本地图像删除、图像列表生成、上传指定图片到服务器和支持拍摄多页TIF 多页PDF 生成...
在Web应用开发中,SVG(Scalable Vector Graphics)和CSS(Cascading Style Sheets)是两种关键的技术,用于创建图形和布局。SVG是一种基于XML的矢量图像格式,能够提供高质量、可缩放的图形,而CSS则用于定义网页的...
在Web应用中,可以直接将图像数据转换为Base64编码并返回给前端展示。 6. **优化与性能** 生成的验证码应该具有良好的可读性和安全性之间的平衡。过高的安全级别可能导致用户难以识别,而过低则容易被自动化程序...
通过以上讲解,我们可以看出"cropper头像裁剪(PC端)"这个项目涉及到了前端开发中的多个重要技术点,包括Canvas图像处理、Base64编码、AJAX通信以及用户体验设计等,这些都是构建交互式Web应用的关键技能。...
例如,创建一个`thumbnail.jsp`文件,接收图片URL和目标尺寸作为参数,然后返回缩略图的Base64编码或者URL。 总的来说,“ImageScale”算法是Java中处理图像缩略图的一种有效方法,它涉及到图像处理的基本原理和...
在Java编程环境中,实现截图功能是一项实用且常见的需求,尤其在开发桌面应用或者Web应用时。本篇文章将详细探讨如何利用Java技术栈实现这一功能,主要聚焦于`Jcrop`库在Spring MVC框架中的应用。 首先,`Jcrop`是...
在开发Web应用时,"js实现编辑用户头像"是一个常见的功能需求,它涉及到前端JavaScript技术和后台Java语言的配合。这个功能允许用户上传并编辑他们的个人头像,如裁剪、旋转、添加滤镜等,然后将处理后的图像保存到...
**正文** 在IT行业中,条形码是一种广泛应用于商品、文档和包裹跟踪的标识系统,它通过特定的...在实际开发过程中,确保遵循最佳实践,例如处理可能出现的异常,优化性能,并确保生成的条形码符合标准和可读性要求。
这需要将图片数据转化为可以在浏览器中显示的格式,如Base64编码。 7. 图片元数据:图片文件通常包含元数据,如EXIF信息,记录了拍摄时间、相机型号等。查看代码可能需要读取并显示这些信息。 8. 图像解码和编码:...
- **base64**:用于编码和解码Base64字符串。 - **struct**:处理二进制数据格式。 - **hashlib**:实现加密散列算法。 - **itertools**:生成高效的迭代器。 - **XML**:解析和生成XML文档。 - **HTMLParser**:...
11. **Base64图像处理**: `imgdemo`演示了Base64编码和解码在图片与文件之间的转换,常用于在HTTP协议中传递小体积的图像。 12. **Jackson**: `jacksondemo`展示了Jackson库在JSON序列化和反序列化中的应用,是Java...
- **Base64**:这是一个编码算法,常用于将二进制数据转换成ASCII字符,以便在网络上传输或者在某些不支持二进制的环境中使用。 - **Tabu Search**:这是一种优化算法,常用于解决组合优化问题,比如旅行商问题。在...
- **编码**:生成的图文验证码要以某种形式编码,如Base64,以便于在网络上传输和存储。 - **存储**:服务器端通常会将验证码的值保存在一个会话(Session)对象中,以便后续验证用户输入时使用。同时,为保证安全...
例如,JavaScript的`btoa()`函数可以进行Base64编码,而`atob()`则用于解码。 在实际开发中,考虑到性能和安全,可能还需要考虑以下几点: - **缓存策略**:频繁访问的图片可以存储在缓存系统(如Redis)中,减少...
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...