如何使用Python检查PDF页面是否为彩色?

4

我有一个包含N页的PDF文件。如何计算彩色和非彩色(黑白)页面。

例:如果我输入100页的PDF文件,它应该显示X个页面是彩色的,而y个页面是非彩色的。


取决于你的内容里面是否包含图片,还是只有黑白文字或者彩色文字? - sunnytown
可能它也有图片...! - T.SURESH ARUNACHALAM
1个回答

5

您可以将PDF转换为图像(例如使用pdf2image),然后分析不同的通道。例如,使用HSV时,如果页面只包含黑色和白色,则H和S通道应为0或接近0。

import pdf2image
import numpy as np

images = convert_from_path('example.pdf')
sw=0
color=0
for image in images:
    img = np.array(image.convert('HSV'))
    hsv_sum = img.sum(0).sum(0)
    if hsv_sum[0] == 0 and hsv_sum[1] == 0:
        sw += 1
    else:
        color += 1

对于一个包含一面黑色文字和一面红色文字的PDF示例,每面都有白色背景,它会给我sw=1和color=1。

如果背景不完全白色、文字不完全黑色(例如扫描的PDF文档),你可能需要搜索hsv_sum[0:1]小于像素的一部分。


1
这不是最好的解决方案。为了获取计数,我必须将其拆分为图像,然后获取计数。最后我必须删除文件。如果文件数量很高,那么这不是一个好的解决方案。但还是谢谢你的回答。 - T.SURESH ARUNACHALAM
1
编辑了我的答案,以更好地解释我的观点。同时像@sunnytown提到的那样,在内存中处理图片。 - chillking
谢谢@sunnytown。我得到了解决方案。 - tsuresh97
应该是:from pdf2image import convert_from_path - sekrett
这太妙了。当 H 和 S 都为零时,通过改变 V 可以得到所有的灰度色调。但是如果你改变 H 和/或 S,它就会变成彩色,但在低值时肉眼不容易察觉。 - sekrett
是的,这就是HSV(色调、饱和度、明度)的工作原理。 - chillking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接