php实现的支持实现的支持imagemagick及及gd库两种处理的缩略图生成类库两种处理的缩略图生成类
主要介绍了php实现的支持imagemagick及gd库两种处理的缩略图生成类,包含了用法的详细描述,非常实用,需要的朋友可以参考下
本文实例讲述了php实现的支持imagemagick及gd库两种处理的缩略图生成类及其用法实例,非常具有实用价值。分享给大家供大家参考。具体如下:
一、功能一、功能:
1.按比例缩小/放大
2.填充背景色
3.按区域裁剪
4.添加水印,包括水印的位置,透明度等
使用imagemagick/GD库实现,imagemagick地址:www.imagemagick.org
需要安装imagemagick,安装方法如下://www.jb51.net/article/55528.htm
二、实现方法:二、实现方法:
PicThumb.class.php类文件如下:
<?php
/** 缩略图生成类,支持imagemagick及gd库两种处理
* Date: 2013-07-15
* Author: fdipzone
* Ver: 1.2
*
* Func:
* public set_config: 设置参数
* public create_thumb: 生成缩略图
* private fit: 缩略图片
* private crop: 裁剪图片
* private gd_fit: GD库缩略图片
* private gd_crop: GD库裁剪图片
* private get_size: 获取要转换的size
* private get_crop_offset: 获取裁图的偏移量
* private add_watermark: 添加水印
* private check_handler: 判断处理程序是否已安装
* private create_dirs: 创建目录
* private exists: 判断参数是否存在
* private to_log: 记录log
* private hex2rgb: hex颜色转rgb颜色
* private get_file_ext: 获取图片类型
*
* ver: 1.1 增加GD库处理
* ver: 1.2 增加width,height错误参数处理
* 增加当图片colorspace不为RGB时作转RGB处理
* 修正使用crop保存为gif时出现透明无效区域问题,使用+repage参数,删除透明无效区域即可
*
* tips:建议使用imagemagick
* GD库不支持透明度水印,如果必须使用透明水印,请将水印图片做成有透明度。
* GD库输出gif如加透明水印,会有问题。
*/
class PicThumb{ // class start
private $_log = null; // log file
private $_handler = null; // 进行图片处理的程序,imagemagick/gd库
private $_type = 'fit'; // fit or crop
private $_source = null; // 原图路径
private $_dest = null; // 缩略图路径
private $_watermark = null; // 水印图片
private $_opacity = 75; // 水印圖片透明度,gd库不支持
private $_gravity = 'SouthEast'; // 水印摆放位置 NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast
private $_geometry = '+10+10'; // 水印定位,gd库不支持
private $_croppos = 'TL'; // 截图的位置 TL TM TR ML MM MR BL BM BR
private $_bgcolor = null; // 填充的背景色
private $_quality = 90; // 生成的图片质量
private $_width = null; // 指定区域宽度
private $_height = null; // 指定区域高度
// 初始化
public function __construct($logfile=''){
if($logfile!=''){
$this->_log = $logfile;
}
}
// 设置参数
public function set_config($param=array()){
$this->_handler = $this->exists($param, 'handler')? strtolower($param['handler']) : null;
$this->_type = $this->exists($param, 'type')? strtolower($param['type']) : 'fit';
$this->_watermark = $this->exists($param, 'watermark')? $param['watermark'] : null;
$this->_opacity = $this->exists($param, 'opacity')? $param['opacity'] : 75;
$this->_gravity = $this->exists($param, 'gravity')? $param['gravity'] : 'SouthEast';
$this->_geometry = $this->exists($param, 'geometry')? $param['geometry'] : '+10+10';
$this->_croppos = $this->exists($param, 'croppos')? $param['croppos'] : 'TL';
$this->_bgcolor = $this->exists($param, 'bgcolor')? $param['bgcolor'] : null;
$this->_quality = $this->exists($param, 'quality')? $param['quality'] : 90;
$this->_width = $this->exists($param, 'width')? $param['width'] : null;
$this->_height = $this->exists($param, 'height')? $param['height'] : null;
}
/** 创建缩略图
* @param String $source 原图
* @param String $dest 目标图
* @return boolean
*/
public function create_thumb($source, $dest){
// 检查使用的handler是否已安装
if(!$this->check_handler()){
$this->to_log('handler not installed');
return false;
}
// 判断区域宽高是否正确
if(!is_numeric($this->_width) || !is_numeric($this->_height) || $this->_width<=0 || $this->_height<=0){
$this->to_log('width or height invalid');
return false;
}
// 判断源文件是否存在
if(!file_exists($source)){
$this->to_log($source.' not exists');
return false;
}
// 创建目标文件路径