美文网首页
python印章生成

python印章生成

作者: alue | 来源:发表于2022-05-21 23:03 被阅读0次

利用pyton的PIL,可以很容易的实现印章生成。

但这里细节比较多,例如姓名字数、透明度、噪点、模糊、纹理、旋转角度等等,如果都想齐全了,还得花费一番功夫。
这里记录一下算法的过程,主要过程就是

  1. 生成要印的四个字
  2. 绘制圆角矩形
  3. 在四个位置上绘用魏碑字体绘制四个字
  4. 用纹理图片上随机截取的片段,来给印章添加纹理
  5. 用高斯模糊,让印章更加真实
  6. 在word模板里,更改模板印章的透明度设置,这样后面更改图片后,印章能获得合适的透明度。
个人印章 个人印章
from random import randint

from PIL import Image, ImageDraw, ImageFont, ImageFilter
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db import models

def validate_leader(strs):
    if len(strs) < 2 or len(strs) > 4:
        raise ValidationError(u'姓名长度2~4个中文')

    for _char in strs:
        if not '\u4e00' <= _char <= '\u9fa5':
            raise ValidationError(u'姓名只能为中文')


def seal_cover_path(instance, filename):
    return f"human/seal/{instance.id}.png"


class Leave(models.Model):
leader = models.CharField('申报人', max_length=4, validators=[validate_leader, ])
stamp = models.ImageField(verbose_name='呈报人印章', null=True, blank=True, upload_to=seal_cover_path)
    
    def getChars(self):
        if len(self.leader) == 2:
            chars = self.leader + '之印'
        elif len(self.leader) == 3:
            chars = self.leader + '印'
        else:
            chars = self.leader
        return chars

    def generate_stamp(self):
        """ 生成印章算法 """
        img = Image.new("RGBA", (200, 200), (255, 255, 255, 0))
        draw = ImageDraw.Draw(img)
        draw.rounded_rectangle(((0, 0), (200, 200)), 16, outline='red', width=8)

        chars = self.getChars()
        font = ImageFont.truetype("C:/Windows/Fonts/STXINWEI.TTF", 92, encoding="utf-8")
        draw.text((98, 8), chars[0], fill='red', font=font)
        draw.text((98, 98), chars[1], fill='red', font=font)
        draw.text((2, 8), chars[2], fill='red', font=font)
        draw.text((2, 98), chars[3], fill='red', font=font)

        wl_path = settings.BASE_DIR / 'human/wl.jpg'

        img_wl = Image.open(wl_path)
        pos_random = (randint(100, 200), randint(120, 200))
        box = (pos_random[0], pos_random[1], pos_random[0] + 400, pos_random[1] + 200)
        img_wl_random = img_wl.crop(box)
        img_wl_random = img_wl_random.resize(img.size).convert('L').filter(ImageFilter.GaussianBlur(1))

        X, Y = img.size
        for x in range(X):
            for y in range(Y):
                dot = (x, y)
                img.putpixel(dot,
                             img.getpixel(dot)[:3] + (int(img_wl_random.getpixel(dot) / 255 * img.getpixel(dot)[3]),))
        # 进行一次高斯模糊,提高真实度
        self.img = img.filter(ImageFilter.GaussianBlur(0.6))

        relative_path = seal_cover_path(self, '')
        filename = settings.MEDIA_ROOT / relative_path
        if not filename.parent.exists():
            filename.parent.mkdir(parents=True, exist_ok=True)

        filename = str(filename)
        img.save(filename)
        self.stamp.name = relative_path
        self.save()
        

    def save(self, *args, **kwargs):
        """ 需要完成印章生成"""
        self.leader = self.leader.replace(' ', '')
        super(Leave, self).save(*args, **kwargs)
        # 放到后面,这样才有id
        if not self.stamp.name:
            self.generate_stamp()
wl.jpg

相关文章

  • python印章生成

    利用pyton的PIL,可以很容易的实现印章生成。 但这里细节比较多,例如姓名字数、透明度、噪点、模糊、纹理、旋转...

  • 字体库缺失冷僻字

    在python印章生成[https://www.jianshu.com/p/1f0ccf8cb740]里使用了“华...

  • 印章-公司印章制作生成器

    印章-公司印章制作生成器 实用的印章制作工具,让你拥有一个你想要的电子印章。万用印章制作工具,超强自定义模块,所有...

  • vue+iview+canvas 生成印章

    点击编辑,弹出窗口,上传授权书的同时根据执照全称生成印章,印章转化成base64传给后台。 弹窗 data met...

  • Python实现Flag生成

    title: Python实现Flag生成tags: Python,Flag,攻防 生成Flag 功能:根据不同主...

  • 理解Python中的生成器及yield关键字

    参考资料: Python生成器 python生成器到底有什么优点?

  • 053-python库PIL(三)

    上一篇:052-python库PIL(二) 一、The ImageChops Module(图像印章) chop ...

  • python生成式

    本篇将介绍Python的列表生成式,更多内容请参考:Python列表生成式 列表生成式即List Comprehe...

  • 065 Python语法之MD5

    Python2 md5生成 Python3 md5生成

  • python输出杨辉三角

    知识点 1. python中的生成器 generator python生成器 2. python中-1索引表示容器...

网友评论

      本文标题:python印章生成

      本文链接:https://www.haomeiwen.com/subject/onuhprtx.html