2026/5/23 21:31:59
网站建设
项目流程
江苏城市建设档案馆网站,软件界面设计的标准是什么,如何网络推广优化,两个wordpress联通以下是基于 PHP7.4 的 GD 库实现图片文字写入、绘制图案、渲染已有图片、设置背景色的完整代码案例兼容 PHP7.4 及以上版本#xff1a;
前置说明
确保服务器已安装 GD 扩展#xff1a;php -m | grep gd 查看是否存在GD 库常用函数在 PHP7.4 中均兼容#xff0c;无需特殊适配…以下是基于 PHP7.4 的 GD 库实现图片文字写入、绘制图案、渲染已有图片、设置背景色的完整代码案例兼容 PHP7.4 及以上版本前置说明确保服务器已安装 GD 扩展php -m | grep gd查看是否存在GD 库常用函数在 PHP7.4 中均兼容无需特殊适配案例1设置画布背景色 写入文字?php/** * 案例1创建画布并设置背景色写入自定义文字 * 功能创建指定尺寸画布 → 设置背景色 → 写入带样式的文字 → 输出/保存图片 */// 1. 定义画布尺寸$width500;// 画布宽度$height200;// 画布高度// 2. 创建画布资源true color 真彩色画布避免颜色失真$canvasimagecreatetruecolor($width,$height);if(!$canvas){die(创建画布失败请检查GD扩展是否安装);}// 3. 定义颜色imagecolorallocate为画布分配颜色参数画布资源R, G, B$bgColorimagecolorallocate($canvas,240,248,255);// 背景色淡蓝色$textColorimagecolorallocate($canvas,220,20,60);// 文字色深红色$borderColorimagecolorallocate($canvas,100,149,237);// 边框色玉米蓝// 4. 设置画布背景色填充整个画布imagefill($canvas,0,0,$bgColor);// 5. 绘制文字需确保服务器有对应字体文件此处以系统宋体为例可替换为绝对路径$textPHP7.4 图片文字写入示例;// 要写入的文字$fontSize20;// 字体大小像素$fontFilesimsun.ttf;// 字体文件需确保路径存在WindowsC:/Windows/Fonts/simsun.ttcLinux/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf// 处理字体文件不存在的情况if(!file_exists($fontFile)){// 降级使用内置字体效果较差仅兼容英文字符中文会乱码imagestring($canvas,5,50,80,PHP7.4 Text Demo (No Font File),$textColor);}else{// 使用 imagettftext 绘制带字体的文字支持中文// 参数画布、字体大小、旋转角度、X坐标、Y坐标、颜色、字体文件、文字内容imagettftext($canvas,$fontSize,0,50,100,$textColor,$fontFile,$text);}// 6. 绘制边框可选imagerectangle($canvas,1,1,$width-2,$height-2,$borderColor);// 7. 输出图片到浏览器设置响应头确保正确渲染header(Content-Type: image/png);imagepng($canvas);// 输出PNG格式也可使用imagejpeg/jpg需调整质量// 8. 保存图片到服务器可选// imagepng($canvas, ./text_image.png);// 9. 销毁画布资源释放内存imagedestroy($canvas);?案例2绘制基础图案矩形、圆形、线条、多边形?php/** * 案例2在画布上绘制各类基础图案 * 功能创建画布 → 设置背景 → 绘制矩形/圆形/线条/多边形 → 输出图片 */// 1. 创建画布$width600;$height400;$canvasimagecreatetruecolor($width,$height);// 2. 定义颜色$bgColorimagecolorallocate($canvas,255,255,255);// 白色背景$redimagecolorallocate($canvas,255,0,0);// 红色$greenimagecolorallocate($canvas,0,255,0);// 绿色$blueimagecolorallocate($canvas,0,0,255);// 蓝色$yellowimagecolorallocate($canvas,255,255,0);// 黄色// 3. 填充背景imagefill($canvas,0,0,$bgColor);// 4. 绘制图案// 4.1 绘制矩形空心imagerectangle(画布, 左上角X, 左上角Y, 右下角X, 右下角Y, 颜色)imagerectangle($canvas,50,50,150,150,$red);// 4.2 绘制填充矩形imagefilledrectangle(参数同imagerectangle)imagefilledrectangle($canvas,200,50,300,150,$green);// 4.3 绘制圆形椭圆imageellipse(画布, 圆心X, 圆心Y, 宽, 高, 颜色)imageellipse($canvas,400,100,100,100,$blue);// 宽高相等即为圆形// 4.4 绘制填充圆形imagefilledellipse(参数同imageellipse)imagefilledellipse($canvas,500,100,80,80,$yellow);// 4.5 绘制线条imageline(画布, 起点X, 起点Y, 终点X, 终点Y, 颜色)imageline($canvas,50,200,550,200,$red);// 水平线imageline($canvas,300,200,300,350,$green);// 垂直线// 4.6 绘制多边形imagepolygon(画布, 坐标数组, 顶点数, 颜色)$polyPoints[100,300,// 顶点1150,250,// 顶点2200,300,// 顶点3180,350,// 顶点4120,350// 顶点5];imagepolygon($canvas,$polyPoints,5,$blue);// 4.7 绘制填充多边形imagefilledpolygon$polyPoints2[300,250,350,220,400,250,380,300,320,300];imagefilledpolygon($canvas,$polyPoints2,5,$yellow);// 5. 输出图片header(Content-Type: image/png);imagepng($canvas);// 6. 释放资源imagedestroy($canvas);?案例3将已有图片渲染到画布图片合成?php/** * 案例3加载已有图片并渲染到新画布支持JPG/PNG/GIF * 功能创建画布 → 加载源图片 → 缩放/平铺渲染到画布 → 输出合成图 */// 1. 定义画布尺寸$canvasWidth800;$canvasHeight600;// 2. 源图片路径替换为你的图片路径$sourceImagePath./source_image.png;// 支持jpg/png/gifif(!file_exists($sourceImagePath)){die(源图片不存在{$sourceImagePath});}// 3. 创建目标画布$canvasimagecreatetruecolor($canvasWidth,$canvasHeight);// 4. 设置画布背景色白色$bgColorimagecolorallocate($canvas,255,255,255);imagefill($canvas,0,0,$bgColor);// 5. 加载源图片自动识别格式functionloadImage($path){$infogetimagesize($path);$typeimage_type_to_extension($info[2],false);// 获取图片类型jpg/png/gif$loadFuncimagecreatefrom{$type};// 拼接加载函数名if(!function_exists($loadFunc)){die(不支持的图片格式{$type});}return$loadFunc($path);}$sourceImageloadImage($sourceImagePath);// 6. 获取源图片尺寸$sourceWidthimagesx($sourceImage);$sourceHeightimagesy($sourceImage);// 7. 渲染源图片到画布三种方式可选// 方式1原尺寸渲染坐标X100, Y100// imagecopy(目标画布, 源图片, 目标X, 目标Y, 源X, 源Y, 源宽度, 源高度)// imagecopy($canvas, $sourceImage, 100, 100, 0, 0, $sourceWidth, $sourceHeight);// 方式2缩放渲染缩放到200x200$targetWidth200;$targetHeight200;// imagecopyresampled(目标画布, 源图片, 目标X, 目标Y, 源X, 源Y, 目标宽度, 目标高度, 源宽度, 源高度)imagecopyresampled($canvas,$sourceImage,100,100,0,0,$targetWidth,$targetHeight,$sourceWidth,$sourceHeight);// 方式3平铺渲染铺满整个画布/* for ($x 0; $x $canvasWidth; $x $sourceWidth) { for ($y 0; $y $canvasHeight; $y $sourceHeight) { imagecopy($canvas, $sourceImage, $x, $y, 0, 0, $sourceWidth, $sourceHeight); } } */// 8. 可选在合成图上添加文字标注$textColorimagecolorallocate($canvas,255,0,0);$fontFilesimsun.ttf;if(file_exists($fontFile)){imagettftext($canvas,16,0,100,320,$textColor,$fontFile,合成后的图片示例);}// 9. 输出图片header(Content-Type: image/png);imagepng($canvas);// 10. 释放资源imagedestroy($sourceImage);imagedestroy($canvas);?关键注意事项字体文件路径Windows宋体路径C:/Windows/Fonts/simsun.ttcLinux需安装中文字体如DejaVuSans.ttf路径/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf中文乱码问题必须使用imagettftext 中文字体文件imagestring仅支持ASCII字符图片格式兼容imagepng()输出PNG无损支持透明imagejpeg()输出JPG可设置质量imagejpeg($canvas, null, 90)90为质量imagegif()输出GIF支持动图但GD对动图处理有限内存管理每次创建画布/加载图片后必须用imagedestroy()释放资源避免内存泄漏处理大图片时可通过ini_set(memory_limit, 256M)提升内存限制错误处理使用file_exists()检查文件是否存在使用getimagesize()验证图片有效性捕获 GD 函数返回的false避免脚本崩溃以上案例可直接运行替换字体/图片路径覆盖了PHP7.4中图片处理的核心场景如需调整样式如文字旋转、透明度、滤镜等可基于基础函数扩展。