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

文章目录

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

背景介绍

在看一位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文件。

展示

你可能感兴趣的:(杂七杂八,python,pdf)