情景:找了本电子书《PYTHON面向对象编程指南 [(美)STEVEN F.LOTT著;张心韬,兰亮译][人民邮电出版.pdf》想要啃一下,
发现电子书里字是灰色的,看起来累眼睛,重新找没有找到更清晰的版本,决定自己修改字体颜色。
1. 首先想要直接用Adobe Acrobat DC直接修改颜色,但这个软件的处理是先识别文字,后更改颜色,速度比较。
2. 电子书不是彩色的,就两种颜色,灰色和白色,所以想到了把所有的灰色改为黑色,百度了一下发现像素值这个东西:0为黑色,256为白色。用Adobe Acrobat DC将PDF转为.jpg图片,直接操作图片,再将图片合并为PDF。
转换成图片就不说了,用Adobe Acrobat DC将PDF导出为图片即可,以下是Python转换代码:
import os
from PIL import Image
dirs = input('请输入文件路径:')
filenames = os.listdir(dirs)
boundary_value = 230 #设置色素边界值,可以试几次,找到合适值,如果这个值太大,字体会有黑色阴影
for filename in filenames:
image = Image.open(dirs+"\\"+ filename)
photo = image.convert('L') #将彩色图像转换为灰度(模式“ L”),P为调色板模式
photo.save(dirs+"\\"+ filename)
list = []
for i in range(256):
if i < boundary_value: #如果图片中某个像素点的像素小于边界值,设置为黑色
list.append(0)
else:
list.append(1) #大于边界值,设置为白色
photo_new = photo.point(list,'1') #将list[]的像素值映射到图像中,形成新的图片
photo_new.save(dirs+"\\"+ filename)
备注:解释photo.point()
此处的’1‘如果不写,和源图片的convert(mode)的mode一致,灰度转换中为L,则无亮度波动,全黑。转换灰度(“ L”)或“ RGB”的默认方法图像转换为双层图像(模式“ 1”)使用Floyd-Steinberg抖动以近似原始图像的亮度水平。如果抖动为“无”,所有大于128的值均设置为255(白色),所有其他值都设为0(黑色)。要使用其他阈值,请使用 #PIL.Image.Image.point`方法。
转换之后的图片:
最后利用Adobe Acrobat DC,创建--将文件合并为单个PDF--全选图片--合并--另存为,即可