Python如何將圖片轉換為PDF格式

引言

在日常工作和學習中,我們經常需要將多張圖片合并成一個PDF文件,以便于分享或打印。Python提供了多種庫來實現這一需求,本文將詳細介紹三種常用的方法:img2pdf庫Pillow庫PyMuPDF庫,并附上完整的代碼示例。

方法一:使用img2pdf庫

簡介

img2pdf是一個專門用于將圖片轉換為PDF的高效工具,支持多種圖片格式(如JPEG、PNG等),且轉換過程中不會損失圖片質量。

安裝

pip install img2pdf

代碼示例

import img2pdf# 定義圖片路徑列表
image_paths = ['image1.jpg', 'image2.png', 'image3.jpeg']# 將圖片轉換為PDF字節流
pdf_bytes = img2pdf.convert(image_paths)# 保存為PDF文件
with open('output.pdf', 'wb') as f:f.write(pdf_bytes)print("PDF文件已成功生成!")

優勢

  • 高效快速:直接將圖片數據嵌入PDF,無需重新編碼。
  • 無損轉換:保持原始圖片質量。
  • 支持多圖:自動將多張圖片分頁到同一PDF中。

方法二:使用Pillow庫

簡介

Pillow是Python中常用的圖像處理庫,支持打開、編輯和保存多種圖片格式,也可用于將圖片轉換為PDF。

安裝

pip install Pillow

代碼示例(單張圖片)

from PIL import Image# 打開圖片
image = Image.open('input.jpg')# 保存為PDF(默認分辨率72DPI)
image.save('output.pdf', 'PDF', resolution=300)  # 設置分辨率為300DPIprint("單張圖片已轉換為PDF!")

代碼示例(多張圖片合并)

from PIL import Image
import os# 定義圖片路徑列表
image_paths = ['image1.jpg', 'image2.png', 'image3.jpeg']# 打開所有圖片并轉換為RGB模式
images = [Image.open(img).convert('RGB') for img in image_paths]# 保存第一張圖片為PDF,并追加剩余圖片
images[0].save('combined.pdf','PDF',save_all=True,append_images=images[1:]
)print("多張圖片已合并為PDF!")

注意事項

  • 分辨率調整:通過resolution參數可優化PDF清晰度。
  • 模式轉換:確保圖片為RGB模式,否則可能無法保存為PDF。

方法三:使用PyMuPDF庫

簡介

PyMuPDF(即fitz)是一個功能強大的PDF處理庫,支持添加圖片、調整頁面布局等高級操作。

安裝

pip install pymupdf

代碼示例

import fitz  # PyMuPDF的別名# 創建空白PDF文檔
doc = fitz.open()# 添加圖片到PDF
for img_path in ['image1.jpg', 'image2.png']:img = fitz.open(img_path)  # 打開圖片rect = fitz.Rect(0, 0, img.media_box.width, img.media_box.height)page = doc.new_page(width=rect.width, height=rect.height)  # 創建新頁面page.insert_image(rect, filename=img_path)  # 插入圖片# 保存PDF
doc.save('output.pdf')
doc.close()print("PDF文件已生成!")

優勢

  • 靈活布局:可自定義頁面大小、邊距等。
  • 高級功能:支持添加水印、合并PDF等操作。

方案對比

方法適用場景優點缺點
img2pdf批量轉換、追求速度和無損質量快速、高效、無損僅支持基礎轉換
Pillow單張圖片轉換、簡單合并輕量級、易用多圖合并需額外處理
PyMuPDF需要定制PDF布局或高級功能功能強大、靈活學習成本稍高

常見問題解答

1. 如何調整PDF的頁面大小?

  • img2pdf:通過layout_fun參數自定義布局(需指定紙張尺寸)。
  • PyMuPDF:在new_page中設置widthheight參數。

2. 轉換后的PDF文件過大怎么辦?

  • 使用img2pdf時,確保圖片格式為JPEG或PNG(已壓縮格式)。
  • 通過Pillowsavefig參數調整分辨率(如dpi=150)。

