PHP使用imagefilledpolygon绘制多边形如何设置边框粗细与颜色
你使用的GD库的imagefilledpolygon函数本身仅支持填充色配置,要实现带自定义粗细、颜色的边框,需要在绘制完填充多边形后,额外调用边框绘制接口即可,具体实现如下:
实现步骤
- 第一步:在绘制填充多边形的代码后,先声明边框的颜色(支持透明效果)
- 第二步:用
imagesetthickness函数设置边框的像素粗细 - 第三步:调用
imagepolygon函数,传入和填充多边形完全相同的顶点坐标,即可完成边框绘制
注意:你当前代码中imagealphablending($image, false);的操作要放在边框绘制完成之后执行,否则透明通道配置会导致边框无法正常渲染。
修改后完整代码
public function draw(){ $image_src = DIR_UPLOADS . 'face.png'; list($width, $height) = getimagesize(DIR_UPLOADS . 'face.png'); $image = imagecreatefrompng($image_src); //$image = imagecreatetruecolor(400, 300); // 多边形透明背景色 $poly_bg_color = imagecolorallocatealpha($image, 207, 199, 186, 50); $values = array( 0, 0, 150, 250, 350, 250 ); // 绘制填充多边形 imagefilledpolygon($image, $values, ((count($values)) / 2 ), $poly_bg_color); // ====== 新增边框配置 开始 ====== // 定义边框颜色:RGBA最后一个参数0为完全不透明,127为完全透明,可按需调整 $poly_border_color = imagecolorallocatealpha($image, 255, 0, 0, 0); // 设置边框粗细,单位为像素 imagesetthickness($image, 3); // 绘制多边形边框,坐标参数和填充多边形保持一致即可 imagepolygon($image, $values, count($values)/2, $poly_border_color); // ====== 新增边框配置 结束 ====== // 透明背景配置需放在边框绘制之后执行 imagealphablending($image, false); imagesavealpha($image, true); $transparentindex = imagecolorallocatealpha($image, 255, 255, 255, 127); imagefill($image, 0, 0, $transparentindex); imagepng($image, DIR_UPLOADS . 'out.png', 9); echo "<img src='/uploads/out.png?v=" . time() . "' />"; imagedestroy($image); }
内容的提问来源于stack exchange,提问作者Chhorn Soro
相关产品推荐
相关产品推荐

