使用Python把文件夹里面的图片放入一个pdf

news2025/2/13 12:46:32

文章目录

  • 背景介绍
  • 代码
  • 代码分析
  • 展示

背景介绍

在看一位up主的“矩阵分析”课程的时候,up主的课件是以图片形式保存在QQ空间的。图片形式不便于学习,所以想要通过Python代码,把保存在“矩阵分析课件”里面的图片,转换为pdf,并保持图片的长宽比例不变,pdf文件以当前时间命令。在添加图片之前对图片文件名进行排序,这样就可以确保PDF中的页面顺序与图片顺序一致。
在这里插入图片描述

代码

import os
import datetime
from PIL import Image
from fpdf import FPDF

# 图片所在文件夹路径
img_folder = "矩阵分析课件"

# 获取文件夹中的所有文件
images = [img for img in os.listdir(img_folder) if img.endswith(".jpg") or img.endswith(".png") or img.endswith(".jpeg")]

# 按照文件名排序
images.sort()

# 创建一个pdf对象
pdf = FPDF(unit="mm")

# 遍历每一个图片
for i in range(len(images)):
    img_path = os.path.join(img_folder, images[i])
    
    # 使用PIL库打开图片并获取尺寸
    img = Image.open(img_path)
    width, height = img.size

    # 转换尺寸单位到毫米
    width_mm = width * 0.264583
    height_mm = height * 0.264583

    # 把图片添加到pdf
    pdf.add_page(format=(width_mm, height_mm))
    pdf.image(img_path, x = 0, y = 0, w = width_mm, h = height_mm)

# 以当前时间命名PDF文件
now = datetime.datetime.now()
pdf_name = now.strftime("%Y-%m-%d_%H-%M-%S") + ".pdf"

# 保存pdf文件
pdf.output(pdf_name, "F")

代码分析

下面是对每一部分代码的详细解释:

  1. 导入必要的库:

    import os
    import datetime
    from PIL import Image
    from fpdf import FPDF
    

    这里我们导入了四个库:os,datetime,PIL和fpdf。os和datetime库是Python的内置库,用于处理操作系统和时间相关的操作。PIL(Pillow)是一个图像处理库,我们用它来获取图像的尺寸。FPDF库用于创建和编辑PDF文件。

  2. 指定图像所在的文件夹,并获取所有的图像文件:

    # 图片所在文件夹路径
    img_folder = "矩阵分析课件"
    
    # 获取文件夹中的所有文件
    images = [img for img in os.listdir(img_folder) if img.endswith(".jpg") or img.endswith(".png") or img.endswith(".jpeg")]
    
    # 按照文件名排序
    images.sort()
    

    这部分代码首先设置图像所在文件夹的路径,然后使用os库的listdir函数获取该文件夹中的所有文件名。列表推导式用于过滤出.jpg、.png和.jpeg的图片文件,并把它们的名称添加到列表中。最后,对列表中的文件名进行排序。

  3. 创建FPDF对象并遍历每一张图片:

    # 创建一个pdf对象
    pdf = FPDF(unit="mm")
    
    # 遍历每一个图片
    for i in range(len(images)):
        img_path = os.path.join(img_folder, images[i])
        
        # 使用PIL库打开图片并获取尺寸
        img = Image.open(img_path)
        width, height = img.size
    
        # 转换尺寸单位到毫米
        width_mm = width * 0.264583
        height_mm = height * 0.264583
    
        # 把图片添加到pdf
        pdf.add_page(format=(width_mm, height_mm))
        pdf.image(img_path, x = 0, y = 0, w = width_mm, h = height_mm)
    

    首先,创建一个FPDF对象,设置单位为毫米。然后,遍历每一张图片,使用PIL库打开图片并获取尺寸,然后将图片尺寸从像素转换为毫米。最后,为每一张图片添加一个新的页面,并将图片添加到该页面上。每个页面的尺寸都会根据其对应的图片的尺寸进行设置。

  4. 使用当前时间来命名并保存PDF文件:

    # 以当前时间命名PDF文件
    now = datetime.datetime.now()
    pdf_name = now.strftime("%Y-%m-%d_%H-%M-%S") + ".pdf"
    
    # 保存pdf文件
    pdf.output(pdf_name, "F")
    

    这部分代码首先获取当前的日期和时间,然后使用strftime函数将时间格式化为字符串,并作为PDF文件的名称。最后,使用FPDF对象的output方法保存PDF文件。

