使用手机的文档扫描,生成的图片,制作电子书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