Python合并多张图片成PDF

前言

最近需要将记的笔记整理成一个 pdf 进行保存,所以就研究了一下如何利用 Python 代码将拍下来的照片整个合并成一个 pdf

过程

拿到一个需求最重要的就是将大块任务拆分成一个个小模块,逐个击破。

拍照

这一步首先是将所有的书页拍好,需要注意的是要按照书的页码来拍,因为后面的排序是按照文件名进行排序的,拍照的文件名基本上是按照时间生成的,如果拍的时候乱了,到时候生成的 pdf 里面的页码也会乱掉。

用到的Python 操作库

Python 最好的地方就是有大量的第三方库能帮我们快速实现我们想要的方法,搜索到了两个库,
PyFPDF 和img2pdf,我们这里选择img2pdf来完成我们的需求

pip install img2pdf

Python遍历文件夹获取图片

    dirname = "f:/wlzcool"
    imgs = []
    for fname in os.listdir(dirname):
        if not fname.endswith(".jpg"):
            continue
        path = os.path.join(dirname, fname)
        if os.path.isdir(path):
            continue
        imgs.append(path)

需要注意图片的文件名如果是纯数字且位数不一样,排序会为1之后是10而不是2,需要进行一个排序,如果是手机拍的文件就没有这个问题。

files.sort(key=lambda x: int(x[:-4]))

旋转图片展示方向并压缩像素

有的时候手机拍出来的图片是水平的,需要将其改为竖直的
用rotate旋转方向的时候需要注意加上expand=True 这个参数,否则会有黑边出现。
手机的照片像素太高,有的需要进行压缩以保证最后生成的pdf的大小适中。

    img = Image.open(path)
    if img.size[0] > img.size[1]:
        im_rotate = img.rotate(90, expand=True)
        size = (int(im_rotate.size[0] / 3), int(im_rotate.size[1] / 3))
        im_rotate = im_rotate.resize(size)
        im_rotate.save(savepath, quality=95)
    else:
        size = (int(img.size[0] / 3), int(img.size[1] / 3))
        img = img.resize(size)
        img.save(savepath, quality=95)

整体代码

写成脚本需要考虑的有很多,为了方便使用,需要将各种参数改为允许用户输入的。比如图片文件夹所在的路径,压缩比之类的

from PIL import Image
import os
import img2pdf

flag = False
while not flag:
    dirname = input("请输入图片文件夹所在路径(例如d:/wlzcool):")
    flag = os.path.exists(dirname)
    if not flag:
        print("图片文件夹所在路径不存在!")
saveflag = False
while not saveflag:
    savedirname = input("请输入目标图片文件夹所在路径(例如d:/wlzcool2):")
    saveflag = os.path.exists(savedirname)
    if not saveflag:
        print("图片文件夹所在路径不存在!")
        automakedir = input("是否自动创建对应文件夹?(是Y/否N):")
        if automakedir.strip().upper() == "Y":
            os.makedirs(savedirname)
            saveflag = True
files = os.listdir(dirname)
reductionFactor = int(input("请输入长宽压缩比(例如3):"))
if reductionFactor <= 0:
    reductionFactor = 3
isConvertBlack = input("是否输出黑白版本?(是Y/否N):").strip().upper() == "Y"
for fname in files:
    if not fname.endswith(".jpg"):
        continue
    path = os.path.join(dirname, fname)
    savePath = os.path.join(savedirname, fname)
    if os.path.isdir(path):
        continue
    img = Image.open(path)
    if img.size[0] > img.size[1]:
        im_rotate = img.rotate(90, expand=True)
        size = (int(im_rotate.size[0] / reductionFactor), int(im_rotate.size[1] / reductionFactor))
        im_rotate = im_rotate.resize(size)
        if isConvertBlack:
            im_rotate = im_rotate.convert("L")
        im_rotate.save(savePath, quality=95)
    else:
        size = (int(img.size[0] / reductionFactor), int(img.size[1] / reductionFactor))
        img = img.resize(size)
        if isConvertBlack:
            img = img.convert("L")
        img.save(savePath, quality=95)
filename = input("请输入输出文件名(例如:第一章):")
with open(filename + ".pdf", "wb") as f:
    imgs = []
    files = os.listdir(savedirname)
    for fname in files:
        if not fname.endswith(".jpg"):
            continue
        path = os.path.join(savedirname, fname)
        if os.path.isdir(path):
            continue
        imgs.append(path)
    f.write(img2pdf.convert(imgs))

将脚本打包成exe

不是所有的电脑都有Python环境,我们需要将脚本打包成exe方便在任意一台电脑上使用。
使用 PyInstaller 来进行脚本的打包

安装 PyInstaller

pip install pyinstaller

打包脚本

在脚本所在的路径的cmd中执行以下命令即可

pyinstaller -F yourprogram.py

总结

