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

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

PHP | 想象一下 setImagePage() 函数

在 PHP 中,有时候我们需要处理图片的分页显示,而这时候就会用到一个名为 setImagePage() 的函数。这个函数可以帮助我们将一张大图片分成多个小图片进行分页,以供前端页面展示。

函数定义
/**
 * 分页显示一张图片
 *
 * @param string $imgurl 原图片URL
 * @param int $page 指定要显示的页数
 * @param int $pagesize 每页显示的图片数量 默认为12张
 * @param string $pageurl 分页连接的URL地址
 * @return string 生成的HTML代码
 */
function setImagePage($imgurl, $page, $pagesize = 12, $pageurl = '')
{
    // TODO: 实现分页显示图片的逻辑
}
参数说明
  • $imgurl:原图片的 URL,必须指定。
  • $page:要显示的页数,必须指定。
  • $pagesize:每页显示的图片数量,可选,默认为 12 张。
  • $pageurl:分页连接的 URL 地址,可选,默认为空。
函数实现

函数实现的逻辑如下:

  1. 获取原图片的宽高信息
  2. 通过计算得出分页总数,如果总页数小于要显示的页数,则返回空字符串
  3. 计算要显示页数的起始位置和结束位置
  4. 生成分页 HTML 代码,根据起始位置和结束位置截取原图片,生成分页图片
  5. 返回生成的 HTML 代码

函数实现的代码如下:

function setImagePage($imgurl, $page, $pagesize = 12, $pageurl = '')
{
    // 获取图片信息
    $imginfo = getimagesize($imgurl);
    $width = $imginfo[0];
    $height = $imginfo[1];
    $format = strtolower(substr($imginfo['mime'], strpos($imginfo['mime'], '/') + 1));

    // 计算总页数
    $total = ceil($width * $height / ($pagesize * 1024 * 1024));

    // 如果总页数小于要显示的页数,则返回空字符串
    if ($total < $page) {
        return '';
    }

    // 计算起始位置和结束位置
    $start = $pagesize * ($page - 1);
    $end = $start + $pagesize;

    // 生成分页 HTML 代码,根据起始位置和结束位置截取原图片,生成分页图片
    $html = '<div>';
    for ($i = $start; $i < $end; $i++) {
        if ($i >= $total) {
            break;
        }

        $src = $imgurl . '?x-oss-process=image/crop,w_' . $width . ',h_' . $height . '_WATERMARK_IMAGE';
        $src .= '/watermark,text_SM9uthVzYW1lIFRlc3Q=,size_16,color_FFFFFF,t_80,g_north';
        $src .= '/resize,m_fill,w_500,h_500';
        $src .= '/format,' . $format . '/page=' . $i;
        $link = str_replace('{page}', $i, $pageurl ? $pageurl : '?page={page}');

        $html .= '<a href="' . $link . '" target="_blank">';
        $html .= '<img src="' . $src . '" alt="" style="max-width:100%">';   
        $html .= '</a>&nbsp;';
    }
    $html .= '</div>';

    // 返回生成的 HTML 代码
    return $html;
}

这样,就可以通过 setImagePage() 函数实现图片的分页显示了。

调用示例
echo setImagePage('http://example.com/image.jpg', 2);

这样会返回第二页的图片,每页显示默认的 12 张。如果需要修改每页显示的图片数量,可以指定第三个参数。

echo setImagePage('http://example.com/image.jpg', 2, 10);

这样会返回第二页的图片,每页显示 10 张。

如果需要修改分页连接的 URL 地址,可以指定第四个参数。

echo setImagePage('http://example.com/image.jpg', 2, 10, 'http://example.com/image.php?page={page}');

这样会生成分页连接URL为 http://example.com/image.php?page=2 的 HTML 代码,用于前端页面展示。