扫描二维码关注官方公众号

208 评论

0 收藏

分享

[php源码] 本地个性化个人名片生成源码(无第三方接口版)

 

马上注册,结交更多好友,享用更多功能,让你轻松玩转无忧吧。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本地个性化个人名片生成源码(无第三方接口版)
**
一、系统架构与技术栈
(一)核心功能模块
  • 信息录入:头像上传、姓名 / 职位 / 联系方式 / 个人介绍输入
  • 样式配置:预设 3 套名片模板,支持自定义 CSS 样式
  • 本地生成:直接生成 PNG 图片,支持下载保存至本地
  • 数据存储:本地 JSON 文件存储历史生成记录(可选功能)
(二)技术栈选择
  • 后端php 7.0+(处理图片生成及文件操作)
  • 图片生成:GD 库(PHP 内置图像处理扩展)
  • 存储:本地文件系统(无需数据库,数据暂存于data/目录)
二、核心代码实现(关键模块解析)
(一)HTML 表单与交互(index.html)
<!-- 名片信息录入表单 -->
<form id="cardForm" enctype="multipart/form-data">
    <input type="file" id="avatar" accept="image/jpeg,image/png" />
    <input type="text" placeholder="姓名" id="name" required />
    <input type="text" placeholder="职位" id="position" />
    <input type="text" placeholder="电话" id="phone" />
    <input type="email" placeholder="邮箱" id="email" />
    <textarea placeholder="个人介绍" id="intro" rows="3"></textarea>

    <!-- 模板选择 -->
    <select id="template">
        <option value="template1">模板1(简约商务)</option>
        <option value="template2">模板2(创意留白)</option>
        <option value="template3">模板3(科技感)</option>
    </select>

    <button type="button">生成名片</button>
</form>

<!-- 实时预览区域 -->
<div id="preview" style="min-height: 300px;"></div>

(二)JavaScript 交互逻辑(script.js)
function generateCard() {
    // 收集表单数据
    const formData = new FormData(document.getElementById('cardForm'));
    const template = document.getElementById('template').value;

    // 发起AJAX请求至PHP处理
    const xhr = new XMLHttpRequest();
    xhr.open('POST', 'generate.php');
    xhr.onload = function() {
        if (xhr.status === 200) {
            // 生成预览图片
            const img = new Image();
            img.src = xhr.responseText;
            document.getElementById('preview').innerHTML = '';
            document.getElementById('preview').appendChild(img);

            // 生成下载链接
            const a = document.createElement('a');
            a.href = xhr.responseText;
            a.download = `名片_${new Date().getTime()}.png`;
            a.click();
        }
    };
    xhr.send(formData);
}

(三)PHP 图片生成核心(generate.php)
<?php
header('Content-Type: text/plain');

// 初始化画布(标准名片尺寸:90x55mm,300dpi)
$width = 540; $height = 330; // 像素(90mm*300dpi=2700px,但此处缩小5倍便于浏览器预览)
$image = imagecreatetruecolor($width, $height);
$background = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $background);

// 处理头像上传
if ($_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
    $avatar = imagecreatefromjpeg($_FILES['avatar']['tmp_name']);
    imagecopyresized($image, $avatar, 20, 20, 0, 0, 100, 100, imagesx($avatar), imagesy($avatar));
}

// 文字绘制(根据模板加载不同样式)
$template = $_POST['template'];
$fontPath = 'fonts/NotoSansCJK-Regular.otf'; // 需自行下载字体文件

if ($template === 'template1') {
    // 简约商务模板样式
    imagettftext($image, 20, 0, 150, 60, 0x333333, $fontPath, $_POST['name']);
    imagettftext($image, 14, 0, 150, 90, 0x666666, $fontPath, $_POST['position']);
    // 联系方式
    imagettftext($image, 12, 0, 150, 120, 0x999999, $fontPath, $_POST['phone']);
    imagettftext($image, 12, 0, 150, 140, 0x999999, $fontPath, $_POST['email']);
    // 个人介绍
    imagettftext($image, 12, 0, 20, 200, 0x666666, $fontPath, $_POST['intro']);
}

// 生成PNG并输出Base64
ob_start();
imagepng($image);
$imageData = base64_encode(ob_get_clean());
imagedestroy($image);

echo "data:image/png;base64," . $imageData;
?>

三、目录结构与文件说明
├─ index.html          # 前端主页面
├─ generate.php        # 图片生成接口(PHP核心)
├─ script.js           # 前端交互逻辑
├─ style.css           # 基础样式文件(可自定义)
├─ fonts/              # 字体文件目录(需放入NotoSans等字体)
├─ data/               # 历史记录存储目录(可选JSON文件)
└─ templates/          # 模板配置目录(可扩展更多样式)
    ├─ template1.css   # 模板1样式文件
    ├─ template2.css   # 模板2样式文件
    └─ template3.css   # 模板3样式文件

