上一话我们写了简单的通过js+css做裁图处理
但是那个有一个缺点,如果img是隐藏的,则js无法读取高度所以无法处理
这一话我们来说一下php进行处理,和上一篇写的如果能做到互补的作用,因为php处理的话无疑会消耗服务器的运算能力和存储,所以还是要谨慎考虑是否需要用到php进行动态切图
public function img() {
//获取缩略图地址,这个是我自己的类的内容 可以不用看,就是根据id获取缩略图即可
$blog_article_id = (int)$this->request->get['blog_article_id'];
$article_info = $this->model_article_article->getArticle($blog_article_id);
if ($article_info['image']) {
$thumb = $article_info['image'];
} else {
$thumb = '';
}
//获取缩略图的详细数据
$array = getimagesize($thumb);
//获取缩略图
switch ($array[2])
{
case 1:
$src_im = @imagecreatefromgif($thumb);
header("Content-type: image/gif");
break;
case 2:
$src_im = @imagecreatefromjpeg($thumb);
header("Content-type: image/jpeg");
break;
case 3:
$src_im = @imagecreatefrompng($thumb);
header("Content-type: image/png");
break;
}
/* 如果获取缩略图失败 */
if(!$src_im)
{
/* 建立一个新图 */
$src_im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($src_im, 255, 255, 255);
$tc = imagecolorallocate($src_im, 0, 0, 0);
imagefilledrectangle($src_im, 0, 0, 150, 30, $bgc);
/* 输出报错图 */
imagestring($src_im, 1, 5, 5, 'Error loading ' . $thumb, $tc);
imagejpeg($src_im);
imagedestroy($src_im);
exit();
}
//创建目标图像
$dst_im = imagecreatetruecolor($array[0], $array[0]*0.618 );
//拷贝源图像固定比例区域
imagecopy( $dst_im, $src_im, 0, 0, 0, ($array[1]-$array[0]*0.618)/2, $array[0], $array[0]*0.618 );
switch ($array[2])
{
case 1:
//输出拷贝后图像
imagegif($dst_im);
break;
case 2:
//输出拷贝后图像
imagejpeg($dst_im);
break;
case 3:
//输出拷贝后图像
imagepng($dst_im);
break;
}
//输出后清除内存
imagedestroy($dst_im);
imagedestroy($src_im);
}
用法也很简单,直接将这个类的实例输出就是我们想要的已经处理好的图片,输出格式大致为
<img src="index.php&aid=1" >
<img src="index.php&aid=2" >
<img src="index.php&aid=3" >