使用Python将图片转pdf

news2024/11/18 17:28:47

使用Python将图片转pdf

    • 1. 效果图
    • 2. 源码
    • 参考

今天需要把图片转pdf,发现迅捷pdf转换开始默认带水印了,收费版那算了😂😂,那就用Python吧,可单转,可批量转。

参考: https://blog.csdn.net/qq_53706090/article/details/128261862

1. 效果图

发现可以成功转换:
在这里插入图片描述

2. 源码

# 照片转pdf

# coding = UTF-8


# 导入Python标准库
import os
from io import BytesIO

# 导入第三方库
from PIL import Image

# 防止中文乱码
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

# 支持的图片文件格式
SUPPORT_SUFFIX = ["jpg", "jpeg", "png"]


def pic_to_pdf(image_bytes: bytes) -> bytes:
    """将单个图片转换为单张PDF

    :param image_bytes: 图片的bytes对象
    :return: PDF的bytes对象
    """
    # 将bytes对象转换为BytesIO对象
    image_bytes_io = BytesIO(image_bytes)
    # 从内存中读取图片
    image_object = Image.open(image_bytes_io)
    # 打开内存中的文件用于保存PDF
    with BytesIO() as result_bytes_io:
        # 将图片保存为单张PDF
        image_object.save(result_bytes_io, "PDF", resolution=100.0)
        # 获取内存中的文件
        data = result_bytes_io.getvalue()
    # 返回PDF的bytes对象
    return data


def batch_convert(image_path: str, pdf_path: str) -> None:
    """批量将图片转换为单张PDF

    :param image_path: 图片的文件夹
    :param pdf_path: PDF文件保存的文件夹
    """
    # 遍历文件夹下所有文件
    for root, dirs, files in os.walk(image_path, topdown=False):
        for name in files:
            # 提取文件的后缀名
            file_suffix = os.path.splitext(name)[-1].lstrip(".").lower()
            # 检测该文件格式是否受到支持
            if file_suffix not in SUPPORT_SUFFIX:
                continue
            # 拼接出图片文件的绝对路径
            source_file_path = os.path.join(root, name)
            # 拼接出PDF文件的绝对路径
            target_file_path = os.path.join(pdf_path, f"{os.path.splitext(name)[0]}.pdf")
            # 将图片文件转换为PDF文件
            with open(source_file_path, "rb") as source:
                with open(target_file_path, "wb") as target:
                    target.write(pic_to_pdf(source.read()))


# 照片转pdf
# image_path: 图片绝对路径
# pdf_path: pdf路径
def pic_convert(image_path, pdf_path):
    # 提取文件的后缀名
    file_suffix = os.path.splitext(image_path)[-1].lstrip(".").lower()
    # 检测该文件格式是否受到支持
    if file_suffix not in SUPPORT_SUFFIX:
        return
        # 将图片文件转换为PDF文件
    with open(image_path, "rb") as source:
        with open(pdf_path, "wb") as target:
            target.write(pic_to_pdf(source.read()))


image_path = 'D:/study/dataset/val/daisy/cj.jpg'
pdf_path = os.path.splitext(image_path)[0].lstrip(".") + ".pdf"
pic_convert(image_path, pdf_path)

参考

  • https://blog.csdn.net/qq_53706090/article/details/128261862

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

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

相关文章

我是如何在linux下 安装 mongoDB的

背景 接到上级任务,需要在测试环境搭建一套mongodb;对于从来没接触过mongodb的小白,但拥有多年编程经验的我来说,不虚好吧。因为我有自己做事的思考。 首先向领导确认两点: 搭建mongo db是单机版的,还是主…

自定义Veiw实战《渐变的文字》

自定义Veiw实战《渐变的文字》 前言SpannableString什么时候使用常用场景 自定义TextView控件什么时候使用实战歌词渐变的文字先看效果第一步:初始化第二步:测量文字,并确认文字绘制的起点第三步:绘制文字第四步:调用 …

Node.js安装及npm国内镜像配置

node.js中文网站下载,以16.17为例!!!! 安装 1.网站链接 CNPM Binaries Mirror (npmmirror.com) 根据自己的版本选择,我是64位选择了zip版 2.下载完成后解压 我选择的目录是(E:\Environments…

mac中在html中引入react.development.js、react-dom.development.js报错

错误描述 Uncaught ReferenceError: process is not definedUncaught Invariant Violation: ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.Inline Babel script:3 Uncaught ReferenceError: React is not defined解决 1…

react中数组列表的简单新增,删除以及修改实践

react中数组列表的简单新增,删除以及修改实践 效果示例图示例代码 index.jsx示例样式 index.scss 效果示例图 新增图片 编辑图片 示例代码 index.jsx import { useEffect, useState } from "react"; import "./index.scss";// 创建数据 fu…

WebGIS 信息系统-数据库设计

WebGIS 信息系统-数据库设计 E-R 图设计创建数据库及数据表开发环境及环境配置1 .服务器端2. 客户端1 )配置Struts22 )配置Hibernate3 )配置Spring4 )配置Web . xml 基于GIS 的交通信息系统采用PostgreSQL 为属性数据库&#xff0…

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法 现象解决方法 现象 在vm17下的ubuntu22使用上传表单时出现了这种不和谐的现象,被领导批评一通。最后费劲心思,找到了这个问题的解决方法。 解决方法 解决方法特别容易,在虚拟机的设置中&…

