自学内容网 自学内容网

用python将一个扫描pdf文件改成二值图片组成的pdf文件

使用墨水屏读书现在似乎越来越流行,这确实有一定的好处,例如基本不发热,电池续航时间超长,基本不能游戏所以有利于沉浸式阅读,还有不知道是不是真的有用的所谓防蓝光伤害。但是,如果阅读的书籍是扫描图片组成的pdf,如果扫描的时候用的彩色模式,那么这种书籍在墨水屏上有点灰蒙蒙的,如果转换为256级灰度图片时最高灰度值太低,更加难以看清,这时候就可以考虑将这个pdf文件转换成二值图片(即每个像素不是白色就是纯黑的黑色)组成的pdf,这样效果就很好了。

先看看在PC上两种不同pdf文件的效果对比:

转换后的二值图片pdf效果:

转换前的效果:

尽管在非黑白墨水屏的设备上彩色pdf文件读起来更舒适,但是在黑白墨水屏上却刚好相反。下面的python程序就可以实现上述效果的转换(程序注释中标明的库的版本是本人测试环境中的版本,并非必须。其他版本可能也能够成功运行):

###############################################################
# 将彩色或灰度扫描pdf文件转换为二值的黑白pdf文件,在墨水屏上阅读时更为清晰 #
###############################################################

import fitz # pip install pymupdf==1.24.14
import numpy as np # pip install numpy==2.1.1
from PIL import Image # pip install pillow==10.4.0

file = 'test.pdf'
pdf_pages = fitz.open(file)
img_list = []
try:
    for page in pdf_pages:
        # 获取页面的图片数据,类型为fitz.Pixmap
        pixmap = page.get_pixmap()
        # 解码为 np.uint8类型的np.array
        image_array = np.frombuffer(pixmap.samples, dtype=np.uint8).reshape(pixmap.height, pixmap.width, pixmap.n)
        # 转换为pillow.Image
        image = Image.fromarray(image_array)
        # 将彩色图片转换为黑白图片
        image = image.convert('L')
        # 获取图片的像素数据
        pixels = image.load()
        # 获取图片的宽度和高度
        width, height = image.size
        # 设定阈值,可根据实际情况调整
        threshold = 198
        # 遍历每个像素点进行二值化处理
        for y in range(height):
            for x in range(width):
                # 获取当前像素的灰度值
                gray_value = pixels[x, y]
                # 小于阈值的像素点改成黑色,大于阈值的像素点改成白色
                if gray_value < threshold:
                    pixels[x, y] = 0
                else:
                    pixels[x, y] = 255
            # 将转换的二值图片加入列表
            img_list.append(image)
    # 使用pillow库的Image另存为pdf文件功能将二值图片合并为一个pdf文件。resolution决定了页面大小
    img_list[0].save('test_threshold.pdf',"PDF", resolution=60.0, save_all=True, append_images=img_list[1:])
except Exception as e:
    print(e)
pdf_pages.close()


原文地址:https://blog.csdn.net/yivifu/article/details/143983328

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!