网站访客qq抓取,网站基本建设投资内容,如何分享自己的wordpress,wordpress最干净的搬家教程使用墨水屏读书现在似乎越来越流行#xff0c;这确实有一定的好处#xff0c;例如基本不发热#xff0c;电池续航时间超长#xff0c;基本不能游戏所以有利于沉浸式阅读#xff0c;还有不知道是不是真的有用的所谓防蓝光伤害。但是#xff0c;如果阅读的书籍是扫描图片组…使用墨水屏读书现在似乎越来越流行这确实有一定的好处例如基本不发热电池续航时间超长基本不能游戏所以有利于沉浸式阅读还有不知道是不是真的有用的所谓防蓝光伤害。但是如果阅读的书籍是扫描图片组成的pdf如果扫描的时候用的彩色模式那么这种书籍在墨水屏上有点灰蒙蒙的如果转换为256级灰度图片时最高灰度值太低更加难以看清这时候就可以考虑将这个pdf文件转换成二值图片即每个像素不是白色就是纯黑的黑色组成的pdf这样效果就很好了。
先看看在PC上两种不同pdf文件的效果对比
转换后的二值图片pdf效果 转换前的效果 尽管在非黑白墨水屏的设备上彩色pdf文件读起来更舒适但是在黑白墨水屏上却刚好相反。下面的python程序就可以实现上述效果的转换程序注释中标明的库的版本是本人测试环境中的版本并非必须。其他版本可能也能够成功运行
###############################################################
# 将彩色或灰度扫描pdf文件转换为二值的黑白pdf文件在墨水屏上阅读时更为清晰 #
###############################################################import fitz # pip install pymupdf1.24.14
import numpy as np # pip install numpy2.1.1
from PIL import Image # pip install pillow10.4.0file test.pdf
pdf_pages fitz.open(file)
img_list []
# 二值化阈值可根据实际情况调整
threshold 200
try:for page in pdf_pages:# 获取页面的图片数据类型为pymupdf.Pixmappixmap page.get_pixmap()# 解码为 np.uint8类型的numpy.ndarrayimage_array np.frombuffer(pixmap.samples, dtypenp.uint8).reshape(pixmap.height, pixmap.width, pixmap.n)# 转换为PIL.Image.Image,通过三行代码将pymupdf.Pixmap转换成了PIL.Image.Imageimage Image.fromarray(image_array)# 将彩色图片转换为黑白图片image image.convert(L)# 获取图片的像素数据pixels image.load()# 获取图片的宽度和高度width, height image.size# 遍历每个像素点进行二值化处理for y in range(height):for x in range(width):# 获取当前像素的灰度值gray_value pixels[x, y]# 小于阈值的像素点改成黑色大于阈值的像素点改成白色if gray_value threshold:pixels[x, y] 0else:pixels[x, y] 255# 将转换的二值图片加入列表img_list.append(image)# 将图片列表合并为一个pdf文件resolution取值越大pdf文件页面就可以放大更多倍数而不出现锯齿img_list[0].save(ftest_{threshold}.pdf,PDF, resolution100.0,save_allTrue, append_imagesimg_list[1:])
except Exception as e:print(e)
pdf_pages.close()