当前位置: 首页 > news >正文

利用python将图片转换为pdf格式的多种方法,实现批量转换,内置模板代码,全网最全,超详细!!!

文章目录

  • 前言
  • 1、img2pdf库的使用
    • 1.1 安装img2pdf库
    • 1.2 案例演示(模板代码)
  • 2、Pillow库的使用
    • 2.1 pillow库的安装
    • 2.2 案例演示(模板代码)
  • 3、PyMuPDF库的使用
    • 3.1 安装pymupdf库
    • 3.2 案例演示(模板代码)
    • 3.3 扩展:将多张图片完美拼接到一张pdf页面上,没有间隙

前言

在python中将图片转换为pdf格式的方法有多种,每种方法依赖于不同的库和工具,本篇文章我将介绍三种常用的库,包括img2pdf 库 和 pillow库、PyMuPDF(fitz)库 ,下面我将通过实际案例教会大家如何使用这三种库,同时针对每一种库不同的转换方法,准备相应的模板代码,让新手小白也能轻松驾驭。

图片准备: 可以看到我在下面准备了4张图片,后续案例中使用的都是这4张图片

在这里插入图片描述

1、img2pdf库的使用

在Python中,img2pdf 是一个方便的库,用于将图片转换为 PDF 格式。它基于 Pillow(PIL 的一个分支)库,并提供了一个简单的接口来完成图片到 PDF 的转换。

1.1 安装img2pdf库

命令:pip install img2pdf

1.2 案例演示(模板代码)


案例演示:

# 1、导入模块
from img2pdf import convert# 2、准备图片路径列表,将需要转换的图片路径全部放进一个列表中,若只有一张图片,同样也将其路径放入列表中即可
image_paths = ['all_images/01.png', 'all_images/02.png', 'all_images/03.png','all_images/04.png']# 3、使用convert函数将图片文件列表转换为 PDF,这里我们直接传递图片文件路径的列表
pdf_bytes = convert(image_paths)
# 注意:convert 函数只能接受一个图片文件对象的列表,或者一个包含图片文件路径的列表# 3、将转换后的图片,保存到指定路径下的pdf文件中
with open('output.pdf', 'wb') as pdf_file:pdf_file.write(pdf_bytes)print("PDF 文件已成功创建!")

执行效果:
在这里插入图片描述

说明:
我们可以看到,img2pdf库的使用是非常简单的,它会将每张图片作为 PDF 文件中的一个独立页面进行添加,有多少张图片就会生成多上张pdf页面

2、Pillow库的使用

通过 Pillow 库,你可以轻松地将单张或多张图片转换为 PDF 格式。这种方法简单高效,适合大多数图片转 PDF 的需求。如果需要更复杂的 PDF 操作(如添加文本、表格等),可以考虑结合 reportlab 库使用,这里我就不详细说明了,大家可以自行扩展。

2.1 pillow库的安装

命令:pip install Pillow

2.2 案例演示(模板代码)


案例1:将单张图片转换为 PDF

# 1、导入模块
from PIL import Image# 2、准备图片路径
image_path = 'all_images/01.png'# 3、准备输出的 PDF 路径
output_pdf_path = 'output.pdf'# 4、打开图片,生成图片对象
image = Image.open(image_path)# 5、将图片转换为pdf格式,并保存至指定路径
image.save(output_pdf_path, "PDF", resolution=100)
'''
参数说明:参数1:保存路径参数2:保存格式参数3:resolution,该参数用于设置pdf的分辨率,不写默认为75
'''
print(f"图片已成功转换为 PDF: {output_pdf_path}")

执行效果:

在这里插入图片描述


案例2:将多张图片合并为一个 PDF

# 1、导入模块
from PIL import Image# 2、准备图片路径列表
image_paths = ['all_images/01.png', 'all_images/02.png', 'all_images/03.png','all_images/04.png']# 3、准备输出的 PDF 路径
output_pdf_path = 'output.pdf'# 4、打开所有图片并使用convert函数将其转换为 RGB 模式,最后全部存入images列表中
images = [Image.open(image).convert('RGB') for image in image_paths]
# 因为pdf需要RGB格式,所以这里需要将其进行转换# 5、将第一张图片保存为 PDF,并追加其他图片
images[0].save(output_pdf_path, save_all=True, append_images=images[1:]) # 先将第一张图片保存为pdf文件,在通过append_images参数将剩余的图片追加进去
'''
参数说明:参数1:保存路径参数2:save_all=True,表示将所有图片都存入一个pdf文件中参数3:append_images=图片对象列表,指定要追加的图片对象列表
'''print(f"多张图片已成功合并为 PDF: {output_pdf_path}")