3. 支持哪些圖片格式?

  • 所有方法均支持JPEG、PNG、BMP等常見格式。
  • img2pdf還支持TIFF、WebP等格式。

總結

  • 推薦方案
    • 批量轉換:優先使用img2pdf庫。
    • 簡單需求:選擇Pillow庫。
    • 高級定制:使用PyMuPDF庫。

通過本文的三種方法,您可以輕松實現圖片到PDF的轉換,并根據具體需求選擇最合適的工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94914.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python如何合并兩個Excel文件

引言 在日常數據處理中,合并Excel文件是常見需求。Python提供了多種庫(如pandas、openpyxl)來實現這一操作。本文將詳細介紹兩種主流方法,并附上完整代碼示例,幫助您高效完成Excel合并任務。 方法一:使用pa…

【SQL進階】用EXPLAIN看透SQL執行計劃:從“盲寫“到“精準優化“

用EXPLAIN洞察SQL執行計劃:從"盲目編寫"到"精準優化" 很多開發者在編寫SQL時僅憑直覺,直到查詢超時才發現問題。MySQL內置的EXPLAIN工具能提前揭示查詢執行邏輯,幫助預防性能隱患。本文將帶你掌握EXPLAIN的核心用法&…

電影藝術好,電影知識得學

關于電影應該談什么導演風格、演員技術、劇本結構、票房、政治因素等。一、紙上談電影電影制作期:研發、前制、拍攝、后制、發行。一般成員只在某個時期出現。制片和導演會從頭監督到尾。研發期: 劇本概念發想與成形的時期。創作自由度比較大&#xff0c…

FPGA學習筆記——簡易的DDS信號發生器

目錄 一、任務 二、分析 三、ROM IP核配置 四、Visio圖 五、代碼 (1).v代碼 (2)仿真代碼 六、仿真 七、實驗現象 一、任務 用串口模塊,用上位機發送指令,FPGA接收,然后輸出對應的波形&…

在NVIDIA Orin上用TensorRT對YOLO12進行多路加速并行推理時內存泄漏 (中)

接上篇 在NVIDIA Orin上用TensorRT對YOLO12進行多路加速并行推理時內存泄漏(上) 通過上篇的分析,發現問題在采集數據到傳入GPU之前的階段。但隨著新一輪長時間測試發現,問題依然存在。 如上圖,在運行20多分鐘內存開始…

計數組合學7.17(Murnaghan–Nakayama 規則 )

7.17 Murnaghan–Nakayama 規則 我們已經成功地用基 mλm_\lambdamλ?、hλh_\lambdahλ? 和 eλe_\lambdaeλ? 表示了 Schur 函數 sλs_\lambdasλ?。本節我們將考慮冪和對稱函數 pλp_\lambdapλ?。一個斜分劃 λ/μ\lambda / \muλ/μ 是連通的,如果其分拆圖…

使用 jlink 構建輕巧的自定義JRE

從 JDK 9 開始,Oracle JDK 和 OpenJDK 不再默認包含獨立的 JRE 目錄,而是提供了 jlink 工具(Java 鏈接器),允許你根據需求自定義生成最小化的 JRE(包含必要的模塊)。以下是使用 jlink 生成 JRE …

[IOMMU]面向芯片/SoC驗證工程的IOMMU全景速覽

面向芯片/SoC驗證工程的IOMMU全景速覽 摘要:面向芯片/SoC 驗證工程的 IOMMU 全景速覽:包含基礎概念、主流架構要點(ARM SMMU、Intel VT?d、RISC?V IOMMU),Linux 軟件棧關系,SoC 上的驗證方法(功能、錯誤、性能、系統化流程和覆蓋),以及一個可用的“通用 IOMM…

Jenkins全鏈路教程——Jenkins用戶權限矩陣配置

