缩略图的利用
1.在显示的时候用来代替原图,节省带宽
2.为了在小的显示屏幕上显示
怎么制作缩略图?
PHP须要借助GD库来实现制作缩略图。
制作缩略图事理
1.拿到图片天生资源imagecreatefromgif($filename):从指定文件(图片)加载到内存,形成一个资源(画布)
2.创建画布(缩略图)
imagecreatetruecolor(宽,高)
3.图片合并
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
$dst_image:缩略图资源
$src_image:原图资源
4.保存图片(缩略图)
imagegif(资源,文件路径)
5.销毁资源
缩略图的制作过程中,如果完备指定缩略图的宽和高,那么有可能导致图片失落真。以是,缩略图的一样平常制作方法是补白。
补白:缩略图的大小严格按照原图的比例缩放,其他不足的地方,利用白色添补。
封装制作缩略图的类/includes/Image.class.php
获取图片类型:getimagesize
通过getimagesize得到图片的MIME类型,取得对应的图片类型
获取原图和缩略图宽高的事理
不论是补白还是让图片变形,都改变了原来的图片的性子
补白的优缺陷:
1.优点:都雅,利于前台布局
2.缺陷:不再是原来图片的比例
实现缩略图代码如下:
<?php
//图片操作类
class Image{
//属性
public $error;
//方法
/
根据图片制作缩略图
@param1 string $src,原始图片
@param2 int $width,缩略图的宽
@param3 int $height,缩略图的高
/
public function thumb($src,$width=100,$height=100){
//1.判断原图是否存在
if(!is_file($src)){
$this->error = '文件不存在';
return false;
}
//2.创建原始图片资源
//2.1获取图片类型
$image = getimagesize($src);
//var_dump($image);
$type = strrchr($image['mime'],'/');
$type = substr($type,1);
//echo $type;
//2.2创建图片资源
//得到函数名
$func = 'imagecreatefrom' . $type;//imagecreatefromjpeg
//利用可变函数
$src_image = $func($src);//$src_image = imagecreatefromjpeg($src)
//3.创建缩略图资源
$dst_image = imagecreatetruecolor($width,$height);
//补白
$bg = imagecolorallocate($dst_image,255,255,255);
imagefill($dst_image,0,0,$bg);
//4.求出缩略图的真实宽和高
if($image[0]/$image[1] > $width/$height){
$size = $image[0] / $image[1];
$dst_width = $width;
$dst_height = floor($dst_width / $size);
}else{
$size = $image[0] / $image[1];
$dst_height = $height;
$dst_width = floor($size $dst_height);
}
//5.合并图片
imagecopyresampled($dst_image,$src_image,ceil(($width - $dst_width) / 2),ceil(($height - $dst_height) / 2),0,0,$dst_width,$dst_height,$image[0],$image[1]);
//6.保存图片
$func = 'image' . $type;
$fullname = 'thumb_' . $this->getFullName($src);
$func($dst_image,ADMIN_UPL . $fullname);
//7.销毁图片资源
imagedestroy($src_image);
imagedestroy($dst_image);
//8.返回文件名字
return $fullname;
}
/
获取文件保存的名字
@param1 string $name,文件名字
@return string,返回新文件的名字
/
private function getFullName($name){
//得到文件后缀名
$ext = substr($name,strrpos($name,'.'));
//拼凑全名
return time() . rand(10000,99999) . $ext;
}
}