当前位置: 首页 > 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;并…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...