未知文件扩展名将图像转换为 pdf 失败
Convert image to pdf fail by unknow file extension
我有以下代码循环遍历多个文件夹中具有任何扩展名的所有图像,然后将这些图像转换为 pdf
我卡在保存pdf文件的最后一行
from PIL import Image
import os
path = 'MAIN'
ext = ['.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff']
for root, dirs, files in os.walk(path):
for file in files:
if(file.endswith(tuple(ext))):
sFilePath = os.path.join(root,file)
print(sFilePath.split('.')[0])
img = Image.open(sFilePath)
img = img.convert('RGB')
img.save(os.path.join(sFilePath.split('.')[0], '.pdf'))
还有一点需要补充的是图片文件转pdf后删除
@martineau 至于你提供的很棒的解决方案,我试图改变我使用 img2pdf 将图像转换为 pdf 的方式
这是我的尝试
import img2pdf
with open(path_object.parent / (path_object.stem + '.pdf'), 'wb') as f:
f.write(img2pdf.convert(str(path_object)))
对于带有 alpha 通道的图像,我收到了这条消息
Image contains an alpha channel which will be stored as a separate soft mask (/SMask) image in PDF.
这是与 alpha 通道图像相关的错误消息的快照
您可以使用 os.path.splitext()
函数获取图像文件名的基本部分,然后使用 os.path.join()
将其与您想要的 .pdf
扩展名组合起来。 (请注意,将其转换为 RGB
与将其转换为 PDF 格式 而非 相同。)
from PIL import Image
import os
path = './'
ext = ['.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff']
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(tuple(ext)):
src_image_path = os.path.join(root, file)
base_name = os.path.splitext(file)[0]
img = Image.open(src_image_path)
img = img.convert('RGB')
img.save(os.path.join(root, base_name+'.pdf'))
另一种使用 pathlib
module which allows file and folder paths to be tried as objects and manipulated via an object-oriented programming paradigm 或模型做事的方法——这通常会产生非常简洁的代码:
from pathlib import Path
from PIL import Image
path = Path('./images')
exts = {'.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff'}
for path_object in path.glob('**/*'):
if path_object.is_file() and path_object.suffix in exts:
img = Image.open(path_object)
img = img.convert('RGB')
img.save(path_object.parent / (path_object.stem+'.pdf'))
我有以下代码循环遍历多个文件夹中具有任何扩展名的所有图像,然后将这些图像转换为 pdf 我卡在保存pdf文件的最后一行
from PIL import Image
import os
path = 'MAIN'
ext = ['.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff']
for root, dirs, files in os.walk(path):
for file in files:
if(file.endswith(tuple(ext))):
sFilePath = os.path.join(root,file)
print(sFilePath.split('.')[0])
img = Image.open(sFilePath)
img = img.convert('RGB')
img.save(os.path.join(sFilePath.split('.')[0], '.pdf'))
还有一点需要补充的是图片文件转pdf后删除
@martineau 至于你提供的很棒的解决方案,我试图改变我使用 img2pdf 将图像转换为 pdf 的方式 这是我的尝试
import img2pdf
with open(path_object.parent / (path_object.stem + '.pdf'), 'wb') as f:
f.write(img2pdf.convert(str(path_object)))
对于带有 alpha 通道的图像,我收到了这条消息
Image contains an alpha channel which will be stored as a separate soft mask (/SMask) image in PDF.
这是与 alpha 通道图像相关的错误消息的快照
您可以使用 os.path.splitext()
函数获取图像文件名的基本部分,然后使用 os.path.join()
将其与您想要的 .pdf
扩展名组合起来。 (请注意,将其转换为 RGB
与将其转换为 PDF 格式 而非 相同。)
from PIL import Image
import os
path = './'
ext = ['.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff']
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(tuple(ext)):
src_image_path = os.path.join(root, file)
base_name = os.path.splitext(file)[0]
img = Image.open(src_image_path)
img = img.convert('RGB')
img.save(os.path.join(root, base_name+'.pdf'))
另一种使用 pathlib
module which allows file and folder paths to be tried as objects and manipulated via an object-oriented programming paradigm 或模型做事的方法——这通常会产生非常简洁的代码:
from pathlib import Path
from PIL import Image
path = Path('./images')
exts = {'.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff'}
for path_object in path.glob('**/*'):
if path_object.is_file() and path_object.suffix in exts:
img = Image.open(path_object)
img = img.convert('RGB')
img.save(path_object.parent / (path_object.stem+'.pdf'))