使用手机的文档扫描,生成的图片,制作电子书pdf。
这些图片宽高并不一样,首先统一成相同的宽高
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from pathlib import Path import cv2 import matplotlib.pyplot as plt hs=[] ws=[] for f in Path('duzhe_2316').iterdir(): img=cv2.imread(f.__str__()) hs.append(img.shape[0]) ws.append(img.shape[1]) plt.plot(hs) plt.plot(ws) plt.savefig('test2.jpg')
由图片的宽高折线图找出图片的宽高均值,在此例中,观察到图片的宽在1500附近浮动(浮动范围为100,即大部分图片的宽在1400到1600之间),图片的高在2150附近浮动(浮动范围为150,即大部分图片的高在2000到2300之间)
1 2 3 4 5 6 7 8 9 from pathlib import Path import os import cv2 os.chdir('duzhe_2316') for f in Path('.').iterdir(): img=cv2.imread(f.name,cv2.IMREAD_GRAYSCALE) imgn=cv2.resize(img,(1500,2150)) cv2.imwrite(f'../duzhe_23161/{f.name}',imgn)
灰度图像数据量更少,减少最后生成的pdf文件的体积
制作成pdf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import os,fitz import PySimpleGUI as psg from pathlib import Path doc=fitz.open() imgdir='samp_pics' # imglist=os.listdir(imgdir) # imgcount=len(imglist) imglist=list(Path(imgdir).iterdir()) imgcount=len(imglist) for i,f in enumerate(imglist): img=fitz.open(f) rect=img[0].rect pdfbytes=img.convert_to_pdf() img.close() imgPDF=fitz.open('pdf',pdfbytes) page=doc.new_page(width=rect.width,height=rect.height) page.show_pdf_page(rect,imgPDF,0) psg.OneLineProgressMeter('Import Images',i+1,imgcount) doc.save('test.pdf')
运行这个程序前,需要安装: apt install python3-tk, pip install pymupdf frontend PySimpleGUI fitz
https://pymupdf.readthedocs.io/en/latest/recipes-images.html#how-to-make-one-pdf-of-all-your-pictures-or-files How to Make one PDF of all your Pictures (or Files)
https://blog.csdn.net/weixin_39278265/article/details/106651951 给python安装tkinter模块(及各种问题的解决:如 ModuleNotFoundError: No module named ‘_tkinter’)
https://blog.csdn.net/xiaoyurainzi/article/details/128133183 解决fitz模块报错RuntimeError: Directory ‘static/‘ does not exist
9.21.11.59