php 调用图,php 缩略图类(附调用示例)

分享个php缩略图类,可以实现如下的功能:

1,支持加载图片文件和加载图片字符串

2,可以将缩略图输出到浏览器和保持缩略图文件

3,支持gif,png,jpeg类型的缩略

4,可以设定是否按比例来拉伸

代码如下:

/**

* 生成缩略图(支持加载图片文件和字符串2种方式)

* @param $maxWidth 缩略图最大宽度

* @param $maxHeight 缩略图最大高度

* @param bool $scale 是否按比例缩小,否则拉伸

* @param bool $inflate 是否放大以来填充缩略图

* @edit by www.jbxue.com

*/

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;

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'

);

//加载MIME类型图像的函数名称

$this->imgLoaders = array(

'image/jpeg' => 'imagecreatefromjpeg',

'image/png' => 'imagecreatefrompng',

'image/gif' => 'imagecreatefromgif'

);

//储存创建MIME类型图片的函数名称

$this->imgCreators = array(

'image/jpeg' => 'imagejpeg',

'image/png' => 'imagepng',

'image/gif' => 'imagegif'

);

}

/**

* 文件方式加载图片

* @param string $image 源图片

* @return bool

*/

public function loadFile($image){

if(!$dims = @getimagesize($image)){

trigger_error("源图片不存在");

}

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{

trigger_error('不支持'.$dims['mime']."图片类型");

}

}

/**

* 字符串方式加载图片

* @param string $image 字符串

* @param string $mime 图片类型

* @return type

*/

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{

trigger_error("不能从字符串加载图片");

}

}else{

trigger_error("不支持".$mime."图片格式");

}

}

/**

* 生成缩略图

* @param string $file 文件名。如果不为空则储存为文件,否则直接输出到浏览器

*/

public function buildThumb($file = null){

$creator = $this->imgCreators[$this->sourceMime];

if(isset($file)){

return $creator($this->thumb,$file);

}else{

return $creator($this->thumb);

}

}

/**

* 处理缩放

*/

public function initThumb(){

if($this->scale){

if($this->sourceWidth > $this->sourceHeight){

$this->thumbWidth = $this->maxWidth;

$this->thumbHeight = floor($this->sourceHeight*($this->maxWidth/$this->sourceWidth));

}elseif($this->sourceWidth < $this->sourceHeight){

$this->thumbHeight = $this->maxHeight;

$this->thumbWidth = floor($this->sourceWidth*($this->maxHeight/$this->sourceHeight));

}else{

$this->thumbWidth = $this->maxWidth;

$this->thumbHeight = $this->maxHeight;

}

}

$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);

}

}

public function getMine(){

return $this->sourceMime;

}

public function getThumbWidth(){

return $this->thumbWidth;

}

public function getThumbHeight(){

return $this->thumbHeight;

}

}

/**

* 缩略图类调用示例(文件)

*/

$thumb = new Thumbnail(200, 200);

$thumb->loadFile('wap.gif');

header('Content-Type:'.$thumb->getMine());

$thumb->buildThumb();

/**

* 缩略图类调用示例(字符串)

*/

$thumb = new Thumbnail(200, 200);

$image = file_get_contents('wap.gif');

$thumb->loadData($image, 'image/jpeg');

$thumb->buildThumb('wap_thumb.gif');

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值