分享php多功能图片处理类

这篇文章主要为大家分享php多功能图片处理类,方便大家进行学习研究,感兴趣的小伙伴们可以参考一下,本文实例为大家分享了多功能php图片处理类,供大家参考,具体内容如下:

  1. <?php
  2. /**
  3. * Image.class.php 图像处理类
  4. * @author Administrator
  5. *
  6. */
  7. class Image{
  8. private $path='';
  9. /**
  10. * 构造方法
  11. * @param unknown $path
  12. */
  13. function __construct($path=''){
  14. if (!emptyempty($path)) {
  15. $this->path=$path;
  16. }
  17. }
  18. /**
  19. +-----------------------------------------------
  20. * 等比缩放函数
  21. +-----------------------------------------------
  22. * @param unknown $name 需处理图片的名称
  23. * @param unknown $width 缩放后的宽度
  24. * @param unknown $height 缩放后的高度
  25. * @param string $thumb_prixs 缩放后的前缀名
  26. * @return mixed $newname 返回的缩放后的文件名
  27. */
  28. function thumb($name,$width,$height,$thumb_prixs='th_'){
  29. //获取图片信息
  30. $Info=$this->ImageInfo($name); //图片的宽度,高度,类型
  31. //获取图片资源,各种类型的图片都可以创建资源,jpg,gif,png
  32. $imagres=$this->Img_resouce($name, $Info);
  33. //获取计算图片等比例之后的大小,
  34. $size=$this->getNewSize($name,$width,$height,$Info);
  35. //获取新的图片资源,处理透明背景
  36. $newimg=$this->getImage($imagres,$size,$Info);
  37. //另存为一个新的图片,返回新的缩放后的图片名称
  38. $newname=$this->SaveNewImage($newimg,$thumb_prixs.$name,$Info);
  39. return $newname;
  40. }
  41. /**
  42. +-----------------------------------------------------------------------
  43. * 水印标记函数
  44. +-----------------------------------------------------------------------
  45. * @param unknown $backname 背景文件名
  46. * @param unknown $watername 水印文件名
  47. * @param number $waterpos 水印位置
  48. * @param string $wa_prixs 水印前缀名
  49. * @return boolean
  50. */
  51. function waterMark($backname,$watername,$waterpos=0,$wa_prixs='wa_') {
  52. if (file_exists($this->path.$backname) && file_exists($this->path.$watername)) {
  53. $backinfo=$this->ImageInfo($backname);
  54. $waterinfo=$this->ImageInfo($watername);
  55. if(!$pos=$this->getPos($backinfo, $waterinfo, $waterpos)){
  56. echo "水印图片不应该比背景图片小";
  57. return false;
  58. }
  59. $backimg=$this->Img_resouce($backname, $backinfo);
  60. $waterimg=$this->Img_resouce($watername, $waterinfo);
  61. var_dump($backimg);exit();
  62. $backimg=$this->CopyImage($backimg, $waterimg, $pos, $waterinfo);
  63. $this->SaveNewImage($backimg, $wa_prixs.$backname, $backinfo);
  64. }else{
  65. echo "图片或水印不存在";
  66. return false;
  67. }
  68. }
  69. /**
  70. +-----------------------------------------------------------------------
  71. * 获取图片信息函数
  72. +-----------------------------------------------------------------------
  73. * @param unknown $name
  74. * @return unknown
  75. */
  76. private function ImageInfo($img) {
  77. $imageInfo=getimagesize($img);
  78. if ($imageInfo!==false) {
  79. $imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1));
  80. $imageSize=filesize($img);
  81. $Info=array(
  82. "width" => $imageInfo[0],
  83. "height" => $imageInfo[1],
  84. "type" => $imageType,
  85. "size" => $imageSize,
  86. "mime" => $imageInfo['mime']
  87. );
  88. return $Info;
  89. }else{
  90. return false;
  91. }
  92. }
  93. /**
  94. +--------------------------------------------------------
  95. * 创建原图像格式函数
  96. +--------------------------------------------------------
  97. * @param unknown $name
  98. * @param unknown $imaginfo
  99. * @return boolean|resource
  100. */
  101. private function Img_resouce($name,$imageinfo){
  102. $iamgeres=$this->path.$name;
  103. //var_dump($iamgeres);exit();
  104. switch ($imageinfo['type']) {
  105. case 'gif':
  106. $img=imagecreatefromgif($name);
  107. break;
  108. case 'jpg':
  109. $img=imagecreatefromjpeg($name);
  110. break;
  111. case 'png':
  112. $img=imagecreatefrompng($name);
  113. break;
  114. }
  115. return $img;
  116. }
  117. /**
  118. +--------------------------------------------------
  119. * 获取等比缩放尺寸函数
  120. +--------------------------------------------------
  121. * @param unknown $name
  122. * @param unknown $width
  123. * @param unknown $height
  124. * @param unknown $imaginfo
  125. * @return Ambigous <unknown, number>
  126. */
  127. private function getNewSize($name,$width,$height,$imaginfo){
  128. $size['width']=$imaginfo['width'];
  129. $size['height']=$imaginfo['height'];
  130. if ($width<$imaginfo['width']) {
  131. $size['width']=$width;
  132. }
  133. if ($height<$imaginfo['height']) {
  134. $size['height']=$height;
  135. }
  136. //图像等比例缩放算法
  137. if ($imaginfo['width']*$size['width']>$imaginfo['height']*$size['height']) {
  138. $size['height']=round($imaginfo['height']*$size['width']/$imaginfo['width']);
  139. }else{
  140. $size['width']=round($imaginfo['width']*$size['height']/$imaginfo['height']);
  141. }
  142. return $size;
  143. }
  144. private function getImage($imageres,$size,$imageinfo){
  145. //新建一个真彩色图像
  146. $newimg=imagecreatetruecolor($size['width'], $size['height']);
  147. //将某个颜色定义为透明色
  148. $otsc=imagecolortransparent($imageres);
  149. //获取图像的调色板的颜色数目
  150. if ($otsc>=0&&$otsc<=imagecolorstotal($imageres)) {
  151. //取得某索引的颜色
  152. $stran=imagecolorsforindex($imageres, $otsc);
  153. //为图像分配颜色
  154. $newt=imagecolorallocate($imageres, $stran['red'], $stran['green'], $stran['blue']);
  155. //区域填充函数
  156. imagefill($newimg, 0, 0, $newt);
  157. //为图像定义透明色
  158. imagecolortransparent($newimg,$newt);
  159. }
  160. imagecopyresized($newimg, $imageres, 0, 0, 0, 0, $size['width'], $size['height'], $imageinfo['width'], $imageinfo['height']);
  161. imagedestroy($imageres);
  162. return $newimg;
  163. }
  164. /**
  165. +----------------------------------------------
  166. *保存图像函数
  167. +----------------------------------------------
  168. * @param unknown $newimg
  169. * @param unknown $newname
  170. * @param unknown $imageinfo
  171. * @return unknown
  172. */
  173. private function SaveNewImage($newimg,$newname,$imageinfo){
  174. switch ($imageinfo['type']){
  175. case 1://gif
  176. $result=imagegif($newimg,$this->path.$newname);
  177. break;
  178. case 2://jpg
  179. $result=imagejpeg($newimg,$this->path.$newname);
  180. break;
  181. case 3://png
  182. $result=imagepng($newimg,$this->path.$newname);
  183. break;
  184. }
  185. imagedestroy($newimg);
  186. return $newname;
  187. }
  188. /**
  189. +-----------------------------------------------------------------
  190. * 获取水印位置函数
  191. +-----------------------------------------------------------------
  192. * @param unknown $backinfo 背景信息
  193. * @param unknown $waterinfo 水印信息
  194. * @param unknown $waterpos 水印位置
  195. * @return boolean|multitype:number 返回坐标数组
  196. */
  197. private function getPos($backinfo,$waterinfo,$waterpos) {
  198. if ($backinfo['width']<$waterinfo['width']||$backinfo['height']<$waterinfo['height']) {
  199. return false;
  200. }
  201. switch ($waterpos) {
  202. case 1://左上角
  203. $posX=0;
  204. $posY=0;
  205. break;
  206. case 2://中上方
  207. $posX=$backinfo['width']-$waterinfo['width']/2;
  208. $posY=0;
  209. break;
  210. case 3://右上角
  211. $posX=$backinfo['width']-$waterinfo['width'];
  212. $posY=0;
  213. break;
  214. case 4://左中方
  215. $posX=0;
  216. $posY=$backinfo['height']-$waterinfo['height']/2;
  217. break;
  218. case 5://正中间
  219. $posX=$backinfo['width']-$waterinfo['width']/2;
  220. $posY=$backinfo['height']-$waterinfo['height']/2;
  221. break;
  222. case 6://右中方
  223. $posX=$backinfo['width']-$waterinfo['width'];
  224. $posY=$backinfo['height']-$waterinfo['height']/2;
  225. break;
  226. case 7://底部靠左
  227. $posX=0;
  228. $posY=$backinfo['height']-$waterinfo['height'];
  229. break;
  230. case 8://底部居中
  231. $posX=$backinfo['width']-$waterinfo['width']/2;
  232. $posY=$backinfo['height']-$waterinfo['height'];
  233. break;
  234. case 9://底部靠右
  235. $posX=$backinfo['width']-$waterinfo['width'];
  236. $posY=$backinfo['height']-$waterinfo['height'];
  237. break;
  238. case 0:
  239. default :
  240. $posX=rand(0,$backinfo['width']-$waterinfo['width']);
  241. $posY=rand(0,$backinfo['height']-$waterinfo['height']);
  242. break;
  243. }
  244. return array('posX'=>$posX,'posY'=>$posY);
  245. }
  246. /**
  247. +-------------------------------------------------------------------
  248. * 拷贝图像
  249. +-------------------------------------------------------------------
  250. * @param unknown $backimg 背景资源
  251. * @param unknown $waterimg 水印资源
  252. * @param unknown $pos 水印位置
  253. * @param unknown $waterinfo 水印信息
  254. * @return unknown
  255. */
  256. private function CopyImage($backimg,$waterimg,$pos,$waterinfo) {
  257. imagecopy($backimg, $waterimg, $pos['posX'], $pos['posY'], 0, 0, $waterinfo['width'], $waterinfo['height']);
  258. imagedestroy($waterimg);
  259. return $backimg;
  260. }
  261. }
  262. ?>

以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。