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

📅  最后修改于: 2023-12-03 15:03:40.644000             🧑  作者: Mango

PHP | 想象一下 spliceImage() 函数

spliceImage() 是一个用于合并多个图片的 PHP 函数,它可以将多张图片按指定的方式拼接成一张大图,非常适合用于生成海报、拼图等应用场景。

函数定义
/**
 * spliceImage - 将多张图片拼接成一个大图
 * 
 * @param array $images 待拼接的图片路径,数组长度应为 2 或 3
 * @param int $width 拼接后的图片宽度
 * @param int $height 拼接后的图片高度
 * @param string $mode 拼接模式,可选值为 'vertical' 或 'horizontal'
 * 
 * @return string 拼接后的图片保存路径
 */
function spliceImage($images, $width, $height, $mode='vertical') {
    // TODO: 实现函数逻辑
}
参数说明
  • images:待拼接的图片路径,传入一个数组,数组长度应为 2 或 3,其中元素为字符串类型的图片路径。
  • width:拼接后的图片宽度,整数类型。
  • height:拼接后的图片高度,整数类型。
  • mode:拼接模式,可选值为 'vertical''horizontal',默认为 'vertical',表示垂直拼接,如果设置为 'horizontal',则表示水平拼接。
函数实现
function spliceImage($images, $width, $height, $mode='vertical') {
    // 检查参数合法性
    if (count($images) < 2 || count($images) > 3) {
        throw new InvalidArgumentException('images 参数不合法,长度应为 2 或 3');
    }

    // 创建一个新的画布,大小为拼接后的图片大小
    $canvas = imagecreatetruecolor($width, $height);

    // 定义颜色
    $white = imagecolorallocate($canvas, 255, 255, 255);

    // 填充画布为白色
    imagefill($canvas, 0, 0, $white);

    // 遍历传递的图片,依次将它们拼接到画布上
    $x = 0;
    $y = 0;
    foreach ($images as $imagePath) {
        // 读取图片文件
        $image = imagecreatefromjpeg($imagePath);

        // 获取图片尺寸
        $imageWidth = imagesx($image);
        $imageHeight = imagesy($image);

        // 计算图片在画布上的位置
        if ($mode == 'vertical') {
            $y = $y + $imageHeight;
        } else {
            $x = $x + $imageWidth;
        }

        // 将图片拼接到画布上
        imagecopy($canvas, $image, $x, $y, 0, 0, $imageWidth, $imageHeight);

        // 释放内存
        imagedestroy($image);
    }

    // 保存合成的大图
    $filename = uniqid() . '.jpg';
    imagejpeg($canvas, $filename);

    // 释放画布内存
    imagedestroy($canvas);

    // 返回保存路径
    return $filename;
}
调用示例
try {
    // 拼接两张图片
    $images = ['image1.jpg', 'image2.jpg'];
    $filename = spliceImage($images, 800, 600);
    echo "拼接后的图片保存在:" . $filename;

    // 拼接三张图片
    $images = ['image1.jpg', 'image2.jpg', 'image3.jpg'];
    $filename = spliceImage($images, 1200, 800, 'horizontal');
    echo "拼接后的图片保存在:" . $filename;
} catch(Exception $e) {
    echo 'Error: ' . $e->getMessage;
}
总结

spliceImage() 函数是一个非常有用的 PHP 工具函数,它可以将多张图片合并成一张大图,方便我们实现拼图、海报等应用场景。在使用时只需要传入待拼接图片的路径和一些配置参数即可,非常方便。