如何使用PHP为图片添加边框

1. PHP简介

PHP是一种服务器脚本语言,它可用于创建动态网页。PHP与HTML相结合,可以当作一种HTML的扩展,可以在HTML中混合使用PHP编写脚本,扩展HTML的功能。

PHP主要适用于Web开发,它可以嵌入HTML代码中,将数据库查询结果转换成HTML输出到Web浏览器。PHP具有开放源代码的特点,可以在各种计算机操作系统中进行编译,因此,不仅可以在Linux和Unix系统上运行,也可以在Windows上运行。

下面我们将介绍如何使用PHP给图片添加边框。

2. PHP添加图片边框的方法

2.1 创建画布

要实现给图片添加边框的效果,首先需要创建一个画布,代码如下:

<?php

$src_file = "img/test.jpg";

$src_img = imagecreatefromjpeg($src_file);

// 获取原图宽高

$src_w = imagesx($src_img);

$src_h = imagesy($src_img);

// 边框宽度

$border_width = 20;

// 画布宽高

$canvas_w = $src_w + $border_width * 2;

$canvas_h = $src_h + $border_width * 2;

// 创建画布

$canvas = imagecreatetruecolor($canvas_w, $canvas_h);

?>

首先,我们使用imagecreatefromjpeg()函数创建一个源图像资源$src_img,然后获取源图像的宽高$src_w和$src_h。

接着指定边框宽度为$border_width,然后计算画布的宽高$canvas_w和$canvas_h,其中$canvas_w等于原图宽度加上两个边框宽度,$canvas_h同理。

最后,调用imagecreatetruecolor()函数创建一个画布$canvas,并将宽高设为$canvas_w和$canvas_h。

2.2 给画布填充颜色

在画布上添加一个颜色填充来形成边框,代码如下:

<?php

$border_color = imagecolorallocate($canvas, 255, 255, 255);

imagefill($canvas, 0, 0, $border_color);

?>

使用imagecolorallocate()函数创建一个白色$border_color。

接着使用imagefill()函数将画布$canvas填充为白色$border_color,填充位置为(0, 0),即从画布左上角开始填充。

2.3 将原图复制到画布上

接下来需要将原图复制到画布上,其中原图需要在边框内部,代码如下:

<?php

// 将原图复制到画布中心

$start_x = $border_width;

$start_y = $border_width;

imagecopy($canvas, $src_img, $start_x, $start_y, 0, 0, $src_w, $src_h);

?>

使用imagecopy()函数将$src_img原图复制到$canvas画布上。

imagecopy()函数第一个参数为目标画布$canvas,第二个参数为原图$src_img,第三和第四个参数为$src_img在$canvas中的起点坐标,第五和第六个参数为在原图中复制的起点坐标(0, 0),第七和第八个参数为要复制的区域宽高$src_w和$src_h。

此时,原图已经复制到画布中心,但是并不是边框内部的,还需要进行适当的偏移。

2.4 对图片进行适当的偏移

为了让原图在边框内部,需要对原图进行适当的偏移,代码如下:

<?php

// 计算水平偏移量和竖直偏移量

$h_offset = $border_width;

$v_offset = $border_width;

// 计算偏移量的坐标并复制

$x1 = $h_offset;

$y1 = $v_offset;

$x2 = $src_w + $h_offset;

$y2 = $src_h + $v_offset;

// 创建白色画笔

$border_color = imagecolorallocate($canvas, 255, 255, 255);

// 画四周的边框

// 上边框

imageline($canvas, $x1 - 1, $y1 - 1, $x2 + 1, $y1 - 1, $border_color);

imageline($canvas, $x1 - 1, $y1, $x2 + 1, $y1, $border_color);

imageline($canvas, $x1 - 1, $y1 + 1, $x2 + 1, $y1 + 1, $border_color);

// 下边框

imageline($canvas, $x1 - 1, $y2 - 1, $x2 + 1, $y2 - 1, $border_color);

imageline($canvas, $x1 - 1, $y2, $x2 + 1, $y2, $border_color);

imageline($canvas, $x1 - 1, $y2 + 1, $x2 + 1, $y2 + 1, $border_color);

// 左边框

imageline($canvas, $x1 - 1, $y1, $x1 - 1, $y2, $border_color);

imageline($canvas, $x1, $y1 - 1, $x1, $y2 + 1, $border_color);

// 右边框

imageline($canvas, $x2 + 1, $y1, $x2 + 1, $y2, $border_color);

