利用python去除pdf水印

去水印只针对pdf
通过给与的水印图,找出相似水印并去除

def is_same_img(area_chart, target_img, VPT):
    """

    :param area_chart: 去水印图
    :param target_img: 目标图
    :param VPT: 阈值
    :return: 是否相似
    """

    # 规范图片尺寸
    with Image.open(area_chart) as img2:
        size = img2.size
    with Image.open(target_img) as img1:
        img1 = img1.convert('RGB')
        resize_img = img1.resize(size, Image.ANTIALIAS)  # x, y 为压缩后的宽和高  Image.ANTIALIAS  抗锯齿
    resize_img.save(target_img, quality=100)

    path = './imgs'
    if switch == 0:
        path = './'

    highfreq_factor = 4  # resize的尺度
    hash_size = 32  # 最终返回hash数值长度
    image_scale = 64
    list_file = []
    list_phash = []
    list_ahash = []
    list_dhash = []
    list_whash = []
    for file in [area_chart, target_img]:
        if os.path.splitext(file)[1] == '.png':
            path_file = os.path.join(path, file)  # 拼路径
            list_file.append(file)
            phash = imagehash.phash(Image.open(path_file), hash_size=hash_size, highfreq_factor=highfreq_factor)  # 感知哈希(perception hashing)
            ahash = imagehash.average_hash(Image.open(path_file), hash_size=hash_size)  # 平均散列(average hashing)
            dhash = imagehash.dhash(Image.open(path_file), hash_size=hash_size)  # 梯度散列(difference hashing)
            whash = imagehash.whash(Image.open(path_file), image_scale=image_scale, hash_size=hash_size, mode='db4')  # 离散小波变换(wavelet hashing)
            list_phash.append(phash)
            list_ahash.append(ahash)
            list_dhash.append(dhash)
            list_whash.append(whash)
    for i in range(len(list_file)):
        for j in range(i + 1, len(list_file)):
            phash_value = 1 - (list_phash[i] - list_phash[j]) / len(list_phash[i].hash) ** 2
            ahash_value = 1 - (list_ahash[i] - list_ahash[j]) / len(list_ahash[i].hash) ** 2
            dhash_value = 1 - (list_dhash[i] - list_dhash[j]) / len(list_dhash[i].hash) ** 2
            whash_value = 1 - (list_whash[i] - list_whash[j]) / len(list_whash[i].hash) ** 2
            value_hash = max(phash_value, ahash_value, dhash_value, whash_value)
            if (value_hash > VPT):  # 阈值设为0.7
                size_i = os.path.getsize(path + '\\' + list_file[i])
                size_j = os.path.getsize(path + '\\' + list_file[j])
                print(list_file[i], str(size_i / 1024) + 'KB')
                print(list_file[j], str(size_j / 1024) + 'KB')
                print(value_hash)
                print('***********************')
                return True
    return False


def delete_wartermark(target_path, area_chart, VPT=0.9):
    """
    :param target_path: 目标路径
    :param area_chart: 去水印图
    :param VPT: 图片相似图 阈值
    :return:  文件路径
    """
    save_pdf_path = ''
    try:
        if '.pdf' in target_path:
            with fitz.open(target_path) as pdf_document:
                for current_page in range(len(pdf_document)):
                    for image in pdf_document.getPageImageList(current_page):
                        xref = image[0]
                        pix = fitz.Pixmap(pdf_document, xref)
                        if pix.n < 4:  # this is GRAY or RGB
                            save_path = "page%s_%s.png" % (current_page, xref)
                            pix.writePNG(save_path)
                            if is_same_img(save_path, area_chart, VPT):
                                pdf_document._deleteObject(image[0])
                            if os.path.exists(save_path):
                                os.remove(save_path)
                splittext = os.path.splitext(target_path)
                save_pdf_path = splittext[-2] + '1' + splittext[-1]
                pdf_document.save(save_pdf_path)
                print('成功----删除水印')
            if os.path.exists(target_path):
                os.remove(target_path)
    except Exception as e:
        print(e)
        print('失败----删除水印')
    return save_pdf_path


pdf_document = r'C:\Users\Administrator\OneDrive\all_huaqiu\huaqiu_spider\test\input.pdf'
delete_wartermark(pdf_document, area_chart='area_chart.png', VPT=0.73)

本文参考资料:
Python操作PDF-文本和图片提取(使用PyPDF2和PyMuPDF)
Python处理PDF的实用姿势
使用PyPDF2在PDF上去除水印

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容