在企業級CI/CD場景中,“權限混亂”往往比“構建失敗”更致命——測試員誤刪生產流水線、實習生修改關鍵插件配置、多團隊共用賬號導致責任無法追溯……這些問題,99%都能用權限矩陣徹底解決!今天,我們不僅會拆解權限矩陣的底層邏輯…

庫函數蜂鳴器的使用(STC8)

使用庫函數控制蜂鳴器(STC8) 在STC8系列單片機中,可以通過庫函數或直接操作寄存器來控制蜂鳴器。以下是基于STC8庫函數的常用方法: GPIO板蜂鳴器 #include "GPIO.h" #include "Delay.h"void GPIO_config()…

redis8.0.3部署于mac

macOS11因版本過低,安裝redis時,Homebrew和源碼編譯兩種方式都無法成功。將操作系統升級至macOS15再安裝。Redis(Remote Dictionary Server)是一個開源的內存數據庫,遵守 BSD 協議,它提供了一個高性能的鍵值…

【和春筍一起學C++】(三十三)名稱空間的其他特性

目錄 嵌套式名稱空間 拓展——未命名的名稱空間 嵌套式名稱空間 示例代碼1: namespace electronicEquipment {namespace computer{double price 4999.0;string modelNumber;string name;}namespace ElectronicWatch{double price 99.0;string modelNumber;stri…

異步電動機負載運行特性全解析

異步電動機負載運行特性詳解 ——從空載到負載的完整分析一、為什么需要再談“負載運行” 在上一篇《感應電動機空載特性深度剖析》中,我們已經看到:空載時,若定子加額定電壓,轉子轉速 $n \approx n_s$(同步轉速&#…

使用 Ansys Discovery 進行動態設計和分析

Ansys Discovery 是一款多功能工具,為創建模型、探索仿真設計和分析解決方案提供了一個單一的交互式工作區。它允許用戶使用直接建模技術創建和修改幾何結構,定義仿真并與結果實時交互。Discovery 支持結構、流體流動、熱和電磁設計,提供直觀…

力扣熱題100-----118.楊輝三角

案例 給定一個非負整數 numRows,生成「楊輝三角」的前 numRows 行。 在「楊輝三角」中,每個數是它左上方和右上方的數的和。 示例 1: 輸入: numRows 5 輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 輸入: numRows 1 輸出: [[1]] 提示: 1 …

NTP /Chrony 網絡時間協議

一、NTP(network time protocol)網絡時間協議:實現時間同步,讓設備時間與國際標準時間保持一致設備日志、服務日志需要記錄時間分布式系統(分布式數據庫、分布式緩存、分布式儲存、消息隊列)時間戳&#xf…

VSCode 刷 LeetCode 算法題配置教程

LeetCode 在線刷題地址:https://leetcode-cn.com/ 一、安裝 Node.js 環境 LeetCode 插件依賴 node.js 運行環境,因此必須先安裝: 前往官網下載安裝:https://nodejs.cn/download/下載好的壓縮包解壓,可以看到當前文件…

非常簡單!從零學習如何免費制作一個lofi視頻

想必大家在網上會看到如下類似的音樂頻道,這類頻道都只是上傳簡單的Lo-Fi音樂帶著循環播放的背景就可以賺錢。 那么上面的效果如何實現的呢?今天做一個可以免費制作lo-Fi音樂的教程。 Lo-Fi音樂: Lo-Fi音樂是一種以低保真度和模擬音色為特點…

基于 RAUC 的 Jetson OTA 升級全攻略

📖 推薦閱讀:《Yocto項目實戰教程:高效定制嵌入式Linux系統》 🎥 更多學習視頻請關注 B 站:嵌入式Jerry 基于 RAUC 的 Jetson OTA 升級全攻略 0. 引子:常見問題 在 Jetson 平臺做 OTA 升級時,你可能會問&…

MySQL 主備(Master-Slave)復制 的搭建

一、主備架構簡介 Master(主庫):負責處理所有寫操作(INSERT/UPDATE/DELETE),并記錄二進制日志(binlog)。Slave(備庫):從主庫拉取 binlog&#xff…