📅  最后修改于: 2023-12-03 15:18:26.960000             🧑  作者: Mango
在 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 地址,可选,默认为空。函数实现的逻辑如下:
函数实现的代码如下:
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> ';
}
$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 代码,用于前端页面展示。