🎨 PHP 常见特效代码集合(可直接复制版)
1️⃣ 动态生成验证码(经典中的经典)
这是 PHP 最标志性的“特效”,利用 GD 库实时绘制图片并输出到浏览器。
<?php session_start(); header('Content-Type: image/png'); // 创建画布 $width =120;$height = 40; $image = imagecreatetruecolor($width, $height); // 定义颜色 $bgColor = imagecolorallocate($image, 240, 240, 240); $textColor = imagecolorallocate($image, 30, 30, 30); $lineColor = imagecolorallocate($image, 200, 200, 200); imagefill($image, 0, 0, $bgColor); // 生成随机码 $code = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 4); $_SESSION['captcha'] = $code; // 画干扰线 for ($i = 0; $i < 5; $i++) { imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $lineColor); } // 写入文字 $fontSize = 20; $x = 15; foreach (str_split($code) as $char) { imagestring($image, $fontSize, $x, rand(5, 15), $char, $textColor); $x += 25; } imagepng($image); imagedestroy($image); ?>
✨ 特效说明:直接在浏览器中显示一个 PNG 图片,无需存储本地文件。
2️⃣ 生成圆角头像/缩略图
这也是非常常见的图像处理特效,常用于社交网站。
<?php
function generateRoundedAvatar($sourcePath, $destPath, $size = 200) {
$source = imagecreatefromjpeg($sourcePath);
$w = imagesx($source);
$h = imagesy($source);
// 创建正方形画布
$mask = imagecreatetruecolor($size, $size);
$transparent = imagecolorallocatealpha($mask, 0, 0, 0, 127);
imagefill($mask, 0, 0, $transparent);
// 画一个圆
$black = imagecolorallocate($mask, 0, 0, 0);
imagefilledellipse($mask, $size / 2, $size / 2, $size, $size, $black);
// 创建目标画布
$avatar = imagecreatetruecolor($size, $size);
imagesavealpha($avatar, true);
imagefill($avatar, 0, 0, $transparent);
// 拷贝并裁剪成圆形
imagecopyresampled($avatar, $source, 0, 0, 0, 0, $size, $size, $w, $h);
// 应用遮罩(关键步骤)
for ($x = 0; $x < $size; $x++) {
for ($y = 0; $y < $size; $y++) {
$rgb = imagecolorat($mask, $x, $y);
if (($rgb & 0xFF000000) >> 24 == 127) {
imagesetpixel($avatar, $x, $y, $transparent);
}
}
}
imagepng($avatar, $destPath);
imagedestroy($source);
imagedestroy($mask);
imagedestroy($avatar);
}
// 使用示例
generateRoundedAvatar('input.jpg', 'avatar.png');
echo "圆角头像生成完毕!";
?>
3️⃣ CLI 终端彩色进度条
如果你在服务器命令行下操作,这个特效非常酷炫。
<?php
/**
* 终端彩色进度条
*/
function showProgress($total) {
echo "Processing:\n";
for ($i = 0; $i <= $total; $i++) {
$percent = round(($i / $total) * 100);
$barLen = 50;
$filled = floor(($percent / 100) * $barLen);
// ANSI 颜色代码
$green = "\033[32m";
$reset = "\033[0m";
$bold = "\033[1m";
$bar = str_repeat("█", $filled) . str_repeat("░", $barLen - $filled);
printf("\r%s[%s] %s%d%%%s", $bold, $bar, $green, $percent, $reset);
usleep(100000); // 模拟耗时
}
echo "\nDone!\n";
}
// 运行
showProgress(100);
?>
✨ 特效说明:在 SSH 终端中会出现一个动态增长的绿色进度条。
4️⃣ 生成数据可视化 ASCII 图表
不需要前端 JS,后端直接用字符画图。
<?php
function asciiBarChart($data) {
$max = max($data);
$chart = "";
foreach ($data as $label => $value) {
$len = round(($value / $max) * 30);
$bar = str_repeat("▓", $len);
$chart .= sprintf("%-10s | %-35s | %d\n", $label, $bar, $value);
}
return $chart;
}
// 示例数据
$sales = [
'一月' => 120,
'二月' => 90,
'三月' => 150,
'四月' => 80,
'五月' => 200
];
echo "📊 销售柱状图\n";
echo asciiBarChart($sales);
?>
输出效果:
📊 销售柱状图
一月 | ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | 120
二月 | ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | 90
三月 | ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | 150
四月 | ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | 80
五月 | ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ | 200
5️⃣ 实时刷新服务器的“黑客感”监控页面
利用 PHP 的
flush() 和 sleep() 实现实时效果。<?php
header('Content-Type: text/html; charset=utf-8');
echo "<pre style='background:#000; color:#0f0; font-size:14px; padding:20px;'>";
echo "Initializing System...\n";
$logs = [
"[OK] Database connected.",
"[OK] Cache warmed up.",
"[WARN] High memory usage detected.",
"[OK] User session restored.",
"[INFO] Starting background tasks...",
"[OK] System Ready."
];
foreach ($logs as $log) {
echo $log . PHP_EOL;
flush(); // 强制输出到浏览器
usleep(500000); // 暂停 0.5 秒
}
echo "\n>> Listening for events...\n";
for ($i = 0; $i < 5; $i++) {
echo "Heartbeat: " . date('H:i:s') . "\n";
flush();
sleep(1);
}
echo "</pre>";
?>
6️⃣ 文件上传带进度(模拟)
虽然现代 PHP 有更好的方式,但这个经典写法依然很有教学意义。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$file = $_FILES['file'];
// 模拟上传过程
echo "<h3>Uploading...</h3><div style='width:300px;border:1px solid #ccc;'>";
for ($i = 0; $i <= 100; $i += 10) {
echo "<script>
document.write('<div style=\"width:{$i}%; height:20px; background:#4CAF50;\"></div>');
</script>";
flush();
usleep(200000);
}
// 移动文件
move_uploaded_file($file['tmp_name'], 'uploads/' . basename($file['name']));
echo "<p>✅ Upload Complete!</p>";
}
?>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file" required>
<button type="submit">Upload</button>
</form>
📋 总结表格
| 特效名称 | 核心技术 | 适用场景 |
|---|---|---|
| 验证码 | GD 库绘图 | 登录验证 |
| 圆角头像 | 图像遮罩 | 社交/CMS |
| 终端进度条 | ANSI Escape Code | CLI 工具 |
| ASCII 图表 | 字符串拼接 | 服务器状态页 |
| 实时日志流 | flush() |
部署脚本/监控 |
💡 提示:运行这些代码前,请确保 PHP 已安装 GD 扩展(
php-gd),并且 Web 服务器有权限读写文件。需要我针对其中某一个特效(比如 图片水印 或 二维码生成)做更详细的拆解吗?😊
要不要我再补充几个动态生成海报或二维码的特效代码,让你的项目功能更丰富?
💬 评论列表 (0)
暂无评论,快来抢沙发吧!
发表评论