使用 PHP 的 GD 库或者 Imagick 扩展可以实现证件照排版功能,自动把一寸证件照批量排布在一张六寸相纸画布上,自动计算位置、留白,直接输出可打印图片,适合线上证件照小程序、自助打印系统。一寸照片标准尺寸是 25mm×35mm,六寸相纸尺寸 102mm×152mm,一张六寸纸横向可以放 4 张一寸照,纵向 2 排,合计 8 张一寸照,很多自助打印店就是用这个规格。PHP 处理的时候先读取用户上传的一寸原图,校验图片宽高,新建六寸尺寸画布,循环计算每张照片的坐标,把一寸图贴到画布对应位置,最后输出 JPG 图片。开发的时候优先推荐 Imagick,色彩处理更好;GD 库部署简单,但色彩精度弱一点,服务器需要提前开启对应扩展,同时注意图片分辨率 DPI 设置,打印推荐 300DPI,不然打印出来模糊。
一、标准尺寸清单(300DPI,打印标准)
- 一寸证件照:25mm × 35mm → 295px × 413px
- 六寸相纸:102mm × 152mm → 1205px × 1795px
- 排版布局:4 列 × 2 行,一共 8 张一寸照
- 推荐边距:每张照片之间预留 2mm 间距,画布四周留边 3mm
二、两种 PHP 扩展对比表
| 扩展 | 部署难度 | 色彩效果 | 内存占用 | 适合场景 |
|---|---|---|---|---|
| Imagick | 较高,需要安装扩展 | 优秀,色彩还原好 | 中等 | 正式打印、证件照业务 |
| GD 库 | 大部分 PHP 环境默认自带 | 一般,容易偏色 | 低 | 内部工具、简单预览 |
三、开发实现步骤
- 环境准备:确认 PHP 已经开启 GD 或者 Imagick 扩展,设置足够的 memory_limit,防止大图内存溢出
- 接收上传:接收用户上传的一寸证件照,校验文件类型、大小,防止恶意文件
- 尺寸换算:按照 300DPI 换算毫米到像素,生成六寸空白画布,底色一般为白色
- 循环布局:计算每张一寸照的起始 x、y 坐标,带上间距,循环粘贴图片
- 画质输出:设置 JPG 质量 85~95,输出图片或者保存到服务器
- 前端下载:返回图片链接,用户直接下载拿去打印
四、核心注意事项清单
- DPI 只是元数据标记,PHP GD 不控制物理打印精度,只是给打印机识别
- 原图本身清晰度不够,排版之后也无法提升画质
- 可以增加可选功能:底色替换(红底 / 蓝底 / 白底)、增加裁剪框、添加裁剪线
- 安全问题:上传图片必须做文件校验,禁止直接传入本地路径,防止文件读取漏洞
- 服务器超时:大图处理耗时久,调整 max_execution_time
【常见问题】
问题 1:PHP 实现证件照排版,一寸照排六寸相纸,一张纸最多放几张一寸照?
回答 1:PHP 实现证件照排版,一寸照排到六寸相纸,标准 300DPI 布局是 4 列 2 行,一共 8 张一寸证件照,同时预留打印裁切线间距。
问题 2:PHP 做一寸照排六寸相纸,用 GD 还是 Imagick 更好?
回答 2:PHP 实现证件照排版,一寸照排六寸相纸,商用打印场景优先 Imagick,色彩表现更好;只是简单预览、快速上线,GD 库更省事。
问题 3:PHP 证件照排版一寸到六寸相纸,300DPI 对应的像素是多少?
回答 3:PHP 证件照排版一寸到六寸相纸,300DPI 下一寸照 295×413 像素,六寸相纸画布 1205×1795 像素。
问题 4:PHP 实现一寸证件照排版到六寸相纸,为什么打印出来模糊?
回答 4:PHP 实现证件照排版一寸照排六寸相纸,排版只是拼图,不会提升原图清晰度;如果原图像素不足,就算画布设置 300DPI,打印依旧模糊。
【参考资料】
[2026-11-02](PHP Imagick 证件照拼图排版示例)PHP 中文网
[2026-10-18](GD 库实现证件照一寸排版到六寸相纸)CSDN
[2026-09-05](证件照毫米转像素 DPI 换算规范)打印邦技术文档
[2026-08-20](PHP 上传图片安全处理规范)PHP 官方手册
【免责声明】
本文为 PHP 证件照排版技术方案参考,一寸照、六寸相纸尺寸为通用打印标准;不同照相馆、打印机的裁切边距要求存在差异,上线前务必实际打印测试;图片上传接口需要做好安全防护,本方案不直接用于生产,需自行增加安全校验。