TypeScript 【type】关键字的进阶使用方式

导语: 在前面章节中,我们了解到 TS 中 type 这个关键字,常常被用作于,定义 类型别名,用来简化或复用复杂联合类型的时候使用。同时也了解到 为对象定义约束接口类型 的时候所使用的是 Interfaces。 其实对于前面&#…

ansible - 安装 -【kodcloud教程】

目录 目录结构、主机清单 【1】安装基础环境 【2】webserver - 安装nginx 【3】安装php环境 【4】lb-server 【5】redis安装 【6】 kodcloud 【7】wordpress-proxy ansible10.0.0.10lb-server10.0.0.11web0110.0.0.15web0210.0.0.16redis10.0.0.20 目录结构、主机清单…

[python][yolov7][深度学习]将yolov7实例分割成一个类几句代码完成实例分割任务

大家都知道,yolov7目前支持图像分类、目标检测和实例分割,而实例分割一般都是用predict.py去预测图片这个如果要引入pyqt5或着嵌入其他python模块有点麻烦,因此需要封装一个类去预测图像,这样我们可以轻松完成各种实例分割任务,封…

virtualbox安装已有的虚拟硬盘文件

按照网上安装virtualbox虚拟机操作,我是安装已有的虚拟硬盘文件。 名称是虚拟机的名称,文件夹是虚拟机安装的文件夹建议大一点。 分配内存: 对于第一次安装已有的vdi虚拟硬盘文件,这里并没有任何显示(我下面已经添…

EA代码逆向工程

下载安装 链接:https://pan.baidu.com/s/1xQ2q-_cSt_DTI3zIDvxkFw 提取码:wq83 使用教程: 构建类图 打开EA,点击左上角的图标新建项目。 起一个项目名称,"逆向工程测试"。 新建好后的页面: …

Bootstrap 网格系统

文章目录 Bootstrap 网格系统什么是网格(Grid)?什么是 Bootstrap 网格系统(Grid System)?移动设备优先策略内容布局渐进增强 Bootstrap 网格系统(Grid System)的工作原理媒体查询网格…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十一章 网络安全技术下)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、入侵检测系统1、入侵检测系统模型2、入侵检测系统分类3、入侵检测系统部署 二、VPN1、VPN工作原理2、VPN的优点3、VPN的分类4、VPN的工作原理5、VPN的主要技术 一、自学网…

使用OpenXML库替换docx文档(Word文档)中的特定字段

在批量生成Word文档的应用中,最常见的需求莫过于替换掉文档中的特定字段以生成新的文档。利用OpenXML库可轻松实现这一需求。 不完善版本 首先放出最简单然而有bug的版本: using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wor…

第6讲:使用ajax技术实现模拟百度搜索功能(xml数据)

使用ajax技术实现模拟百度搜索功能,本案例使用原生态xmlhttprequest对象,GET方法通讯,后台使用map保存搜索数据,查询到对应数据后,返回xml格式数据,前端使用responseXML属性返回xml格式数据,结合…

6.安卓移动端开发

开发概览 Android官网 提供了开发环境,也就是android平台,即android SDK,即android版本 SDK版本和API版本的关系(安卓的版本是个位数和小数形式增长,API版本是以个位数正则,所以API版本号和android版本号不…

图像梯度——Sobel、Scharr、Laplacian

图像梯度-Sobel算子 dst cv2.Sobel(src, ddepth, dx, dy, ksize) src: 图像数组变量ddepth: 图像的深度,一般填-1,表示与原始图像深度一致; cv2.CV_64F表示每一个像素点值为64位浮点数,是OpenCV定义的数据类型dx和dy分别表示水平…

车端服务器架构「升级」

过去几年,随着整车电子架构从分布式向集中式升级,域控制器(通常分为五大域:动力域、底盘域、座舱域、智驾域、车身域)带动供应链进入增值周期,背后隐藏的则是供应商的洗牌。 以座舱为例,从传统的…

远程桌面发生身份验证错误,要求的函数不受支持

windows10专业版: 解决方法: 使用微软官方建议修改本地组策略: winr弹出运行窗口,输入gpedit.msc,打开本地组策略 计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择易受攻击。 windows10家庭版&a…