创建图像缩略图并将其缓存在PHP中
创建图像缩略图是很常见的做法,并且有一些脚本可让您使用GD2库在PHP中执行此操作。但是,对于通常应该做的简单任务来说,它们通常是多余的,因此在进行一些搜索和测试后,我发现了以下ImageResize类,该类来自http://shiege.com/scripts/thumbnail/。我已将代码修改为PHP5,但如果要使用PHP4版本,则可以从网站上获取它。
class ImageResize { public $img; public function ImageResize($imgfile) { //检测图像格式 $this->img["format"] = ereg_replace(".*\.(.*)$","\\1",$imgfile); $this->img["format"] = strtoupper($this->img["format"]); if($this->img["format"] == "JPG" || $this->img["format"] == "JPEG"){ //JPEG $this->img["format"] = "JPEG"; $this->img["src"] = ImageCreateFromJPEG ($imgfile); }elseif($this->img["format"] == "PNG"){ //PNG $this->img["format"] = "PNG"; $this->img["src"] = ImageCreateFromPNG ($imgfile); }elseif($this->img["format"] == "GIF"){ //GIF $this->img["format"] = "GIF"; $this->img["src"] = ImageCreateFromGif($imgfile); } elseif ($this->img["format"] == "WBMP"){ //WBMP $this->img["format"] = "WBMP"; $this->img["src"] = ImageCreateFromWBMP ($imgfile); } else { //DEFAULT echo "Not Supported File"; exit(); }; $this->img["lebar"] = imagesx($this->img["src"]); $this->img["tinggi"] = imagesy($this->img["src"]); //默认质量jpeg $this->img["quality"] = 75; } public function size_height($size = 100) { //height $this->img["tinggi_thumb"] = $size; $this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"]; } public function size_width($size = 100) { //width $this->img["lebar_thumb"] = $size; $this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"]; } public function size_auto($size = 100) { //size if($this->img["lebar"]> = $this->img["tinggi"]){ $this->img["lebar_thumb"] = $size; $this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"]; }else{ $this->img["tinggi_thumb"] = $size; $this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"]; }; } public function jpeg_quality($quality = 75) { //jpeg品质 $this->img["quality"] = $quality; } public function show() { //显示拇指 header("Content-Type: image/".$this->img["format"]); /* change ImageCreateTrueColor to ImageCreate if your GD not supported ImageCreateTrueColor function*/ $this->img["des"] = ImageCreateTrueColor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]); imagecopyresampled($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]); if ($this->img["format"] == "JPG" || $this->img["format"] == "JPEG"){ //JPEG imageJPEG($this->img["des"],"",$this->img["quality"]); }elseif($this->img["format"] == "PNG"){ //PNG imagePNG($this->img["des"]); }elseif($this->img["format"] == "GIF"){ //GIF imageGIF($this->img["des"]); }elseif($this->img["format"] == "WBMP"){ //WBMP imageWBMP($this->img["des"]); }; } public function save($save = "") { //节省拇指 if (empty($save)) { $save = strtolower("./thumb.".$this->img["format"]); } /* change ImageCreateTrueColor to ImageCreate if your GD not supported ImageCreateTrueColor function*/ $this->img["des"] = ImageCreateTrueColor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]); imagecopyresampled($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]); if ($this->img["format"] == "JPG" || $this->img["format"] == "JPEG") { //JPEG imageJPEG($this->img["des"],"$save",$this->img["quality"]); } elseif ($this->img["format"] == "PNG") { //PNG imagePNG($this->img["des"],"$save"); } elseif ($this->img["format"] == "GIF") { //GIF imageGIF($this->img["des"],"$save"); } elseif ($this->img["format"] == "WBMP") { //WBMP imageWBMP($this->img["des"],"$save"); }; } }
将其放入一个名为class.ImageResize.php的文件中,您可以使用它来调整大小并显示所需的任何图像。
include('class.ImageResize.php'); //创建ImageResize对象 $originalImage = new ImageResize("anImage.jpg"); //使用显示功能将该图像打印到屏幕上 $originalImage->show(); //使用保存功能将此图像保存到另一个文件-保留空白以另存为thumb.anImage.jpg $originalImage->save("anotherFile.png"); //使用尺寸功能之一调整图像尺寸 $originalImage->size_width(120); //再次保存... $originalImage->save("thumb_anotherFile.png");
如果要创建简单的缩略图缓存功能,则可以使用以下代码。它检查图像是否存在以及是否早于30天。如果是,则删除该文件,并且由于该文件不再存在(或者从不存在),将运行创建缩略图的代码的下一部分。
$imageName = str_replace(dirname("./images/", "" , "http://www.example.com/images/an_image.jpg"); if (file_exists("./thumb_cache" . $imageName)) { //2592000=30天 if ( time() - filemtime("./thumb_cache".$imageName) > 2592000 ) { unlink("./thumb_cache".$imageName); } } if (!file_exists("./thumb_cache" . $imageName)) { include('class.ImageResize.php'); //如果缓存文件不存在,则创建它。 $originalImage = new ImageResize("./images/" . $_result['image_path']); $originalImage->size_width(120); $originalImage->save("./thumb_cache".$imageName); }