imageline($canvas, $x2, $y1 - 1, $x2, $y2 + 1, $border_color);

?>

首先计算水平偏移量和竖直偏移量,并根据它们计算偏移量的坐标。

然后创建一个白色画笔$border_color,使用imageline()函数画四周的边框,代码中的imageline()函数分别对应了上边框、下边框、左边框和右边框的绘制,其中,imageline()函数第一个参数为画布$canvas,第二和第三个参数为起点坐标,第四和第五个参数为另一个端点坐标,第六个参数为线的颜色。

2.5 输出图片

最后,将生成的图片输出到浏览器或保存到服务器上,代码如下:

<?php

header("Content-Type:image/jpeg");

imagejpeg($canvas);

imagedestroy($src_img);

imagedestroy($canvas);

?>

使用header()函数设置输出的Content-Type类型为image/jpeg。

然后,使用imagejpeg()函数将画布输出为JPEG格式的图片,第一个参数为画布$canvas,第二个参数为图片输出的目标(如果没有指定输出目标,则默认输出到浏览器)。

最后使用imagedestroy()函数释放源图像和画布资源。

3. 完整代码

下面是完整的PHP代码:

<?php

$src_file = "img/test.jpg";

$src_img = imagecreatefromjpeg($src_file);

// 获取原图宽高

$src_w = imagesx($src_img);

$src_h = imagesy($src_img);

// 边框宽度

$border_width = 20;

// 画布宽高

$canvas_w = $src_w + $border_width * 2;

$canvas_h = $src_h + $border_width * 2;

// 创建画布

$canvas = imagecreatetruecolor($canvas_w, $canvas_h);

// 创建白色画笔

$border_color = imagecolorallocate($canvas, 255, 255, 255);

// 填充白色背景

imagefill($canvas, 0, 0, $border_color);

// 复制原图到画布中心

$start_x = $border_width;

$start_y = $border_width;

imagecopy($canvas, $src_img, $start_x, $start_y, 0, 0, $src_w, $src_h);

// 计算偏移量的坐标并复制四周的边框

$h_offset = $border_width;

$v_offset = $border_width;

$x1 = $h_offset;

$y1 = $v_offset;

$x2 = $src_w + $h_offset;

$y2 = $src_h + $v_offset;

// 画四周的边框

// 上边框

imageline($canvas, $x1 - 1, $y1 - 1, $x2 + 1, $y1 - 1, $border_color);

imageline($canvas, $x1 - 1, $y1, $x2 + 1, $y1, $border_color);

imageline($canvas, $x1 - 1, $y1 + 1, $x2 + 1, $y1 + 1, $border_color);

// 下边框

imageline($canvas, $x1 - 1, $y2 - 1, $x2 + 1, $y2 - 1, $border_color);

imageline($canvas, $x1 - 1, $y2, $x2 + 1, $y2, $border_color);

imageline($canvas, $x1 - 1, $y2 + 1, $x2 + 1, $y2 + 1, $border_color);

// 左边框

imageline($canvas, $x1 - 1, $y1, $x1 - 1, $y2, $border_color);

imageline($canvas, $x1, $y1 - 1, $x1, $y2 + 1, $border_color);

// 右边框

imageline($canvas, $x2 + 1, $y1, $x2 + 1, $y2, $border_color);

imageline($canvas, $x2, $y1 - 1, $x2, $y2 + 1, $border_color);

// 输出图片

header("Content-Type:image/jpeg");

imagejpeg($canvas);

imagedestroy($src_img);

imagedestroy($canvas);

?>

4. 注意事项

要保证PHP GD库已经安装。

由于PHP GD库是PHP扩展,所以在PHP安装完成之后,需要在php.ini文件中配置才能启用GD库,具体做法如下:

1.找到php.ini文件:这个文件的位置因系统而异,可以通过phpinfo()函数来查看。

2.启用GD库:找到php.ini文件中的【extension=php_gd2.dll】,去掉前面的注释符号(;)。

3.保存文件并重启Apache或Nginx服务器。

最后,在代码中,要使用正确的文件名和路径。

5. 总结

通过本篇文章的介绍,我们了解到如何使用PHP给图片添加边框,首先需要创建画布,然后填充颜色,将源图复制到画布上,并对图片进行适当的偏移,最后输出图片。

做好错误的捕获与提示,可以增加代码的健壮性和用户体验。平衡代码的准确性、健壮性和实效性也是每个开发者面临的难题,通过多掌握PHP使用技巧,可以让我们更加高效地开发Web程序。

后端开发标签