ThinkImage.class.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | TOPThink [ WE CAN DO IT JUST THINK ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2010 http://topthink.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: 麦当苗儿 <zuojiazi.cn@gmail.com> <http://www.zjzit.cn>
  10. // +----------------------------------------------------------------------
  11. // | ThinkImage.class.php 2013-03-05
  12. // +----------------------------------------------------------------------
  13. /* 驱动相关常量定义 */
  14. define('THINKIMAGE_GD', 1); //常量,标识GD库类型
  15. define('THINKIMAGE_IMAGICK', 2); //常量,标识imagick库类型
  16. /* 缩略图相关常量定义 */
  17. define('THINKIMAGE_THUMB_SCALING', 1); //常量,标识缩略图等比例缩放类型
  18. define('THINKIMAGE_THUMB_FILLED', 2); //常量,标识缩略图缩放后填充类型
  19. define('THINKIMAGE_THUMB_CENTER', 3); //常量,标识缩略图居中裁剪类型
  20. define('THINKIMAGE_THUMB_NORTHWEST', 4); //常量,标识缩略图左上角裁剪类型
  21. define('THINKIMAGE_THUMB_SOUTHEAST', 5); //常量,标识缩略图右下角裁剪类型
  22. define('THINKIMAGE_THUMB_FIXED', 6); //常量,标识缩略图固定尺寸缩放类型
  23. /* 水印相关常量定义 */
  24. define('THINKIMAGE_WATER_NORTHWEST', 1); //常量,标识左上角水印
  25. define('THINKIMAGE_WATER_NORTH', 2); //常量,标识上居中水印
  26. define('THINKIMAGE_WATER_NORTHEAST', 3); //常量,标识右上角水印
  27. define('THINKIMAGE_WATER_WEST', 4); //常量,标识左居中水印
  28. define('THINKIMAGE_WATER_CENTER', 5); //常量,标识居中水印
  29. define('THINKIMAGE_WATER_EAST', 6); //常量,标识右居中水印
  30. define('THINKIMAGE_WATER_SOUTHWEST', 7); //常量,标识左下角水印
  31. define('THINKIMAGE_WATER_SOUTH', 8); //常量,标识下居中水印
  32. define('THINKIMAGE_WATER_SOUTHEAST', 9); //常量,标识右下角水印
  33. /**
  34. * 图片处理驱动类,可配置图片处理库
  35. * 目前支持GD库和imagick
  36. * @author 麦当苗儿 <zuojiazi.cn@gmail.com>
  37. */
  38. class ThinkImage{
  39. /**
  40. * 图片资源
  41. * @var resource
  42. */
  43. private $img;
  44. /**
  45. * 构造方法,用于实例化一个图片处理对象
  46. * @param string $type 要使用的类库,默认使用GD库
  47. */
  48. public function __construct($type = THINKIMAGE_GD, $imgname = null){
  49. /* 判断调用库的类型 */
  50. switch ($type) {
  51. case THINKIMAGE_GD:
  52. $class = 'ImageGd';
  53. break;
  54. case THINKIMAGE_IMAGICK:
  55. $class = 'ImageImagick';
  56. break;
  57. default:
  58. throw new Exception('不支持的图片处理库类型');
  59. }
  60. /* 引入处理库,实例化图片处理对象 */
  61. require_once "Driver/{$class}.class.php";
  62. $this->img = new $class($imgname);
  63. }
  64. /**
  65. * 打开一幅图像
  66. * @param string $imgname 图片路径
  67. * @return Object 当前图片处理库对象
  68. */
  69. public function open($imgname){
  70. $this->img->open($imgname);
  71. return $this;
  72. }
  73. /**
  74. * 保存图片
  75. * @param string $imgname 图片保存名称
  76. * @param string $type 图片类型
  77. * @param boolean $interlace 是否对JPEG类型图片设置隔行扫描
  78. * @return Object 当前图片处理库对象
  79. */
  80. public function save($imgname, $type = null, $interlace = true){
  81. $this->img->save($imgname, $type, $interlace);
  82. return $this;
  83. }
  84. /**
  85. * 返回图片宽度
  86. * @return integer 图片宽度
  87. */
  88. public function width(){
  89. return $this->img->width();
  90. }
  91. /**
  92. * 返回图片高度
  93. * @return integer 图片高度
  94. */
  95. public function height(){
  96. return $this->img->height();
  97. }
  98. /**
  99. * 返回图像类型
  100. * @return string 图片类型
  101. */
  102. public function type(){
  103. return $this->img->type();
  104. }
  105. /**
  106. * 返回图像MIME类型
  107. * @return string 图像MIME类型
  108. */
  109. public function mime(){
  110. return $this->img->mime();
  111. }
  112. /**
  113. * 返回图像尺寸数组 0 - 图片宽度,1 - 图片高度
  114. * @return array 图片尺寸
  115. */
  116. public function size(){
  117. return $this->img->size();
  118. }
  119. /**
  120. * 裁剪图片
  121. * @param integer $w 裁剪区域宽度
  122. * @param integer $h 裁剪区域高度
  123. * @param integer $x 裁剪区域x坐标
  124. * @param integer $y 裁剪区域y坐标
  125. * @param integer $width 图片保存宽度
  126. * @param integer $height 图片保存高度
  127. * @return Object 当前图片处理库对象
  128. */
  129. public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = null){
  130. $this->img->crop($w, $h, $x, $y, $width, $height);
  131. return $this;
  132. }
  133. /**
  134. * 生成缩略图
  135. * @param integer $width 缩略图最大宽度
  136. * @param integer $height 缩略图最大高度
  137. * @param integer $type 缩略图裁剪类型
  138. * @return Object 当前图片处理库对象
  139. */
  140. public function thumb($width, $height, $type = THINKIMAGE_THUMB_SCALE){
  141. $this->img->thumb($width, $height, $type);
  142. return $this;
  143. }
  144. /**
  145. * 添加水印
  146. * @param string $source 水印图片路径
  147. * @param integer $locate 水印位置
  148. * @param integer $alpha 水印透明度
  149. * @return Object 当前图片处理库对象
  150. */
  151. public function water($source, $locate = THINKIMAGE_WATER_SOUTHEAST){
  152. $this->img->water($source, $locate);
  153. return $this;
  154. }
  155. /**
  156. * 图像添加文字
  157. * @param string $text 添加的文字
  158. * @param string $font 字体路径
  159. * @param integer $size 字号
  160. * @param string $color 文字颜色
  161. * @param integer $locate 文字写入位置
  162. * @param integer $offset 文字相对当前位置的偏移量
  163. * @param integer $angle 文字倾斜角度
  164. * @return Object 当前图片处理库对象
  165. */
  166. public function text($text, $font, $size, $color = '#00000000',
  167. $locate = THINKIMAGE_WATER_SOUTHEAST, $offset = 0, $angle = 0){
  168. $this->img->text($text, $font, $size, $color, $locate, $offset, $angle);
  169. return $this;
  170. }
  171. }