执行效果:
在这里插入图片描述

说明:
通过上面的案例,我们很轻松的通过pillow库将图片转换为了pdf格式,其中参数的使用也非常简单,但大家可能会对 resolution 参数 抱有疑问,接下来我将针对该参数为大家进行详细说明,如下:

在使用 Pillow 库将图片转换为 PDF 格式时,resolution 参数用于指定输出 PDF 的分辨率(DPI,Dots Per Inch)。分辨率决定了图片在 PDF 中的清晰度和尺寸。

resolution 参数的作用

  1. 控制图片的清晰度:

    分辨率越高,图片在 PDF 中显示的细节越清晰。

    分辨率越低,图片可能会显得模糊或像素化。

  2. 影响图片的尺寸:

    分辨率越高,图片在 PDF 中显示的尺寸越小(因为每英寸的像素点更多)。

    分辨率越低,图片在 PDF 中显示的尺寸越大。

  3. 默认值:

    如果未指定 resolution 参数,Pillow 会使用默认的分辨率(通常是 72 DPI)。

注意事项

  • 图片质量:

    分辨率不会改变原始图片的像素数据,但会影响其在 PDF 中的显示效果。

    如果原始图片的分辨率较低,即使设置高 resolution 参数,也无法提高其清晰度。

  • 文件大小:

    分辨率越高,生成的 PDF 文件可能越大。

  • 默认分辨率:

    如果不指定 resolution 参数,Pillow 会使用默认的 72 DPI。

总结
resolution 参数用于控制图片在 PDF 中的清晰度和显示尺寸。通过调整分辨率,可以优化 PDF 的显示效果,适应不同的需求(如打印或屏幕查看)。在实际使用中,建议根据具体场景选择合适的分辨率值。

3、PyMuPDF库的使用

PyMuPDF(fitz)库提供了强大的PDF和图像处理能力,它是一个强大的PDF处理库,它允许你读取、修改和创建PDF文件。它也支持从图片创建PDF。

3.1 安装pymupdf库

命令:pip install pymupdf

3.2 案例演示(模板代码)


案例1:将一张图片转换为pdf格式

方法1:

# 1、导入模块
import fitz# 2、打开一个新的PDF文档
pdf_document = fitz.open()# 3、加载图像文件,生成图片对象
image_file = fitz.open('all_images/01.png') # 替换为需要转换的图片路径# 4、使用convert_to_pdf函数将图片文件对象转换为pdf格式
image_pdf = image_file.convert_to_pdf()# 5、以pdf格式打开转换后的图像,生成pdf对象
pdf = fitz.open('pdf', image_pdf)# 6、向pdf文档中插入pdf对象
pdf_document.insert_pdf(pdf)# 7、将PDF文档保存至指定路径
pdf_document.save('output.pdf')  # 替换为你想要保存的PDF路径# 8、关闭图片文件和pdf文档,这两步默认可不写,但为了代码规范,我们可以加上
image_file.close()
pdf_document.close()print('图片已转换为pdf文档!')

执行效果:
在这里插入图片描述


方法2:

# 1、导入模块
import fitz# 2、打开一个新的PDF文档
pdf_document = fitz.open()# 3、加载图像文件
image_file = fitz.open('all_images/01.png') # 替换为你的图像路径# 4、加载图像所在的页面(通常是第一页),一般图片只有一页
image_page = image_file.load_page(0)# 5、获取图像的矩形区域(尺寸和位置,但这里我们可能只关心尺寸)
image_rect = image_page.rect
print(image_rect) # 返回 Rect(0.0, 0.0, 595.25, 841.75),前两个数字代表图片左上角的坐标,后两个数字代表图片右下角的坐标,同时也是图片的宽度和高度
'''方法说明:根据下面看两种方法可以得到图片宽度和高度1、image_rect.width:获取图片的宽度,595.252、image_rect.height:获取图片的宽度,841.75
'''# 6、创建一个新的PDF页面,这里我们指定其尺寸与图像相同(或根据需要调整)
pdf_page = pdf_document.new_page(width=image_rect.width, height=image_rect.height)
'''
参数说明:参数1:width,指定pdf页面的宽度参数2:height:指定pdf页面的高度
'''# 7、在PDF页面上插入图像
# 注意:这里我们假设图像应该覆盖整个页面,因此使用pdf_page.rect作为插入区域
pdf_page.insert_image(rect=pdf_page.rect, filename='all_images/01.png', stream=None)
'''
参数说明:参数1:rect= ,指定图片插入的位置,通常为pdf页面的矩形区域,也可以是图片的矩形区域,这里两者相同参数2:filename = 图片路径,指定要插入的图片参数3:stream=None,默认参数,表示允许指定图片以二进制格式插入pdf文档中
'''# 8、保存PDF文档
pdf_document.save('output.pdf')# 9、关闭图像文件和pdf文档,默认可不写,这里为了代码规范,我们可以写上
image_file.close()
pdf_document.close()print('图片已转换为了pdf文档!')

