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程序。