没想到!上周写证照小程序的博文火了

发布时间:2026/7/27 20:22:14

没想到!上周写证照小程序的博文火了 没想到上周写证照小程序的博文火了上周我在博客上随手写了一篇关于「用Python快速开发证照小程序」的教程。原本只是想记录一下自己的学习笔记结果第二天打开后台一看阅读量直接飙到了3万评论区里有程序员同行问我技术细节也有创业小白问怎么用这个工具赚钱。更有意思的是还有人私信我“博主你写的代码我直接跑起来了帮我省了找外包的一万块钱”这让我意识到原来大家都有“证照管理”的痛点。无论是个人证件身份证、驾驶证还是企业资质营业执照、专利证书日常中我们常常面临文件散乱、格式不统一、容易丢失、需要快速生成PDF或图片版本。而一个简单的证照小程序就能解决这些麻烦。今天我就把这篇爆款文章的核心内容重新整理一遍用更易懂的语言和代码示例手把手带你写一个属于自己的证照小程序。—## 为什么证照小程序这么受欢迎先问大家一个问题你手机里有多少张证件的电子版身份证照片、医保卡截图、毕业证书扫描件……是不是存得乱七八糟更糟糕的是当你需要给公司提交一份“营业执照副本法人身份证授权书”的组合文件时你还要手动拼接、调整大小、转格式——这个过程简直让人抓狂。证照小程序的核心价值在于它能把“证照管理”这件事自动化。它不仅能帮你存储、分类、搜索证照还能一键生成标准格式的PDF或图片文件。对于企业来说这能省下大量的人力成本对于个人来说它就是一个随身的“电子文件管家”。—## 技术选型与准备工作要写一个证照小程序其实不需要复杂的技术栈。这里我选择Python Flask Pillow的组合因为- Python上手快库丰富。- Flask轻量级Web框架适合快速原型。- Pillow图片处理库能轻松完成证照拼接、缩放、添加水印等操作。在开始之前请确保你的电脑上安装了Python 3.8然后通过pip安装依赖bashpip install flask pillow—## 核心功能一证照图片的快速拼接最常见的需求是把多个证照图片拼接成一张图或一个PDF。比如你要上传“身份证正面”和“身份证背面”两张图片小程序自动把它们拼接成一张A4大小的图片方便打印或提交。下面是一个简单的Python函数实现两张图片的垂直拼接python# -*- coding: utf-8 -*-from PIL import Imagedef merge_images_vertically(image_path1, image_path2, output_path): 垂直拼接两张图片并保存为一张新图 :param image_path1: 第一张图片路径 :param image_path2: 第二张图片路径 :param output_path: 输出图片路径 # 打开两张图片 img1 Image.open(image_path1) img2 Image.open(image_path2) # 获取两张图片的尺寸 width1, height1 img1.size width2, height2 img2.size # 新图片的宽度取两张图片的最大宽度高度为两张图片高度之和 new_width max(width1, width2) new_height height1 height2 # 创建新画布背景为白色 new_img Image.new(RGB, (new_width, new_height), (255, 255, 255)) # 将两张图片粘贴到新画布上 new_img.paste(img1, (0, 0)) # 第一张放在顶部 new_img.paste(img2, (0, height1)) # 第二张放在第一张下面 # 保存结果 new_img.save(output_path) print(f拼接完成文件已保存至{output_path})# 示例用法将身份证正反面拼接merge_images_vertically(id_front.jpg, id_back.jpg, id_merged.jpg)运行这段代码你会得到一个包含两张图片的纵列组合图。如果你想水平拼接只需修改粘贴时的坐标即可例如new_img.paste(img2, (width1, 0))。—## 核心功能二生成带水印的PDF证照文件企业场景下证照文件通常需要加水印如“仅供XX公司使用”以防止盗用。我们可以用Python生成一个PDF文件并在每一页添加水印。下面是一个更完整的示例它使用Pillow和Python的reportlab库需要额外安装pip install reportlab来实现python# -*- coding: utf-8 -*-from PIL import Imagefrom reportlab.lib.pagesizes import A4from reportlab.pdfgen import canvasimport osdef add_watermark_to_image(image_path, watermark_text仅供内部使用): 给单张图片添加文字水印返回处理后的图片对象 img Image.open(image_path).convert(RGBA) # 转为RGBA模式以支持透明层 width, height img.size # 创建一个透明层用于放置水印文字 watermark_layer Image.new(RGBA, img.size, (255, 255, 255, 0)) # 这里简化处理使用Pillow的Draw方法绘制文字需要字体文件 from PIL import ImageDraw, ImageFont draw ImageDraw.Draw(watermark_layer) # 选择一个字体这里使用默认字体实际开发可以指定ttf文件 font ImageFont.load_default() # 将水印文字居中放置并旋转45度 draw.text((width // 2, height // 2), watermark_text, fill(128, 128, 128, 128), fontfont, anchormm) # 旋转透明层45度简单模拟水印倾斜效果 watermark_layer watermark_layer.rotate(45, expandTrue) # 将水印层粘贴回原图注意坐标调整 img.paste(watermark_layer, (0, 0), watermark_layer) return img.convert(RGB) # 转回RGB模式用于PDFdef images_to_pdf_with_watermark(image_list, output_pdf_path): 将一组图片转换为PDF每页一张图片并添加水印 :param image_list: 图片路径列表 :param output_pdf_path: 输出PDF文件路径 # 创建PDF画布 c canvas.Canvas(output_pdf_path, pagesizeA4) page_width, page_height A4 for img_path in image_list: # 添加水印 img_with_watermark add_watermark_to_image(img_path) # 将图片临时保存为字节流这里为了演示直接保存为临时文件 temp_img_path temp_watermarked.jpg img_with_watermark.save(temp_img_path, JPEG, quality95) # 计算图片在A4页面上的缩放比例保持宽高比 img_width, img_height img_with_watermark.size scale min(page_width / img_width, page_height / img_height) draw_width img_width * scale draw_height img_height * scale # 居中绘制图片 x (page_width - draw_width) / 2 y (page_height - draw_height) / 2 c.drawImage(temp_img_path, x, y, widthdraw_width, heightdraw_height) # 添加新页面最后一页不需要添加 if img_path ! image_list[-1]: c.showPage() else: c.save() # 删除临时文件 os.remove(temp_img_path) print(fPDF生成成功文件{output_pdf_path})# 示例用法将三个证照图片生成一个PDFimages_to_pdf_with_watermark( [license1.jpg, license2.jpg, license3.jpg], certificates_watermarked.pdf)这段代码虽然有点长但思路很清晰先给每张图片添加水印然后按A4页面缩放居中排列最后生成PDF。你可以根据需要修改水印文字、颜色、位置等。—## 如何把它变成一个Web小程序有了核心功能我们还需要一个用户界面。用Flask搭建一个简单的Web服务让用户通过网页上传图片、选择操作拼接或生成PDF即可。这里给出一个最小化的Flask应用骨架pythonfrom flask import Flask, request, render_template, send_fileimport osapp Flask(__name__)UPLOAD_FOLDER uploadsos.makedirs(UPLOAD_FOLDER, exist_okTrue)app.route(/)def index(): return h1证照小程序/h1 form action/upload methodpost enctypemultipart/form-data input typefile namefiles multiplebr input typesubmit value上传并处理 /form app.route(/upload, methods[POST])def upload(): # 获取上传的文件 files request.files.getlist(files) saved_paths [] for f in files: path os.path.join(UPLOAD_FOLDER, f.filename) f.save(path) saved_paths.append(path) # 这里调用前面定义的拼接函数或PDF生成函数 # 例如merge_images_vertically(saved_paths[0], saved_paths[1], output.jpg) # 或者images_to_pdf_with_watermark(saved_paths, output.pdf) # 返回生成的文件简化示例 return send_file(output.jpg, as_attachmentTrue)if __name__ __main__: app.run(debugTrue)实际开发中你还需要添加错误处理、文件类型校验、进度提示等功能。但作为原型这个框架已经能跑起来了。—## 总结上周那篇博文之所以火是因为它解决了一个真实存在的痛点——“证照管理混乱”。而Python的强大之处在于你不需要成为全栈工程师就能用几十行代码实现一个能用的工具。回顾一下我们学到的1.证照拼接用Pillow轻松合并图片。2.水印PDF结合Pillow和reportlab生成安全文件。3.Web化用Flask搭建简单接口让用户通过浏览器操作。当然这只是一个开始。如果你想把小程序做得更专业可以考虑- 增加OCR识别自动提取证照上的文字信息。- 支持云存储如七牛、阿里云OSS。- 添加用户登录和权限管理。最后我想说不要害怕动手写代码。哪怕只是一个简单的小程序也可能帮到很多人。就像上周的博文原本只是个人笔记却意外成了爆款。说不定你的下一个作品也能改变某个人的工作方式。现在打开你的编辑器试试写一个属于自己的证照小程序吧

相关新闻