执行效果:

在这里插入图片描述


案例2:将多张图片转换为pdf文档

# 1、导入模块
import fitzdef images_to_pdf(image_paths, output_pdf):# 创建一个新的 PDF 文档pdf_document = fitz.open()# 遍历每一个图片路径for image_path in image_paths:# 打开图像文件,生成图片对象img = fitz.open(image_path)# 选择图片的第一页,生成矩形区域,用于获取图片的尺寸img_page = img.load_page(0).rect# 生成一张与图片大小相同的空白pdf页面         pdf_page = pdf_document.new_page(width=img_page.width, height=img_page.height)  # 根据图像大小设置页面尺寸# 将图像插入到 PDF 页面的指定位置(这里插入到页面的左上角)# 注意:如果图像大小与页面大小不匹配,可能需要调整 rect 参数以进行裁剪或缩放pdf_page.insert_image(rect=fitz.Rect(0, 0, pdf_page.rect.width, pdf_page.rect.height), filename=image_path,stream=None)'''说明:rect = fitz.Rect(0, 0, pdf_page.rect.width, pdf_page.rect.height) # 通过fitz.Rect方法可以手动调节图片插入的位置,前两个数字为图片左上角的坐标,后两个数字为图片右下角的坐标,这里就是pdf页面的宽度和高度'''# 关闭图像文件(对于 pymupdf,这通常是自动处理的,但显式关闭是个好习惯)img.close()# 保存 PDF 文档pdf_document.save(output_pdf)# 关闭 PDF 文档(对于 pymupdf,这也通常是自动处理的,但显式关闭可以避免潜在的资源泄露)pdf_document.close()# 2、准备图片路径列表
image_paths = ['all_images/01.png', 'all_images/02.png', 'all_images/03.png','all_images/04.png']  # 替换为要转换的图片路径  # 3、替换为你想要输出的 PDF 文件名
output_pdf = 'output.pdf'# 4、调用函数,并传入参数
images_to_pdf(image_paths, output_pdf)

执行效果:
在这里插入图片描述

3.3 扩展:将多张图片完美拼接到一张pdf页面上,没有间隙

通过前面的学习,我们已经掌握了三种将图片转换为pdf格式的方法,这三种方法都有一个共同点,它们会将每一张图片单独生成一张pdf页面,有多少张图片就会有多少张pdf页面,且每张pdf页面间都会有一段空白的填充区来分隔每张pdf页面,但是有时我们需要将多张连贯的图片转换为pdf格式,这时若按照原来的方法操作,每张图片间就会出现空白部分,影响观感,所以接下来我会依照这个问题,给出解决方法。

问题演示

在这里插入图片描述


解决方法(模板代码)

