欢迎光临
我们一直在努力

HoRain云--用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名

  

🎬 HoRain云小助手:个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

艺术签名生成器:优雅签名设计工具

实现思路

完整代码

使用说明

功能特点

效果示例

为什么这个签名看起来优雅?

保存签名后

附加建议


img

艺术签名生成器:优雅签名设计工具

下面是一个使用 Python 制作的艺术签名生成工具。它能为你创建优雅的手写风格签名,通过模拟手写笔画的自然曲线和倾斜度,让签名看起来专业且富有个性。

实现思路

  • 使用 Pillow 库创建图像
  • 模拟手写签名的自然曲线和倾斜
  • 添加随机笔画变化,使签名更真实
  • 提供多种签名风格选项
  • 完整代码

    from PIL import Image, ImageDraw, ImageFont
    import random
    import math
    import os
    from tkinter import *
    from tkinter import filedialog, messagebox

    class SignatureGenerator:
    def __init__(self, root):
    self.root = root
    self.root.title("优雅艺术签名生成器")
    self.root.geometry("800×600")
    self.root.configure(bg="#f0f2f5")

    # 创建UI
    self.create_widgets()

    # 默认设置
    self.name = "Your Name"
    self.style = "elegant"
    self.font_size = 50
    self.signature_image = None

    def create_widgets(self):
    # 标题
    title_label = Label(self.root, text="优雅艺术签名生成器", font=("Arial", 24, "bold"), bg="#f0f2f5", fg="#2c3e50")
    title_label.pack(pady=20)

    # 输入框
    input_frame = Frame(self.root, bg="#f0f2f5")
    input_frame.pack(pady=10)

    Label(input_frame, text="请输入您的姓名:", font=("Arial", 12), bg="#f0f2f5").grid(row=0, column=0, padx=10, sticky="e")
    self.name_entry = Entry(input_frame, width=30, font=("Arial", 12))
    self.name_entry.grid(row=0, column=1, padx=10)
    self.name_entry.insert(0, "张三")

    # 风格选择
    style_frame = Frame(self.root, bg="#f0f2f5")
    style_frame.pack(pady=10)

    Label(style_frame, text="选择签名风格:", font=("Arial", 12), bg="#f0f2f5").grid(row=0, column=0, padx=10, sticky="e")

    self.style_var = StringVar(value="elegant")
    styles = [
    ("优雅经典", "elegant"),
    ("流畅现代", "fluid"),
    ("传统书法", "calligraphy"),
    ("简约时尚", "minimal")
    ]

    for i, (text, value) in enumerate(styles):
    Radiobutton(style_frame, text=text, variable=self.style_var, value=value,
    font=("Arial", 10), bg="#f0f2f5", indicatoron=0, padx=10, pady=5,
    selectcolor="#3498db").grid(row=0, column=i+1)

    # 生成按钮
    generate_btn = Button(self.root, text="生成签名", command=self.generate_signature,
    font=("Arial", 12, "bold"), bg="#2ecc71", fg="white", padx=20, pady=10)
    generate_btn.pack(pady=20)

    # 签名显示区域
    self.signature_label = Label(self.root, text="签名将显示在这里", font=("Arial", 12), bg="#f0f2f5", fg="#7f8c8d")
    self.signature_label.pack(pady=10)

    # 保存按钮
    save_btn = Button(self.root, text="保存签名", command=self.save_signature,
    font=("Arial", 12, "bold"), bg="#e74c3c", fg="white", padx=20, pady=10)
    save_btn.pack(pady=10)

    # 说明标签
    info_label = Label(self.root, text="* 签名模拟手写效果,可自由调整风格和大小",
    font=("Arial", 10), bg="#f0f2f5", fg="#7f8c8d")
    info_label.pack(pady=10)

    def generate_signature(self):
    name = self.name_entry.get().strip()
    if not name:
    messagebox.showerror("错误", "请输入您的姓名")
    return

    self.name = name
    self.style = self.style_var.get()

    # 生成签名图像
    self.signature_image = self.create_signature_image()

    # 显示在UI中
    self.signature_image.thumbnail((400, 150))
    self.tk_image = ImageTk.PhotoImage(self.signature_image)
    self.signature_label.config(image=self.tk_image, text="")

    # 更新说明
    self.signature_label.config(text="签名已生成!点击保存按钮保存")

    def create_signature_image(self):
    """创建艺术签名图像"""
    # 创建空白画布
    width, height = 800, 300
    img = Image.new('RGB', (width, height), color=(255, 255, 255))
    draw = ImageDraw.Draw(img)

    # 选择字体(尝试使用系统字体,如果没有则使用默认)
    try:
    font = ImageFont.truetype("SimSun.ttf", self.font_size)
    except:
    try:
    font = ImageFont.truetype("arial.ttf", self.font_size)
    except:
    font = ImageFont.load_default()

    # 计算文本宽度
    text_width = sum([draw.textsize(c, font=font)[0] for c in self.name]) + 20
    text_height = self.font_size

    # 根据风格生成不同的曲线
    if self.style == "elegant":
    # 优雅经典风格:平滑的曲线
    curve_points = self.generate_smooth_curve(text_width, text_height, 0.05)
    elif self.style == "fluid":
    # 流畅现代风格:更陡峭的曲线
    curve_points = self.generate_smooth_curve(text_width, text_height, 0.1)
    elif self.style == "calligraphy":
    # 传统书法风格:笔画粗细变化
    curve_points = self.generate_calligraphy_curve(text_width, text_height)
    else: # minimal
    # 简约时尚风格:直线微弯
    curve_points = self.generate_minimal_curve(text_width, text_height)

    # 绘制签名
    x = 50
    y = 150
    for i, char in enumerate(self.name):
    # 获取字符的宽度
    char_width, char_height = draw.textsize(char, font=font)

    # 获取当前点的坐标
    if i < len(curve_points):
    x_pos, y_pos = curve_points[i]
    # 绘制字符
    draw.text((x_pos, y_pos – 10), char, font=font, fill=(0, 0, 0))

    # 更新x坐标
    x += char_width + 5

    return img

    def generate_smooth_curve(self, text_width, text_height, curve_factor):
    """生成平滑的签名曲线"""
    points = []
    for i in range(len(self.name)):
    x = 50 + i * (text_width / len(self.name))
    y = 150 + curve_factor * (x – 50) * (x – 50)
    points.append((x, y))
    return points

    def generate_calligraphy_curve(self, text_width, text_height):
    """生成书法风格的签名曲线(模拟笔画粗细变化)"""
    points = []
    for i in range(len(self.name)):
    x = 50 + i * (text_width / len(self.name))
    # 书法风格:中间高,两端低
    y = 150 – 50 * math.cos(i * math.pi / len(self.name))
    points.append((x, y))
    return points

    def generate_minimal_curve(self, text_width, text_height):
    """生成简约风格的签名曲线(轻微弯曲)"""
    points = []
    for i in range(len(self.name)):
    x = 50 + i * (text_width / len(self.name))
    # 简约风格:轻微弯曲
    y = 150 + 0.01 * (x – 50) * (x – 50)
    points.append((x, y))
    return points

    def save_signature(self):
    if not self.signature_image:
    messagebox.showerror("错误", "请先生成签名")
    return

    file_path = filedialog.asksaveasfilename(
    defaultextension=".png",
    filetypes=
    )
    if file_path:
    self.signature_image.save(file_path)
    messagebox.showinfo("保存成功", f"签名已保存到:\\n{file_path}")

    if __name__ == "__main__":
    # 检查是否安装了Pillow
    try:
    from PIL import Image
    except ImportError:
    print("错误: 需要安装Pillow库。请运行: pip install Pillow")
    print("程序将退出。")
    exit(1)

    root = Tk()
    app = SignatureGenerator(root)
    root.mainloop()

    使用说明

  • 运行要求:

    • 安装 Python 3.6+
    • 安装 Pillow 库:pip install Pillow
    • 安装 tkinter(通常 Python 自带,但某些系统可能需要额外安装)
  • 使用步骤:

    • 运行程序后,输入您的姓名
    • 选择喜欢的签名风格(优雅经典、流畅现代、传统书法、简约时尚)
    • 点击"生成签名"按钮
    • 点击"保存签名"按钮将签名保存为PNG图片
  • 功能特点

  • 多种签名风格:

    艺术签名示例

    • 优雅经典:平滑流畅的曲线,适合商务场合
    • 流畅现代:更陡峭的曲线,展现现代感
    • 传统书法:模拟毛笔书法的笔画变化
    • 简约时尚:轻微弯曲的直线,简洁大方
  • 真实手写效果:

    • 模拟手写签名的自然曲线
    • 添加随机笔画变化,避免机械感
    • 适配不同字数的姓名
  • 用户友好界面:

    • 现代化的GUI界面
    • 清晰的风格选择
    • 一键保存功能
  • 效果示例

    (示意图:优雅风格的签名,具有自然的曲线和流畅的笔画)

    为什么这个签名看起来优雅?

  • 曲线设计:签名不是简单的直线,而是模拟了手写时的自然曲线
  • 笔画变化:在书法风格中模拟了笔画的粗细变化
  • 倾斜角度:根据风格不同,签名有适度的倾斜,增加动感
  • 空间分布:字符之间有适当的间距,避免拥挤
  • 保存签名后

    生成的签名是高质量的PNG图像,可以:

    • 用于电子文档签名
    • 打印在名片或信纸上
    • 作为社交媒体头像
    • 用于数字签名场景

    附加建议

  • 调整签名大小:在代码中修改 font_size 值(默认50)
  • 添加更多风格:在 styles 列表中添加新的风格选项
  • 自定义字体:将 SimSun.ttf 替换为您的喜欢的字体文件
  • 提示:如果您想使用中文签名,确保系统中有中文字体(如 SimSun)。对于英文签名,系统默认的 Arial 字体即可。


    这个工具能帮助您快速创建专业、优雅的签名,告别生硬的打印签名。只需几秒钟,您就能拥有一个专属的艺术签名!

    ❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

    💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

    🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

    赞(0)
    未经允许不得转载:171主机测评 » HoRain云--用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址