📜  PHP |想象一下 frameImage()函数(1)

📅  最后修改于: 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
{
    // 实现过程
}
函数参数说明
  • $imagePath: 要给其加边框的图片路径
  • $borderSize: 边框大小,可以是一个整数或者一个数组([上下,左右]),如果是整数,则边框大小相同;如果是数组,则分别指定上下和左右两个方向的大小。
  • $borderColor: 边框颜色,可以是一个16进制颜色代码或者是一个包含3个数字的数组([R,G,B])。如果是16进制颜色代码,则边框颜色相同;如果是数组,则分别指定R,G,B三个通道的颜色值。
  • $outputPath: 生成的新图片路径,如果不指定,则直接覆盖原图片。
函数实现
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()函数是一个简单但实用的图像处理函数,可以方便地给某张图片加上边框。可以根据自己的需求进行调整,例如修改边框大小、边框颜色等等。