php实现网站缩略图的功能,文章末尾附实现代码-缩略图不显示文件名

缩略图

与原始图片一样,只是图片大小不一样而已。

缩略图的使用

1.在显示的时候用来代替原图,节省带宽

2.为了在小的显示屏幕上显示

怎么制作缩略图?

PHP需要借助GD库来实现制作缩略图。

制作缩略图原理

php实现网站缩略图的功能,文章末尾附实现代码


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.销毁资源

php实现网站缩略图的功能,文章末尾附实现代码

缩略图的制作过程中,如果完全指定缩略图的宽和高,那么有可能导致图片失真。所以,缩略图的一般制作方法是补白。

补白:缩略图的大小严格按照原图的比例缩放,其他不够的地方,使用白色填充。

封装制作缩略图的类/includes/Image.class.php

获取图片类型:getimagesize

通过getimagesize获得图片的MIME类型,取得对应的图片类型

获取原图和缩略图宽高的原理

php实现网站缩略图的功能,文章末尾附实现代码

不论是补白还是让图片变形,都改变了原来的图片的性质

补白的优缺点:

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;

}

}

推荐阅读