四、部署与使用说明
(一)环境准备
  • 确保服务器支持 PHP 7.0 + 并启用 GD 库(php -m | grep gd检查)
  • 下载中文字体(如思源黑体)放入fonts/目录
  • 可直接通过 XAMPP/MAMP 等本地环境运行,无需域名绑定
(二)使用流程
  • 用户上传头像并填写信息
  • 选择预设模板或自定义 CSS 样式(修改style.css)
  • 点击生成,自动下载 PNG 图片并在页面预览
  • 历史记录可通过修改 PHP 代码实现本地 JSON 存储(示例未包含,需自行扩展)
(三)样式自定义
/* 修改style.css实现个性化样式 */
#preview img {
    max-width: 300px; /* 调整预览尺寸 */
    box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* 添加阴影效果 */
}

/* 模板1样式调整 */
.template1 .name {
    font-size: 24px;
    color: #2c3e50;
    font-weight: bold;
}

五、功能扩展建议
(一)进阶功能开发
  • 多模板管理:在templates/目录新增 JSON 配置文件,实现模板参数化管理
  • 数据持久化:增加本地 JSON 文件存储历史生成记录(示例代码可参考):
// 保存历史记录(在generate.php中添加)
$history = json_decode(file_get_contents('data/history.json'), true) ?: [];
$history[] = [
    'time' => time(),
    'name' => $_POST['name'],
    'image' => $imageData
];
file_put_contents('data/history.json', json_encode($history));

  • 二维码生成:集成 PHP QR Code 库,支持生成联系方式二维码
(二)安全优化
  • 头像上传添加文件类型校验:
// 在前端限制文件类型
document.getElementById('avatar').addEventListener('change', function(e) {
    const file = e.target.files[0];
    if (!file.type.startsWith('image/')) {
        alert('请上传图片文件');
        this.value = null;
    }
});

  • PHP 端添加文件大小限制(示例限制 2MB):
if ($_FILES['avatar']['size'] > 2 * 1024 * 1024) {
    die('头像文件过大');
}

六、常见问题解决方案
(一)头像无法显示
  • 检查generate.php中头像处理代码,确保 GD 库支持 JPEG/PNG 格式
  • 确认上传文件路径正确,可通过var_dump($_FILES)调试
(二)中文字体显示乱码
  • 确保fonts/目录存在有效中文字体文件
  • 在 PHP 绘制文字时指定正确的字体路径:
$fontPath = __DIR__ . '/fonts/NotoSansCJK-Regular.otf';

(三)生成图片模糊
  • 调整画布尺寸为实际打印尺寸(如 90mm*55mm@300dpi 对应 2700x1650 像素)
  • 优化图片压缩参数:
imagepng($image, null, 9); // 0-9压缩级别,9为最高压缩

通过以上源码方案,可快速搭建一个完全本地化的个人名片生成系统,支持头像上传、多模板切换及个性化信息录入。用户无需依赖第三方接口,所有数据均在本地处理,确保隐私安全与长期可用。如需扩展更多模板或功能,只需修改对应的 HTML/CSS/PHP 代码即可,非常适合个人用户或小型团队使用。
截图202505192259307562.png
https://www.123865.com/s/vYGlVv-NAApH?提取码:t8zM



捷云鲸技术社区(bbs.jieyunjing.com)免责声明:
使用本社区服务即视为同意本声明全部条款。
1. 本社区所有技术、工具及内容仅限**学习研究**使用,旨在提升安全技术水平,严禁用于非法、商业及其他不良用途,违规后果由使用者自行承担。
2. 社区内容及资源来源于网络,仅代表发布者个人观点,与本社区无关,相关法律责任由发布者自负。
3. 资源版权归原作者所有,用户下载后须在**24小时内删除**,版权争议与本社区无关。
4. 禁止任何破坏社区正常运营的行为,违规将视情节处理,社区保留追责权利。
5. 本社区坚决支持正版,如涉及侵权,请通过站长邮箱或QQ联系删除。
6. 本社区对本声明拥有最终解释权,可适时修改并公示生效。
站长邮箱:jieyunjingvip@qq.com
站长QQ:4040068
捷云鲸社区bbs.jieyunjing.com
回复

举报 使用道具

全部回复 (208)
查看全部
支持一下无忧技术吧
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

支持一下无忧技术吧
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

谢谢楼主,共同发展无忧技术吧
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

无忧技术吧 我是来刷分的,嘿嘿
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

不知该说些什么。。。。。无忧技术吧 。就是谢谢
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

无忧技术吧 帮帮顶顶!!
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

无忧技术吧 写的真的很不错
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

无忧技术吧 好好 学习了 确实不错
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

无忧技术吧 好好 学习了 确实不错
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

admin 实名认证
管理员
主题 1380
回复 75
粉丝 1

灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老 沙发王 源码大师 在线王 终身成就 机器王 知识库 土豪 活跃会员 最佳新人 热心会员