玩一下图片缩放类
如果是类的话
基本就是这个样子的
/*
*
*
*/
class Image(){
//这里有一个方法 -> 图片缩放
public function thumb(){
}
}
//然后某一个地方调用这个类里面的属性咯
$image = new Image();
$image->thumb();
//既然是缩放,肯定得有原图,然后还是缩放的大小,还有参数可以自己定,比如图片的格式,指定目录等等
首先那就得实现这里面的基础方法,图片缩放
关键函数imagecopyresampled()
这玩意查手册是将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。得就是他。
思路
- 获取图片
- 获取图片参数,方便计算缩放比例用的
- 创建画布
- 计算图片比例
- 根据比例图片压缩
- 生成图片
- 销毁图片
//开始撸代码
//需要压缩的图片
header('Content-Type: image/jpeg');//如果测试的时候这个需要注释一下
$img = 'uploads/one.jpg';
$info = getimagesize($img);
echo '<pre>';
print_r($info);
//先来看看他是个啥
返回一个数组
那么
//则目标源的宽高就得到了
$srcx = $info[0];
$srcy = $info[1];
//假定我设置的指定宽高是560* 250(随便设的)也就是说
$dstx = 560;
$dsty = 250;
//如果完全按这个尺寸来看看会发生什么
不用imagecreate() - 因为它是新建一个基于调色板的图像用在验证码还差不多
$dstimg = imagecreatetruecolor($dstx,$dsty);
$srcimg = imagecreatefromjpeg($img);
//图片缩放
imagecopyresampled($dstimg,$srcimg,0,0,0,0,$dstx,$dsty,$srcx,$srcy);
//生成图片
imagejpeg($dstimg);
//释放资源
imagedestroy($dstimg);
imagedestroy($srcimg);
那么这样得到的图就变形了.
那如果是加上缩放的算法的话,我们得按找宽高比的最大值来定义缩放比例,从而根据缩放比例来得到最终目标图片的具体宽高。也就是说。。。
$scale = max($srcx/$dstx,$srcy/$dsty);
则现在的按照比例缩放的长宽就应该是
$x = $srcx / $scale;
$y = $srcx / $scale;
$dstimg = imagecreatetruecolor($x,$y);
$srcimg = imagecreatefromjpeg($img);
imagecopyresampled($dstimg,$srcimg,0,0,0,0,$x,$y,$srcx,$srcy);
imagejpeg($dstimg);
imagedestroy($dstimg);
imagedestroy($srcimg);
ok
在php的简单图片缩放类(二)中来说一下怎么优化写好一个简单的缩放类吧
php的简单图片缩放类(二)