• pdf转图片加水印压缩


    '''
    pip install pymupdf
    pip install pillow
    '''
    
    import os
    import uuid
    import fitz
    from PIL import Image, ImageDraw, ImageFont
    import zipfile
    
    basedir = "E:\1\"
    pdf = "1.pdf"
    text = "海豚传媒版权所有"
    
    
    def addzip(dir):
        zipname = str(uuid.uuid4()).replace("-", "") + ".zip"
        zipfilepath = os.path.abspath(os.path.dirname(dir)) + "\" + zipname
        f = zipfile.ZipFile(zipfilepath, 'w', zipfile.ZIP_STORED)
        filelist = os.listdir(dir)
        for p in filelist:
            f.write(os.path.join(dir, p), p)
        f.close()
        return
    
    
    # 添加水印
    def waterMark(imgfile, idx):
        image = Image.open(imgfile)
        font = ImageFont.truetype('C:WindowsFontsSTXINGKA.TTF', 36)
        # 添加背景
        new_img = Image.new('RGBA', (image.size[0] * 3, image.size[1] * 3), (0, 0, 0, 0))
        new_img.paste(image, image.size)
        # 添加水印
        font_len = len(text)
        rgba_image = new_img.convert('RGBA')
        text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
        image_draw = ImageDraw.Draw(text_overlay)
        # text_overlay = text_overlay.rotate(-45)
        image_draw.text((image.size[0], image.size[1]), text, font=font, fill=(0, 0, 0, 10))
        image_with_text = Image.alpha_composite(rgba_image, text_overlay)
        # 裁切图片
        image_with_text = image_with_text.crop((image.size[0], image.size[1], image.size[0] * 2, image.size[1] * 2))
        im_after = image_with_text.convert('RGB')
        # 保存文件
        dest = basedir + "jpg"
        if not os.path.exists(dest):
            os.mkdir(dest)
        im_after.save(dest + "\" + str(idx) + ".jpg", quality=70)
    
    
    def pdf2img(pdffile):
        idx = 1
        doc = fitz.open(pdffile)
        count = doc.pageCount
        for pg in range(count):
            # 第一页和最后一页不要
            if pg == 0:
                continue
            if pg == count - 1:
                continue
            page = doc[pg]
            rotate = int(0)
            # 每个尺寸的缩放系数为2,这将为我们生成分辨率提高四倍的图像。
            zoom_x = 1
            zoom_y = 1
            trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
            pm = page.getPixmap(matrix=trans, alpha=False)
            pngFilePath = '%s%s.png' % (basedir, idx)
            pm.writePNG(pngFilePath)
            waterMark(pngFilePath, idx)
            idx = idx + 1
    
    
    pdf2img(os.path.join(basedir, pdf))
    addzip(os.path.join(basedir, "jpg"))
    # print(str(uuid.uuid4()).replace("-", ""))

    有追求,才有动力!

    向每一个软件工程师致敬!

    by wujf

    mail:921252375@qq.com

  • 相关阅读:
    CSS
    js
    js
    js
    JS
    Service Worker 学习笔记
    JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)
    前端开发 JavaScript 规范文档
    HTML HTML5 新特性
    JS 设计模式九 -- 装饰器模式
  • 原文地址:https://www.cnblogs.com/wujf/p/15064861.html
Copyright © 2020-2023  润新知