展示

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt函数运用

setwidget 文件 文件读写 链接 std::ifstream---std::ofstream 头文件--#include <fstream> 执行都是类&#xff0c;用这些类操作文件都要建立对象流。 1&#xff0c;建立对象流 流对象的建立有两种方式&#xff1a; &#xff08;1&#xff09;使用fstream类可以…

内网安全:Socks 代理 || 本地代理 技术.

内网安全&#xff1a;Socks 代理 || 本地代理 技术. Socks 代理又称全能代理&#xff0c;就像有很多跳线的转接板&#xff0c;它只是简单地将一端的系统连接到另外一端。支持多种协议&#xff0c;包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型&#xff0…

Selenium中的隐式等待和显式等待

在Selenium中&#xff0c;“等待”在执行测试中起着重要作用。在本文中&#xff0c;您将学习Selenium中“隐式”和“显式”等待的各个方面。 在本文中&#xff0c;您将学习到 1. 为什么我们需要在selenium中等待&#xff1f; 2. 隐瞒等待 3. 明确等待 4. 流利的等待 为什么…

15.DIY可视化-拖拽设计1天搞定主流小程序-分类联动文章列表实时刷新

分类联动文章列表实时刷新 本教程均在第一节中项目启动下操作 分类联动文章列表实时刷新前言需求一:功能实现:点击首页分类,对应分类内容显示到当前页一、清空原分类界面:二. 设置选项卡三:设定展示内容字段:1.跨页面复制:文章分类组件到分类![在这里插入图片描述](https://img…

服务器安装cuda版本的pytorch+DGL

1、先创建pytorch环境&#xff1a;conda create -n ljj_torch112 python3.8 看本机的&#xff1a; 先看自己的cuda版本&#xff1a;&#xff08;最权威的看&#xff1a;nvcc --version&#xff09; 10.0的cuda于是不太符合&#xff0c;所以换一个10.2的cuda比较常用&#xff0…

【C++从入门到放弃】list深度剖析及模拟实现

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《C从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; list …

CANN黑科技解密|昇腾Ascend C编程语言 — 极简易用的算子开发体验

AI应用的大脑是神经网络&#xff0c;而构成神经网络的基石是一个个算子。为了让开发者的网络在昇腾硬件上高效运行&#xff0c;昇腾异构计算架构CANN&#xff08;Compute Architecture for Neural Networks&#xff09;提供了丰富的高性能算子库&#xff0c;包括神经网络库、线…

Python-opcua 编程(1)

任何一项新标准如果不能充分应用是不可能推广的&#xff0c;最近看了一些国外网站&#xff0c;发现类似OPC UA 的应用以及比较广泛了&#xff0c;而且有许多课程。相比之下&#xff0c;我国OPCUA 标准的普及工作仍然停留在概述的阶段&#xff0c;为此&#xff0c;我将逐步介绍一…

复习并发编程的基础知识(一)

时间长了&#xff0c;并发编程的基础知识总忘&#xff0c;来记录一下&#xff1a; 进程和线程 进程&#xff1a;资源分配的最小单元&#xff0c;什么是资源&#xff1f;CPU&#xff0c;内存&#xff0c;网卡等等 线程&#xff1a;进程中的一个实体&#xff0c;不能单独存在&…

七、DMSP/OLS、NPP/VIIRS等夜间灯光数据能源碳排放空间化——能源碳排放增长类型、增长率、总量增长等级分析

一、前言 前文对能源碳排放空间化后的分析角度做了一些介绍,其实无非就是能源碳排放增长类型、增长率等的计算,那么这里强调一下,这个时候不能用利用统计数据计算出来的能源碳排放数据进行计算,而是必须用反演的能源碳排放数据进行划定计算。 二、具体步骤 增长类型 (…

【Excel超实用快捷键!!!办公效率1000%up!up!up!】

目录索引 ctrle&#xff1a;提取数据&#xff1a;合并数据&#xff1a; 普通快捷键&#xff1a;ctrla&#xff1a;ctrlc&#xff1a;ctrlv&#xff1a;ctrlx&#xff1a;ctrlz&#xff1a;ctrly&#xff1a;ctrls&#xff1a;ctrlf&#xff1a; 文字格式快捷键&#xff1a;ctrl…

IMX6ULL裸机篇之SPI实验-SPI主控寄存器

一. SPI主控寄存器 IMX6ULL 芯片的 SPI接口叫做 ECSPI&#xff0c;支持全双工、主丛可配置。 本文学习 IMX6ULL-阿尔法开发板SPI中控芯片的 SPI寄存器部分。后续代码实现需要配置 SPI相关的寄存器。 二. SPI主控的寄存器配置 1. SPI主控芯片寄存器 (1) RXDATA寄存器&am…

DVWA-Command Injection

大约 命令注入攻击的目的是在易受攻击的应用程序中注入和执行攻击者指定的命令。 在这种情况下&#xff0c;执行不需要的系统命令的应用程序就像一个伪系统外壳&#xff0c;攻击者可能会使用它 作为任何授权的系统用户。但是&#xff0c;命令的执行权限和环境与 Web 服务具有的…

【MySQL】创建和管理表

创建和管理表 标识符命名规则MySQL中的数据类型创建和管理数据库使用数据库修改数据库 创建表语法方式一方式二 修改表向表中追加一个列修改一个列重命名一个列删除一个列 重命名表方式一方式2; 删除表清空表 存储数据是处理数据的第一步 。只有正确地把数据存储起来&#xff0…

基于卫星星历计算卫星在CGCS2000大地坐标系中的坐标

目录 一、北斗系统概述 1.空间星座 2.坐标系统 3.时间系统 二、实验目的 三、实验内容 四、实验过程 五、实验结果 一、北斗系统概述 1.空间星座 北斗卫星导航系统简称北斗系统&#xff0c;英文缩写为 BDS&#xff0c;其空间星座由 5 颗地球静止轨道&#xff08;GEO&…

​“前端已死”甚嚣尘上,全栈工程师卷到起飞

海量应届生入场&#xff0c;坑位却还是那多。具备前后端开发能力的全栈工程师兴起&#xff0c;不仅能够开发前端&#xff0c;还能够处理后端业务逻辑和数据库等技术&#xff0c;还能掌握整个软件开发的细节。企业自然会更愿意招聘全栈工程师&#xff0c;说白了&#xff0c;卷啊…

springboot整合quartz实现定时任务动态增删改查

springboot整合quartz quartz介绍Quartz 核心概念 使用依赖配置文件启动类quartz工具类job业务用到的对象类接口service实现类测试 quartz介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合也可以单独使用。…

【CMake 入门与进阶(6)】 CMakeLists.txt 部分常用变量(附使用代码)

变量也是 cmake 中的一个重头戏&#xff0c;cmake 提供了很多内置变量&#xff0c;每一个变量都有它自己的含义&#xff0c;通过这个链接地址cmake-variables(7) — CMake 3.5.2 Documentation可以查询到所有的内置变量及其相应的介绍&#xff0c;如下所示&#xff1a; 在这一份…

App移动端测试 —— Monkey的日志

Monkey的日志对于分析脚本的执行情况十分必要。 Monkey 日志由以下几部分组成&#xff1a; 测试命令信息&#xff1a;随机种子 seed、运行次数、可运行应用列表、各事件百分比。” 正文内容从这里开始&#xff08;可直接省略&#xff0c;亦可配图说明&#xff09;。 01—Mon…

使用python批量处理工作簿和工作表

案例01 批量新建并保存工作簿 将for语句与xlwings模块相结合&#xff0c;就可以轻松实现批量创建工作簿 import xlwings as xw # 导入xlwings模块 app xw.App(visibleTrue,add_bookFalse) # 启动Excel程序&#xff0c;但不新建工作簿 for i in range(6):workbook app.books…