# 1、导入模块
import fitzdef images_to_single_pdf_page(image_paths, output_pdf):# 打开一个新的PDF文档pdf_document = fitz.open()# 初始化pdf页面总高度和最大宽度total_height = 0max_width = 0# 遍历所有图片文件以计算总高度和最大宽度(垂直拼接)for img_file in image_paths:# 打开图片文件,生成图片对象img_document = fitz.open(img_file)# 选择图片的第1页,一般图片都只有1页img_page = img_document.load_page(0)# 得到图片的矩形区域,用于获取图片的尺寸img_rect = img_page.rect# 获取图片的宽度和高度img_width, img_height = img_rect.width, img_rect.height# 累加高度并更新最大宽度total_height += img_heightif img_width > max_width:max_width = img_width# 关闭图片文档img_document.close()# 创建一个新的PDF页面,大小足以容纳所有图片pdf_page = pdf_document.new_page(width=max_width, height=total_height)# 初始化当前y位置,用于定义图片左上角的坐标current_y = 0# 初始化图片高度,用于定义图片右下角的坐标point_height = 0# 遍历所有图片文件并在PDF页面上绘制它们,不留空白for img_file in image_paths:# 打开图片文件,生成图片对象img_document = fitz.open(img_file)# 指定图片第一页,并形成矩形区域img_page = img_document.load_page(0).rect# 累加高度point_height += img_page.height# 在PDF页面上绘制图片(紧密排列,不留空白)pdf_page.insert_image(rect=fitz.Rect(0,current_y, img_page.width, point_height),filename=img_file, stream=None)'''说明:这里通过改变current_y 和 point_height 使图片依次垂直拼接在一张pdf页面上(0,current_y):表示每张图片插入pdf页面左上角的坐标(img_page.width, point_height):表示每张图片插入pdf右下角的坐标'''# 更新当前y位置以放置下一张图片(直接跳到下一张图片的起始位置)current_y += img_page.height# 关闭图片文档img_document.close()# 保存PDF文档至指定位置pdf_document.save(output_pdf)# 关闭PDF文档pdf_document.close()# 2、准备好图片路径列表
image_paths = ['all_images/01.png', 'all_images/02.png', 'all_images/03.png','all_images/04.png']  # 替换为要转换的图片路径# 3、替换为你想要输出的PDF文件路径
output_pdf = "output_all.pdf"# 4、调用函数,传入参数
images_to_single_pdf_page(image_paths, output_pdf)print('所有图片已全部拼接至一张pdf页面上!!!')

执行效果:
在这里插入图片描述

说明:
从上面我们可以看到,所有图片在转换为pdf格式后,全部拼接在了一张pdf页面上,且每张图片间没有空隙。


相关文章:

利用python将图片转换为pdf格式的多种方法,实现批量转换,内置模板代码,全网最全,超详细!!!

文章目录 前言1、img2pdf库的使用1.1 安装img2pdf库1.2 案例演示(模板代码) 2、Pillow库的使用2.1 pillow库的安装2.2 案例演示(模板代码) 3、PyMuPDF库的使用3.1 安装pymupdf库3.2 案例演示(模板代码)3.3 …...

tcpdump的常见方法

详解tcpdump的使用方法:网络数据包捕获与分析 tcpdump是一个功能强大的命令行工具,用于捕获和分析通过网络接口传输的数据包。它广泛应用于网络故障诊断、网络安全监控和协议分析等领域。本文将详细介绍tcpdump的使用方法,包括安装、基本命令…...

工控主板ESM7000/6800E支持远程桌面控制

英创公司ESM7000 是面向工业领域的双核 Cortex-A7 高性能嵌入式主板,ESM6800E则为单核Cortex-A7 高性价比嵌入式主板,ESM7000、ESM6800E都是公司的成熟产品,已广泛应用于工业很多领域。ESM7000/6800E板卡中Linux系统配置为linux-4.9.11内核、…...

wamp php7.4 运行dm8

背景 1、电脑安装了dm8,具体参照官网dm8安装 2、安装好了wamp,我当前的php版本切换成了7.4的,我wamp的安装路径d:\wamp64\ 操作 3、查看phpinfo,如果Thread Safet为enabled,则选择pdo74_dm.dll,否则选择…...

HTML5 进度条(Progress Bar)详解

HTML5 进度条&#xff08;Progress Bar&#xff09;详解 进度条是用于显示任务完成进度的控件&#xff0c;常用于加载、上传或下载等操作。HTML5提供了原生的<progress>元素&#xff0c;使得创建进度条变得简单和直观。 1. 基本用法 <progress>元素的基本语法如…...

LabVIEW开发中常见硬件通讯接口快速识别

在 LabVIEW 开发中&#xff0c;与硬件进行通讯是实现数据采集与控制的重要环节。准确判断通讯接口类型和协议&#xff0c;可以提高开发效率&#xff0c;减少调试时间。本文结合 LabVIEW 的实际应用&#xff0c;详细介绍如何识别和判断常见硬件通讯接口的定义&#xff0c;并提供…...

高频 SQL 50 题(基础版)_1068. 产品销售分析 I

销售表 Sales&#xff1a; (sale_id, year) 是销售表 Sales 的主键&#xff08;具有唯一值的列的组合&#xff09;。 product_id 是关联到产品表 Product 的外键&#xff08;reference 列&#xff09;。 该表的每一行显示 product_id 在某一年的销售情况。 注意: price 表示每…...

笔记:一次mysql主从复制延迟高的处理尝试

