Lite.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <?php
  2. /* 驱动相关常量定义 */
  3. define('IMAGE_GD', 1); //常量,标识GD库类型
  4. define('IMAGE_IMAGICK', 2); //常量,标识imagick库类型
  5. /* 缩略图相关常量定义 */
  6. define('IMAGE_THUMB_SCALING', 1); //常量,标识缩略图等比例缩放类型
  7. define('IMAGE_THUMB_FILLED', 2); //常量,标识缩略图缩放后填充类型
  8. define('IMAGE_THUMB_CENTER', 3); //常量,标识缩略图居中裁剪类型
  9. define('IMAGE_THUMB_NORTHWEST', 4); //常量,标识缩略图左上角裁剪类型
  10. define('IMAGE_THUMB_SOUTHEAST', 5); //常量,标识缩略图右下角裁剪类型
  11. define('IMAGE_THUMB_FIXED', 6); //常量,标识缩略图固定尺寸缩放类型
  12. /* 水印相关常量定义 */
  13. define('IMAGE_WATER_NORTHWEST', 1); //常量,标识左上角水印
  14. define('IMAGE_WATER_NORTH', 2); //常量,标识上居中水印
  15. define('IMAGE_WATER_NORTHEAST', 3); //常量,标识右上角水印
  16. define('IMAGE_WATER_WEST', 4); //常量,标识左居中水印
  17. define('IMAGE_WATER_CENTER', 5); //常量,标识居中水印
  18. define('IMAGE_WATER_EAST', 6); //常量,标识右居中水印
  19. define('IMAGE_WATER_SOUTHWEST', 7); //常量,标识左下角水印
  20. define('IMAGE_WATER_SOUTH', 8); //常量,标识下居中水印
  21. define('IMAGE_WATER_SOUTHEAST', 9); //常量,标识右下角水印
  22. /**
  23. * 2015/12/31 采用自ThinkPhP @喵了个咪<wenzhenxi@vip.qq.com>
  24. *
  25. * 图片处理驱动类,可配置图片处理库
  26. * 目前支持GD库和imagick
  27. * @author 麦当苗儿 <zuojiazi@vip.qq.com>
  28. */
  29. class Image_Lite {
  30. /* 驱动相关常量定义 */
  31. const IMAGE_GD = 1; //常量,标识GD库类型
  32. const IMAGE_IMAGICK = 2; //常量,标识imagick库类型
  33. /* 缩略图相关常量定义 */
  34. const IMAGE_THUMB_SCALE = 1; //常量,标识缩略图等比例缩放类型
  35. const IMAGE_THUMB_FILLED = 2; //常量,标识缩略图缩放后填充类型
  36. const IMAGE_THUMB_CENTER = 3; //常量,标识缩略图居中裁剪类型
  37. const IMAGE_THUMB_NORTHWEST = 4; //常量,标识缩略图左上角裁剪类型
  38. const IMAGE_THUMB_SOUTHEAST = 5; //常量,标识缩略图右下角裁剪类型
  39. const IMAGE_THUMB_FIXED = 6; //常量,标识缩略图固定尺寸缩放类型
  40. /* 水印相关常量定义 */
  41. const IMAGE_WATER_NORTHWEST = 1; //常量,标识左上角水印
  42. const IMAGE_WATER_NORTH = 2; //常量,标识上居中水印
  43. const IMAGE_WATER_NORTHEAST = 3; //常量,标识右上角水印
  44. const IMAGE_WATER_WEST = 4; //常量,标识左居中水印
  45. const IMAGE_WATER_CENTER = 5; //常量,标识居中水印
  46. const IMAGE_WATER_EAST = 6; //常量,标识右居中水印
  47. const IMAGE_WATER_SOUTHWEST = 7; //常量,标识左下角水印
  48. const IMAGE_WATER_SOUTH = 8; //常量,标识下居中水印
  49. const IMAGE_WATER_SOUTHEAST = 9; //常量,标识右下角水印
  50. /**
  51. * 图片资源
  52. * @var resource
  53. */
  54. private $img;
  55. /**
  56. * 构造方法,用于实例化一个图片处理对象
  57. *
  58. * @param string $type 要使用的类库,默认使用GD库
  59. */
  60. public function __construct($type = self::IMAGE_GD, $imgname = null) {
  61. /* 判断调用库的类型 */
  62. switch ($type) {
  63. case self::IMAGE_GD:
  64. $class = 'Image_Driver_Gd';
  65. break;
  66. case self::IMAGE_IMAGICK:
  67. $class = 'Image_Driver_Imagick';
  68. break;
  69. default:
  70. throw new PhalApi_Exception_BadRequest(T('不支持的图片处理库类型'));
  71. }
  72. /* 引入处理库,实例化图片处理对象 */
  73. $this->img = new $class($imgname);
  74. }
  75. /**
  76. * 打开一幅图像
  77. *
  78. * @param string $imgname 图片路径
  79. *
  80. * @return Object 当前图片处理库对象
  81. */
  82. public function open($imgname) {
  83. $this->img->open($imgname);
  84. return $this;
  85. }
  86. /**
  87. * 保存图片
  88. *
  89. * @param string $imgname 图片保存名称
  90. * @param string $type 图片类型
  91. * @param integer $quality 图像质量
  92. * @param boolean $interlace 是否对JPEG类型图片设置隔行扫描
  93. *
  94. * @return Object 当前图片处理库对象
  95. */
  96. public function save($imgname, $type = null, $quality = 80, $interlace = true) {
  97. $this->img->save($imgname, $type, $quality, $interlace);
  98. return $this;
  99. }
  100. /**
  101. * 返回图片宽度
  102. * @return integer 图片宽度
  103. */
  104. public function width() {
  105. return $this->img->width();
  106. }
  107. /**
  108. * 返回图片高度
  109. * @return integer 图片高度
  110. */
  111. public function height() {
  112. return $this->img->height();
  113. }
  114. /**
  115. * 返回图像类型
  116. * @return string 图片类型
  117. */
  118. public function type() {
  119. return $this->img->type();
  120. }
  121. /**
  122. * 返回图像MIME类型
  123. * @return string 图像MIME类型
  124. */
  125. public function mime() {
  126. return $this->img->mime();
  127. }
  128. /**
  129. * 返回图像尺寸数组 0 - 图片宽度,1 - 图片高度
  130. * @return array 图片尺寸
  131. */
  132. public function size() {
  133. return $this->img->size();
  134. }
  135. /**
  136. * 裁剪图片
  137. *
  138. * @param integer $w 裁剪区域宽度
  139. * @param integer $h 裁剪区域高度
  140. * @param integer $x 裁剪区域x坐标
  141. * @param integer $y 裁剪区域y坐标
  142. * @param integer $width 图片保存宽度
  143. * @param integer $height 图片保存高度
  144. *
  145. * @return Object 当前图片处理库对象
  146. */
  147. public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = null) {
  148. $this->img->crop($w, $h, $x, $y, $width, $height);
  149. return $this;
  150. }
  151. /**
  152. * 生成缩略图
  153. *
  154. * @param integer $width 缩略图最大宽度
  155. * @param integer $height 缩略图最大高度
  156. * @param integer $type 缩略图裁剪类型
  157. *
  158. * @return Object 当前图片处理库对象
  159. */
  160. public function thumb($width, $height, $type = self::IMAGE_THUMB_SCALE) {
  161. $this->img->thumb($width, $height, $type);
  162. return $this;
  163. }
  164. /**
  165. * 添加水印
  166. *
  167. * @param string $source 水印图片路径
  168. * @param integer $locate 水印位置
  169. * @param integer $alpha 水印透明度
  170. *
  171. * @return Object 当前图片处理库对象
  172. */
  173. public function water($source, $locate = self::IMAGE_WATER_SOUTHEAST, $alpha = 80) {
  174. $this->img->water($source, $locate, $alpha);
  175. return $this;
  176. }
  177. /**
  178. * 图像添加文字
  179. *
  180. * @param string $text 添加的文字
  181. * @param string $font 字体路径
  182. * @param integer $size 字号
  183. * @param string $color 文字颜色
  184. * @param integer $locate 文字写入位置
  185. * @param integer $offset 文字相对当前位置的偏移量
  186. * @param integer $angle 文字倾斜角度
  187. *
  188. * @return Object 当前图片处理库对象
  189. */
  190. public function text($text, $font, $size, $color = '#00000000', $locate = self::IMAGE_WATER_SOUTHEAST, $offset = 0, $angle = 0) {
  191. $this->img->text($text, $font, $size, $color, $locate, $offset, $angle);
  192. return $this;
  193. }
  194. }