<?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自带的生成缩略图效率要好的多。
提供的`thumb_cut.php`、`thumb_stand.php`和`thumb_strict.php`文件可能分别对应这三种模式的实现,通过阅读和学习这些代码,你可以更深入地理解PHP生成缩略图的具体方法。 最后,对于压缩包中的`doc`文件,可能...
在本文档中,我们探讨了一个支持PNG透明度的PHP类,用于生成缩略图。这个类解决了在使用GD2图形库生成缩略图时可能出现的问题,特别是针对PNG图像的透明度处理。GD2是PHP中的一个图形处理库,它允许开发者处理图像,...
在PHP中生成缩略图是一项常见的任务,尤其在网站开发中,用于展示图片时节省带宽和优化用户体验。本文将详细讲解如何使用PHP创建缩略图,并探讨相关的知识点。 首先,我们需要理解缩略图生成的基本原理。缩略图是...
在实际应用中,一个PHP自动缩略图类或者函数通常会封装这些功能,提供简单的接口供开发者调用。在提供的压缩包"php自动缩略图"中,可能包含了这样一个实现,通过解压并查看源代码,我们可以学习到具体的实现细节和...
以上代码创建了一个新的缩略图类实例,设置了源图和目标图路径,以及目标尺寸,然后调用`generate()`方法生成缩略图。 在实际应用中,你可能需要考虑更多的细节,比如错误处理、图像格式检查、透明度处理等。此外,...
生成各种图片缩略图,并支持添加水印 一个生成缩略图的函数 一个添加水印的函数 傻瓜式应用很简单
本文将详细介绍一个支持PNG透明图片的PHP生成缩略图类,该类基于GD2图形库,能够处理PNG透明效果,避免背景填充问题。 GD2是PHP的一个扩展库,用于处理图像,包括创建、读取、修改和保存多种图像格式,如JPEG、PNG...
在PHP中,生成缩略图是一项常见的任务,用于在网页上快速展示图片或者优化网站的加载速度。这里我们将深入探讨如何使用PHP的GD库和ImageMagick库来创建高效的缩略图生成类。 首先,GD库是PHP内建的一个图像处理库,...
综上所述,实现PHP根据文章标题生成缩略图并居中展示的功能涉及到图像处理、文本转图像、尺寸调整、颜色处理等多个技术层面,需要对PHP的GD库或其他图像处理扩展有深入理解。通过合理的代码结构和优化,可以创建出既...
php生成缩略图多张不同缩略图例子,很好用
使用GD库生成缩略图的基本步骤包括打开源图片、创建目标图片、设置缩放比例、复制和调整图像、然后保存结果。以下是一个简单的示例代码: ```php $src = '4.jpg'; // 源图片路径 $dst = 'small_4.jpg'; // 缩略...
这个“PHP生成缩略图的类库”提供了一种高效且灵活的方式来创建不同类型的缩略图,包括扭曲型、按比例缩放、最小裁剪以及背景填充等。以下是对这些功能的详细解释: 1. **生成扭曲型缩图**:这种类型的缩略图会保持...
总之,这个"php图片上传并生成缩略图类.zip"提供了一个完整的解决方案,帮助开发者在PHP环境中安全、高效地处理图片上传和生成缩略图的需求。开发者只需实例化这个类,设置相关参数,调用相应的函数,即可轻松实现...
在PHP中,使用Imagick扩展可以轻松地从Word文件生成缩略图。以下是一个示例代码片段: ```php <?php $im = new Imagick(); $im->setCompressionQuality(100); // 假设你有一个名为'example.docx'的Word文件 $...
3. **生成缩略图**:使用GD库或Imagick的功能,创建一个新的图像资源,然后将原始图像缩放至设定的尺寸。可能还包含优化算法,以确保缩略图的质量。 4. **保存缩略图**:将生成的缩略图写入到指定的新路径,同时...
### PHP程序生成图片缩略图知识点详解 ...综上所述,通过深入分析这段PHP代码,我们可以更好地理解如何使用PHP和GD库来处理图片,从而实现自动生成缩略图的功能。这对于开发高质量的Web应用程序非常有帮助。
总结来说,这个PHP类提供了便捷的接口,让我们能够利用FFmpeg的强大功能,无需深入理解底层的视频处理技术,就可以在PHP项目中轻松实现视频转换、截图和生成缩略图。对于需要处理多媒体内容的Web应用程序,这无疑是...
php 上传图片生成缩略图 在PHP中获取EXIF信息应用EXIF函数库中的函数。首先,应该确定EXIF函数是否已经加载,在php.ini文件中查看“extension=php_exif.dll”前是否有分号“;”,如果有则说明未加载,那么就要去掉...
include "upload.inc.php"; // Defining Class $yukle = new upload; // Set Max Size $yukle->set_max_size(180000); // Set Directory $yukle->set_directory("data"); // Do not change // Set Temp ...