📅  最后修改于: 2023-12-03 15:03:40.174000             🧑  作者: Mango
在Web开发中,image manipulation(图像处理)是常见的需求,例如让某一张图片加上边框或者水印。本篇介绍一个PHP函数,frameImage(),它可以给一张图片加上边框。
/**
* 给图片添加边框
*
* @param string $imagePath 图片路径
* @param int $borderSize 边框大小
* @param string $borderColor 边框颜色
* @param string $outputPath 输出路径(可选)
*
* @return void
*/
function frameImage(string $imagePath, int $borderSize, string $borderColor, string $outputPath = NULL): void
{
// 实现过程
}
function frameImage(string $imagePath, int|array $borderSize, string|array $borderColor, string $outputPath = NULL): void
{
// Load the image
$image = imagecreatefromstring(file_get_contents($imagePath));
// Add the border
if (is_int($borderSize)) {
$borderSize = [$borderSize, $borderSize];
}
$borderColorRgb = is_array($borderColor) ? $borderColor : html2rgb($borderColor);
$border = imagecolorallocate($image, $borderColorRgb[0], $borderColorRgb[1], $borderColorRgb[2]);
$x = imagesx($image);
$y = imagesy($image);
$topHeight = $borderSize[0];
$bottomHeight = $borderSize[0];
$leftWidth = $borderSize[1];
$rightWidth = $borderSize[1];
imagefilledrectangle($image, 0, 0, $x, $topHeight, $border);
imagefilledrectangle($image, 0, 0, $leftWidth, $y, $border);
imagefilledrectangle($image, $x - $rightWidth, 0, $x, $y, $border);
imagefilledrectangle($image, 0, $y - $bottomHeight, $x, $y, $border);
// Save or output the final image
if ($outputPath) {
imagepng($image, $outputPath);
} else {
header('Content-type: image/png');
imagepng($image);
}
// Free up memory
imagedestroy($image);
}
/**
* 将HTML颜色代码转换为RGB颜色数组
*
* @param string $htmlColor HTML颜色代码
*
* @return array RGB颜色数组([R,G,B])
*/
function html2rgb(string $htmlColor): array
{
$htmlColor = str_replace('#', '', $htmlColor);
if (strlen($htmlColor) == 3) {
$r = hexdec(substr($htmlColor, 0, 1) . substr($htmlColor, 0, 1));
$g = hexdec(substr($htmlColor, 1, 1) . substr($htmlColor, 1, 1));
$b = hexdec(substr($htmlColor, 2, 1) . substr($htmlColor, 2, 1));
} else {
$r = hexdec(substr($htmlColor, 0, 2));
$g = hexdec(substr($htmlColor, 2, 2));
$b = hexdec(substr($htmlColor, 4, 2));
}
return [$r, $g, $b];
}
frameImage()函数是一个简单但实用的图像处理函数,可以方便地给某张图片加上边框。可以根据自己的需求进行调整,例如修改边框大小、边框颜色等等。