`
kophp
  • 浏览: 831 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

PHP生成缩略图的类

PHP 
阅读更多
<?php
/*
 * Thumbnail类  生成缩略图
 * 2010-09-08
 */

//自定义一组异常类,发生错误时自动抛出异常
class ThumbnailException extends Exception{
	public function __construct($message = null ,$code =0){
		parent::__construct($message ,$code);
		error_log('Error in '.$this->getFile(). 'line: '.$this->getLine().' Error: '.$this->getMessage());
	}
}
class ThumbnailFileException extends ThumbnailException{ }
class ThumbnailNotSupportedException extends ThumbnailException{ }

class Thumbnail{
      private $maxWidth;
      private $maxHeight;
      private $scale;
      private $inflate;
      private $types;
      private $imgLoaders;
      private $imgCreators;
      private $source;
      private $sourceWidth;
      private $sourceHeight;
      private $sourceMime;
      private $thumb;
      private $thumbWidth;
      private $thumbHeight;
/*
 * 构造函数 带4个参数 前两个参数分别是缩略图的最大像素宽度和最大像素高度  第三个参数设置是否按比例将图像缩小为缩略图 第四个参数设置处理小图像时 是否放大
 * $types 缩略图的图片类型
 * loadFile 允许指定一个装载的本地文件
 * loadData 同 loadFile   取得数据库中的字符串
 */
   public function __construct($maxWidth, $maxHeight, $scale = true,$inflate = true){
   	  $this->maxWidth = $maxWidth;
   	  $this->maxHeight = $maxHeight;
   	  $this->scale = $scale;
   	  $this->inflate = $inflate;

   	  $this->types = array('image/jpeg','image/png','image/gif');
   	  $this->imgLoaders = array(
            'image/jpeg' => 'imagecreatefromjpeg',
            'image/png' => 'imagecreatefrompng',
            'image/gif' => 'imagecreatefromgif'
   	  );
   	  $this->imgCreators = array('image/jpeg'=>'imagejpeg','image/png'=>'imagepng','image/gif'=>'imagegif');
   }

   public function loadFile($image){
   	if(!$dims = @getimagesize($image)){
   		throw new ThumbnailFileException('Could not find image: '.$image);
   	}
   	if(in_array($dims['mime'],$this->types)){
   		$loader = $this->imgLoaders[$dims['mime']];
   		$this->source  = $loader($image);
   		$this->sourceWidth = $dims[0];
   		$this->sourceHeight = $dims[1];
   		$this->sourceMime = $dims['mime'];
   		$this->initThumb();
   		return true;
   	}else{
   		throw new ThumbnailNotSupportedException('Image Mime type '.$dims['mime'].' not supported!');
   	}
   }

   public function loadData($image, $mime){
   	if(in_array($mime,$this->types)){
   		if($this->source = @imagecreatefromstring($image)){
   			$this->sourceWidth = imagesx($this->source);
   			$this->sourceHeight = imagesy($this->source);
   			$this->sourceMime =$mime;
   			$this->initThumb();
   			return true;
   		}else{
   			throw new ThumbnailFileException('Could not load image from string');
   		}
   	}else{
   		throw new ThumbnailNotSupportedException('Image Mine type '.$mime.' not supported');
   	}
   }

/*]
 * buildThumb()  生成缩略图的函数
 * getMime() 返回MIME类型  该类型可以为缩略图生成Content-type头
 * getThumbWidth() 返回缩略图的像素宽度
 * getThumbHeight() 返回缩略图的像素高度
 * 私有方法initThumb() 为类处理缩放功能
 */
   public function buildThumb($file = null){
   	$createor = $this->imgCreators[$this->sourceMime];
   	if(isset($file)){
   		return $createor($this->thumb, $file);
   	}else{
   		return $createor($this->thumb);
   	}
   }

   public function getMime(){
   	return $this->sourceMime;
   }

   public function getThumbWidth(){
   	return $this->thumbWidth;
   }
   public function getThumbHeight(){
   	return $this->thumbHeight;
   }
   private function initThumb(){
   	if($this->scale){
   		if($this->sourceWidth > $this->sourceHeight){
   			$this->thumbWidth = $this->maxWidth;
   			$this->thumbHeight = floor($this->sourceHeight * ($this->maxWidth / $this->sourceWidth));
   		}else if($this->sourceWidth < $this->sourceHeight){
   			$this->sourceHeight = $this->maxHeight;
   			$this->thumbWidth = floor($this->sourceWidth * ($this->maxHeight / $this->sourceHeight));
   		}else{
   			$this->thumbWidth = $this->maxWidth;
   			$this->thumbHeight = $this->maxHeight;
   		}
   	}
    // imagecreatetruecolor() 创建空白的缩略图
    $this->thumb = imagecreatetruecolor($this->thumbWidth, $this->thumbHeight);
    //将原图像复制到缩略图图像
    if($this->sourceWidth <= $this->maxWidth && $this->sourceHeight <= $this->maxHeight && $this->inflate == false){
    	$this->thumb = $this->source;
    }else{
    	imagecopyresampled( $this->thumb, $this->source, 0 ,0 , 0, 0, $this->thumbWidth, $this->thumbHeight, $this->sourceWidth, $this->sourceHeight);
    }
   }
}
?>

 测试效果

<?php
require_once('Thumbnail.class.php');
$tn = new Thumbnail( 200, 200);
$tn->loadFile('1.jpg');
header('Content-type: '.$tn->getMime());
$tn->buildThumb();
?>

 

分享到:
评论

相关推荐

    php生成缩略图类

    好用的php生存缩略图类,比php自带的生成缩略图效率要好的多。

    PHP生成缩略图类【可用】

    提供的`thumb_cut.php`、`thumb_stand.php`和`thumb_strict.php`文件可能分别对应这三种模式的实现,通过阅读和学习这些代码,你可以更深入地理解PHP生成缩略图的具体方法。 最后,对于压缩包中的`doc`文件,可能...

    支持png透亮图片的php生成缩略图类分享_.docx

    在本文档中,我们探讨了一个支持PNG透明度的PHP类,用于生成缩略图。这个类解决了在使用GD2图形库生成缩略图时可能出现的问题,特别是针对PNG图像的透明度处理。GD2是PHP中的一个图形处理库,它允许开发者处理图像,...

    php 生成缩略图

    在PHP中生成缩略图是一项常见的任务,尤其在网站开发中,用于展示图片时节省带宽和优化用户体验。本文将详细讲解如何使用PHP创建缩略图,并探讨相关的知识点。 首先,我们需要理解缩略图生成的基本原理。缩略图是...

    php 自动缩略图,php智能生成缩略图

    在实际应用中,一个PHP自动缩略图类或者函数通常会封装这些功能,提供简单的接口供开发者调用。在提供的压缩包"php自动缩略图"中,可能包含了这样一个实现,通过解压并查看源代码,我们可以学习到具体的实现细节和...

    php生成图片缩略图代码类.zip

    以上代码创建了一个新的缩略图类实例,设置了源图和目标图路径,以及目标尺寸,然后调用`generate()`方法生成缩略图。 在实际应用中,你可能需要考虑更多的细节,比如错误处理、图像格式检查、透明度处理等。此外,...

    php生成图片缩略图并添加水印

    生成各种图片缩略图,并支持添加水印 一个生成缩略图的函数 一个添加水印的函数 傻瓜式应用很简单

    支持png透明图片的php生成缩略图类分享

    本文将详细介绍一个支持PNG透明图片的PHP生成缩略图类,该类基于GD2图形库,能够处理PNG透明效果,避免背景填充问题。 GD2是PHP的一个扩展库,用于处理图像,包括创建、读取、修改和保存多种图像格式,如JPEG、PNG...

    php 缩略图生成类

    在PHP中,生成缩略图是一项常见的任务,用于在网页上快速展示图片或者优化网站的加载速度。这里我们将深入探讨如何使用PHP的GD库和ImageMagick库来创建高效的缩略图生成类。 首先,GD库是PHP内建的一个图像处理库,...

    PHP根据文章标题生成缩略图,并居中展示

    综上所述,实现PHP根据文章标题生成缩略图并居中展示的功能涉及到图像处理、文本转图像、尺寸调整、颜色处理等多个技术层面,需要对PHP的GD库或其他图像处理扩展有深入理解。通过合理的代码结构和优化,可以创建出既...

    php生成缩略图例子

    php生成缩略图多张不同缩略图例子,很好用

    PHP大图片生成缩略图

    使用GD库生成缩略图的基本步骤包括打开源图片、创建目标图片、设置缩放比例、复制和调整图像、然后保存结果。以下是一个简单的示例代码: ```php $src = '4.jpg'; // 源图片路径 $dst = 'small_4.jpg'; // 缩略...

    一个PHP生成缩略图的类库

    这个“PHP生成缩略图的类库”提供了一种高效且灵活的方式来创建不同类型的缩略图,包括扭曲型、按比例缩放、最小裁剪以及背景填充等。以下是对这些功能的详细解释: 1. **生成扭曲型缩图**:这种类型的缩略图会保持...

    php图片上传并生成缩略图类.zip

    总之,这个"php图片上传并生成缩略图类.zip"提供了一个完整的解决方案,帮助开发者在PHP环境中安全、高效地处理图片上传和生成缩略图的需求。开发者只需实例化这个类,设置相关参数,调用相应的函数,即可轻松实现...

    liunx 上传word文件生成缩略图

    在PHP中,使用Imagick扩展可以轻松地从Word文件生成缩略图。以下是一个示例代码片段: ```php &lt;?php $im = new Imagick(); $im-&gt;setCompressionQuality(100); // 假设你有一个名为'example.docx'的Word文件 $...

    php生成图片缩略图的一个代码类.zip

    3. **生成缩略图**:使用GD库或Imagick的功能,创建一个新的图像资源,然后将原始图像缩放至设定的尺寸。可能还包含优化算法,以确保缩略图的质量。 4. **保存缩略图**:将生成的缩略图写入到指定的新路径,同时...

    PHP程序生成图片缩略图

    ### PHP程序生成图片缩略图知识点详解 ...综上所述,通过深入分析这段PHP代码,我们可以更好地理解如何使用PHP和GD库来处理图片,从而实现自动生成缩略图的功能。这对于开发高质量的Web应用程序非常有帮助。

    php 使用ffmpeg 视频转换,截图,生成缩略图

    总结来说,这个PHP类提供了便捷的接口,让我们能够利用FFmpeg的强大功能,无需深入理解底层的视频处理技术,就可以在PHP项目中轻松实现视频转换、截图和生成缩略图。对于需要处理多媒体内容的Web应用程序,这无疑是...

    php 上传图片生成缩略图

    php 上传图片生成缩略图 在PHP中获取EXIF信息应用EXIF函数库中的函数。首先,应该确定EXIF函数是否已经加载,在php.ini文件中查看“extension=php_exif.dll”前是否有分号“;”,如果有则说明未加载,那么就要去掉...

    非常好用的PHP文件上传和缩略图生成类

    include "upload.inc.php"; // Defining Class $yukle = new upload; // Set Max Size $yukle-&gt;set_max_size(180000); // Set Directory $yukle-&gt;set_directory("data"); // Do not change // Set Temp ...

Global site tag (gtag.js) - Google Analytics