例如爱奇艺、腾讯、B 站等等快进快退都有一个快速预览缩略图,那么是怎么做的呢?
首先就是需要服务端生成这张图,例如可以根据视频长度生成几张,下面介绍一下生成的方案
<?php
/**
* 生成视频快进快退用的缩略图
* @param array $imgs 待合成的图片数组
* @return array ['success','拼接图地址']
*/
function getVsample($imgs){
$t_y = $img_num = 0;//初始化背景图高度和待拼图数量
foreach ($imgs as $k => $v) {
$src_im_arr[$k] = Imagecreatefromjpeg($v);
$size_arr[$k] = getimagesize($v);
$t_x_arr[] = $size_arr[$k][0];//得到所有待拼图的宽度
$t_y += $size_arr[$k][1];//得到背景图的高度
$img_num ++;//得到待拼图总数量
}
$t_x = max($t_x_arr);//得到背景图的宽度
unset($t_x_arr);//用完了释放掉
$dst_im = @imagecreatetruecolor($t_x, $t_y);//创建背景图画布
$dst_x = $dst_y = 0;//初始化拼接位置的坐标点
for ($i = 0; $i < $img_num; $i++) {//开始循环拼图😄
imagecopy(
$dst_im,//背景空白图
$src_im_arr[$i],//待拼接图
$dst_x,//往背景图拼接的x坐标
$dst_y,//往背景图拼接的y坐标
0,//从待拼接图的x位置开始拼接
0,//从待拼接图的y位置开始拼接
$size_arr[$i][0],//从待拼接图的x位置结束拼接
$size_arr[$i][1]//从待拼接图的y位置结束拼接
);
$dst_y += $size_arr[$i][1];
}
//header('Content-Type: image/jpeg');
//imagejpeg($dst_im,null,30);return;
ob_start();
ob_implicit_flush(0);
imagejpeg($dst_im,null,30);//图片质量配置为30%
imagedestroy($dst_im);
$img = ob_get_clean();
// 后续你可以把这个图片流上传到其他对象存储服务器(例如七牛、oss、ucloud等)
//上传完成,返回结果信息即可
}
这里主要展示了 图片合成那一部分 ~ 如果想要完整的过程,可以联系我哈 ~ 留言即可 ~
🐶 你走,我不送你。你来,风雨无阻,我去接你。