到此这篇关于Python实现图片合并pdf的方法的文章就介绍到这了,更多相关Python 图片合并pdf内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python多图片合并PDF的方法

    python多图片合并pdf 起因 一个做美工的朋友需要将多个图片jpg .png 合并起来,PS操作太慢了所以用了python进行完成这个任务 代码 #!/usr/bin/env python # -*- coding: utf-8 -*- # @File : 2.py # @Author: huifer # @Date : 2018/12/20 from PIL import Image import os def rea(pdf_name): file_list = os.listdir(

  • Python结合ImageMagick实现多张图片合并为一个pdf文件的方法

    本文实例讲述了Python结合ImageMagick实现多张图片合并为一个pdf文件的方法.分享给大家供大家参考,具体如下: 前段时间买了不少书,现在手头的书籍积累的越来越多,北京这边租住的小屋子空间越来越满了.自从习惯了笔记本触摸板的手势操作之后,我偶觉得使用电脑看电子文档也挺享受的.于是想把自己的部分书籍使用手机拍照,然后合并成一个pdf文件. 最初尝试过找成熟的Windows软件,但是始终没有找到一个好用的软件.想写脚本处理,一直也没有实现.偶然查看ImageMagick软件的说明,找到了

  • Python合并多张图片成PDF

    前言 最近需要将记的笔记整理成一个 pdf 进行保存,所以就研究了一下如何利用 Python 代码将拍下来的照片整个合并成一个 pdf 过程 拿到一个需求最重要的就是将大块任务拆分成一个个小模块,逐个击破. 拍照 这一步首先是将所有的书页拍好,需要注意的是要按照书的页码来拍,因为后面的排序是按照文件名进行排序的,拍照的文件名基本上是按照时间生成的,如果拍的时候乱了,到时候生成的 pdf 里面的页码也会乱掉. 用到的Python 操作库 Python 最好的地方就是有大量的第三方库能帮我们快速实现

  • python将html转成PDF的实现代码(包含中文)

    前提: 安装xhtml2pdf https://pypi.python.org/pypi/xhtml2pdf/下载字体:微软雅黑:给个地址:http://www.jb51.net/fonts/8481.html 待转换的文件:1.htm 复制代码 代码如下: <meta charset="utf8"/><style type='text/css'>@font-face {         font-family: "code2000";   

  • 如何使用python把ppt转换成pdf

    ppt要想完美的转pdf,图片,还是需要在windows下面来操作. 1,安装python3.5.1 下载地址 Windows x86-64 executable installer,windows下64位安装程序 安装界面,选中加入环境变量.这样就不用手动去加环境变量了. 2,安装pip 下载地址 pip-10.0.1.tar.gz,解压后,在解压的根目录下执行以下命令. python setup.py install 3,安装python包 pip install PyWin32 Pillo

  • 基于Python实现合并多张图片转成mp4视频

    目录 前言 一.需要调入的模块 1.imageio模块 2.Image 模块 二.实现合并多张图片转成 mp4 视频 三.优化改进一下 总结 前言 随着现代科技飞速发展和人们提升视觉上体验,利用图片生成视频的方法,确实为工作或者提升生活体验感做了很多成功案例: 1.简单的幻灯片演示,如展示旅游照片.产品展示等: 2.改编图片动画,如口红试色.时尚大片中的效果: 3.制作日记式的视频内容,将一段长时间内的照片串在一起,如婚礼纪实.Baby成长记录等: 4.制作信息图表,如将各种数据图表整合在一起以

  • Python合并pdf文件的工具

      如果你需要一个PDF文件合并工具,那么本文章完全可以满足您的要求.哈喽,大家好呀,这里是滑稽研究所.不多废话,本期我们利用Python合并把多个pdf文件合并为一个.我们提前准备了5个pdf文件,来验证代码.   源代码: import os from PyPDF2 import PdfFileReader, PdfFileWriter # 使用os模块的walk函数,搜索出指定目录下的全部PDF文件 # 获取同一目录下的所有PDF文件的绝对路径 def getFileName(filedi

  • python实现多张图片拼接成大图

    本文实例为大家分享了python实现多张图片拼接成大图的具体代码,供大家参考,具体内容如下 上次爬取了马蜂窝的游记图片,并解决了PIL模块的导入问题,现在直奔主题吧: import PIL.Image as Image import os IMAGES_PATH = 'D:\Mafengwo\photo\五月坦桑的暖风,非洲原野的呼唤\\' # 图片集地址 IMAGES_FORMAT = ['.jpg', '.JPG'] # 图片格式 IMAGE_SIZE = 256 # 每张小图片的大小 IM

  • Python使用reportlab将目录下所有的文本文件打印成pdf的方法

    本文实例讲述了Python使用reportlab将目录下所有的文本文件打印成pdf的方法.分享给大家供大家参考.具体实现方法如下: # -*- coding: utf8 -*- #~ #---------------------------------------------------------------------- import wlab #pip install wlab import reportlab.pdfbase.ttfonts #reportlab.pdfbase.pdfm

  • python爬虫实现教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 Python 教程 爬下来做成 PDF 电子书方便大家离线阅读. 开始写爬虫前,我们先来分析一下该网站1的页面结构,网页的左侧是教程的目录大纲,每个 URL 对应到右边的一篇文章,右侧上方是文章的标题,中间是文章的正文部分,正文内容是我们关心的重点,我们要爬的数据就是所有网页的正文部分,下方是用户的

  • python使用reportlab实现图片转换成pdf的方法

    本文实例讲述了python使用reportlab实现图片转换成pdf的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import os import sys from reportlab.lib.pagesizes import A4, landscape from reportlab.pdfgen import canvas f = sys.argv[1] filename = ''.join(f.split('/')[-1:])[:-4] f_j

  • Python实现将HTML转成PDF的方法分析

    本文实例讲述了Python实现将HTML转成PDF的方法.分享给大家供大家参考,具体如下: 主要使用的是wkhtmltopdf的Python封装--pdfkit 安装 1. Install python-pdfkit: $ pip install pdfkit 2. Install wkhtmltopdf: Debian/Ubuntu: $ sudo apt-get install wkhtmltopdf Redhat/CentOS sudo yum intsall wkhtmltopdf Ma

随机推荐