博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】base64模块对图片进行base64编码和解码
阅读量:4100 次
发布时间:2019-05-25

本文共 1631 字,大约阅读时间需要 5 分钟。

图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址。

这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要消耗一个 http 请求下载而来的。
没错,不管如何,图片的下载始终都要向服务器发出请求,要是图片的下载不用向服务器发出请求,而可以随着 HTML 的下载同时下载到本地那就太好了,而base64正好能解决这个问题。
Base64 虽有优点,但是缺点也很明显,在使用上存在一些明显的缺陷。
是的,使用Base64的好处是能够减少一个图片的 HTTP 请求,然而,与之同时付出的代价则是CSS文件体积的增大。
而CSS文件体积的增大意味着什么呢?意味着 CRP 的阻塞。
CRP(Critical Rendering Path,关键渲染路径):当浏览器从服务器接收到一个HTML页面的请求时,到屏幕上渲染出来要经过很多个步骤。浏览器完成这一系列的运行,或者说渲染出来我们常常称之为“关键渲染路径”。
通俗而言,就是图片不会导致关键渲染路径的阻塞,而转化为 Base64 的图片大大增加了CSS文件的体积,CSS 文件的体积直接影响渲染,导致用户会长时间注视空白屏幕。HTML和CSS会阻塞渲染,而图片不会。

下面通过代码对对图片进行base64编码和解码:

# -!- coding: utf-8 -!-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''#作者:cacho_37967865#博客:https://blog.csdn.net/sinat_37967865#文件:baseModel.py#日期:2019-07-02#备注:图片进行base64编码,解码'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''import base64import osdef encode_base64(file):    with open(file,'rb') as f:        img_data = f.read()        base64_data = base64.b64encode(img_data)        print(type(base64_data))        #print(base64_data)        # 如果想要在浏览器上访问base64格式图片,需要在前面加上:data:image/jpeg;base64,        base64_str = str(base64_data, 'utf-8')          print(base64_str)        return base64_datadef decode_base64(base64_data):    with open('./images/base64.jpg','wb') as file:        img = base64.b64decode(base64_data)        file.write(img)if __name__ == '__main__':    img_path = './images/background.jpg'    base64_data = encode_base64(img_path)    decode_base64(base64_data)

# 如果想要在浏览器上访问base64格式图片,需要在前面加上:data:image/jpeg;base64,

备注:base64格式图片常用于尺寸较小、多处使用的、背景类图片。

你可能感兴趣的文章
深入学习Redis:集群
查看>>
8种常见SQL错误用法
查看>>
一次性教你彻底理解 Spring容器和应用上下文
查看>>
消息驱动——Spring Cloud Stream
查看>>
Spring Cloud Gateway 5 分钟快速指南
查看>>
给你一份Spring Boot核心知识清单
查看>>
MyBatis基础搭建及架构概述
查看>>
SpringBoot+MyBatis+MySQL读写分离实战
查看>>
告诉你 38 个 MySQL 数据库的小技巧
查看>>
docker发布项目的一般性步骤
查看>>
一步步了解 Docker 存储驱动
查看>>
镜像的分层特性
查看>>
Jenkins+GitLab+Docker+SpringCloud实现可持续自动化微服务
查看>>
springboot入门
查看>>
Filter(过滤器)、interceptor(拦截器)和Aspect(切面)的使用及区别
查看>>
已入职今日头条,并附上8条面经
查看>>
目前看过最全的一线大厂MySQL面试题(题+详解)
查看>>
SpringBoot,Vue前后端分离开发首秀
查看>>
Elasticsearch基础整理-来自程序员的浪漫
查看>>
面试再被问到分布式锁,把这篇文章甩给他
查看>>