背景 mysql 5.7 主从复制 主库进行了一次灌数&#xff0c;导致多个大事务产生&#xff0c;主从延迟下不去&#xff0c;经确认该表最终truncate&#xff0c;并且该表仅有insert和select操作&#xff0c;故对该表的事务进行跳过&#xff0c;直到同步至truncate 跳过事务需谨慎&…...

基于C语言的卡丁车管理系统【控制台应用程序】

注意&#xff1a;需要提前创建对应的.dat文件 本项目实现了数据的永久存储&#xff0c;有用户的注册、登录。 管理员对卡丁车的管理、查看预约用户、修改帐户权限。 用户对个人信息的管理、查看并预约卡丁车、卡丁车维修上报。 维修员对卡丁车的维修状态上报、个人信息管理。 …...

Docker 搭建 Gogs

Docker 搭建 Gogs 准备工作 先准备配置目录和持久化目录&#xff0c;举个栗子&#xff1a;mkdir -p /opt/module/gogs/{data,backup} 拉取官方Gogs镜像 # 拉取 gogs:0.13 docker pull gogs/gogs:0.13 # 拉取最新版 gogs 镜像 docker pull gogs/gogs启动一个临时容器【通过创…...

PostgreSQL的备份方式

PostgreSQL 提供多种方式进行备份&#xff0c;适用于不同需求的场景。常用的备份方法如下&#xff1a; 1. 逻辑备份&#xff08;pg_dump 和 pg_dumpall&#xff09; 1.1 使用 pg_dump 备份单个数据库 pg_dump 是 PostgreSQL 内置的逻辑备份工具&#xff0c;可以将数据库导出为…...

Springboot 3项目整合Knife4j接口文档(接口分组详细教程)

文章目录 前言一、Spring Boot 3.0整合Knife4j二、OpenApi 3注解的使用规范三、使用步骤 1.Spring Boot 3.0项目中使用knife4j2.在application.yml中添加knife4j相关配置3.设置WebMvc相关配置&#xff08;解决封装统一异常处理后doc.html无法打开的问题&#xff09;4.创建Knif…...

深入解析 Conda 安装的默认依赖包及其作用:conda create安装了哪些包(中英双语)

深入解析 Conda 安装的默认依赖包及其作用 当我们使用 Conda 创建新环境时&#xff0c;例如执行命令&#xff1a; conda create -n olmes python3.10Conda 会自动为我们安装一系列基础依赖包&#xff0c;保证 Python 环境能够正常运行。这些包不仅是我们开发的基础工具&#…...

Redis核心技术知识点全集

Redis数据结构和常用命令 1. String字符串2. Hash哈希3. List列表4. Set集合5. Sorted Set有序集合6. Redis常用命令参考Redis事务机制...

【Unity3D】ECS入门学习(九)SystemBase

SystemBase&#xff1a;支持主线程或多线程执行筛选实体任务。 主要介绍是内部成员&#xff1a;Entities的各种筛选方法&#xff0c;其内部成员还有EntityManager ForEach方法筛选&#xff0c;传递一个有参委托函数进去&#xff0c;参数ref xxx组件类&#xff08;可填多个&…...

【Triton-ONNX】如何使用 ONNX 模型服务与 Triton 通信执行推理任务上-Triton快速开始

模型部署系列文章 前置-docker 理解:【 0 基础 Docker 极速入门】镜像、容器、常用命令总结前置-http/gRPC 的理解: 【HTTP和gRPC的区别】协议类型/传输效率 /性能等对比【保姆级教程附代码】Pytorch (.pth) 到 TensorRT (.plan) 模型转化全流程【保姆级教程附代码(二)】Pytor…...

CertiK《Hack3d:2024年度安全报告》(附报告全文链接)

CertiK《Hack3d&#xff1a;2024年度安全报告》现已发布&#xff0c;本次报告深入分析了2024年Web3.0领域的安全状况。2024年损失总额超过23亿美元&#xff0c;同比增幅高达31.61%&#xff1b;其中&#xff0c;12月的损失金额最少。过去一年&#xff0c;网络钓鱼攻击和私钥泄露…...

TIOBE 指数 12 月排行榜公布,VB.Net排行第九

IT之家 12 月 10 日消息&#xff0c;TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标&#xff0c;评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎&#xff0c;今天 TIOBE 官网公布了 2024 年 12 月的编程语言排行榜&#xff0c;IT之家整理如下&#xff1a; …...

【网络协议】开放式最短路径优先协议OSPF详解(一)

OSPF 是为取代 RIP 而开发的一种无类别的链路状态路由协议&#xff0c;它通过使用区域划分以实现更好的可扩展性。 文章目录 链路状态路由协议OSPF 的工作原理OSPF 数据包类型Dijkstra算法、管理距离与度量值OSPF的管理距离OSPF的度量值 链路状态路由协议的优势拓扑结构路由器O…...

嵌入式Linux驱动开发的基本知识(驱动程序的本质、常见的设备类型、设备号的本质理解、设备实例的注册过程)

基本概念之什么是驱动程序()&#xff1f; 驱动程序本质上是代码逻辑的集合&#xff0c;通常用于管理、驱动多个设备实例。某个设备要想使用驱动程序&#xff0c;需要实例化相应的驱动程序的结构体&#xff0c;并在系统中注册&#xff0c;获得主设备号、次设备号&#xff0c;并…...

爱死机第四季(秘密关卡)4KHDR国语字幕

通过网盘分享的文件&#xff1a;love_death_robot 链接: https://pan.baidu.com/s/1bG3Xtdopenil2O_y93hY_g?pwd8kib 提取码: 8kib...

kubelet状态错误报错

journalctl -xeu kubelet 执行后的日志如下: -- -- The process exit code is exited and its exit status is 1. Jan 02 14:20:06 iv-ydipyqxfr4wuxjsij0bd systemd[1]: kubelet.service: Failed with result exit-code. -- Subject: Unit failed -- Defined-By: system…...

<div>{{ $t(“collectionPlan“) }}</div> 中的$t是什么

$t是Vue I18n插件提供的一种方法&#xff0c;用于根据当前应用的语言环境来获取相应的翻译文本。 以下是一个简单的示例&#xff0c;展示如何在Vue I18n中定义消息&#xff1a; const i18n new VueI18n({locale: en, // 设置默认语言messages: {en: {collectionPlan: Collec…...

[C++刷题] 求回文素数

求回文素数 题目 素数回文数的个数 题目描述 求 11 11 11 到 n n n 之间&#xff08;包括 n n n&#xff09;&#xff0c;既是素数又是回文数的整数有多少个。 输入格式 一个大于 11 11 11 小于 10000 10000 10000 的整数 n n n。 输出格式 11 11 11 到 n n n 之…...

SQLALchemy如何将SQL语句编译为特定数据库方言

最近在一个使用fastapitortoise-orm的项目中&#xff0c;需要将orm的语句编译成特定数据库方言&#xff0c;但是查询了官方文档及一些资料却找不到合适的方法论&#x1f614;&#xff0c;于是乎我就把目光放到了sqlalchemy身上&#xff0c;东找西找给我找着了。话不多说&#x…...

[卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析

目录 [卫星遥感] 解密卫星目标跟踪&#xff1a;挑战与突破的深度剖析 1. 卫星目标跟踪的核心挑战 1.1 目标的高速与不确定性 1.2 卫星传感器的局限性 1.3 数据处理与融合问题 1.4 大尺度与实时性要求 2. 当前卫星目标跟踪的主流技术 2.1 卡尔曼滤波&#xff08;Kalman …...

I2C(一):存储器模式:stm32作为主机对AT24C02写读数据

存储器模式&#xff1a;在HAL库中&#xff0c;I2C有专门对存储器外设设置的库函数 I2C&#xff08;一&#xff09;&#xff1a;存储器模式的使用 1、I2C轮询式写读AT24C02一页数据2、I2C轮询式写读AT24C02多页数据3、I2C中断式写读AT24C02一页数据4、I2C使用DMA式写读AT24C02一…...

scrapy 教程

Scrapy Tutorial In this tutorial, we’ll assume that Scrapy is already installed on your system. If that’s not the case, see Installation guide. We are going to scrape quotes.toscrape.com, a website that lists quotes from famous authors. This tutorial …...

2025元旦源码免费送

我们常常在当下感到时间慢&#xff0c;觉得未来遥远&#xff0c;但一旦回头看&#xff0c;时间已经悄然流逝。对于未来&#xff0c;尽管如此&#xff0c;也应该保持一种从容的态度&#xff0c;相信未来仍有许多可能性等待着我们。 免费获取源码。 更多内容敬请期待。如有需要可…...

高级架构五 设计模式

一 设计模式七大原则 1.1. 设计模式目的 编写软件过程中&#xff0c;程序员面临着来自 耦合性&#xff0c;内聚性以及可维护性&#xff0c;可扩展性&#xff0c;重用性&#xff0c;灵活性 等多方面的挑战&#xff0c;设计模式是为了让程序(软件)&#xff0c;具有更好的&#…...