首頁 >後端開發 >php教程 >實作縮圖與加浮水印的php類

實作縮圖與加浮水印的php類

WBOY
WBOY原創
2016-07-25 08:45:09782瀏覽
  1. /**
  2. * 圖片縮放水印類
  3. *
  4. * @version 1.0 ;
  5. *
  6. */
  7. class cls_photo
  8. {
  9. protected $waterrate = 0.2; //水印圖示在圖片上的比例
  10. protected $width = 300; //縮圖預設寬度
  11. protected $height = 200; //縮圖預設高度
  12. protected $padding = 5; //水印圖到邊的距離
  13. protected $water_mark = "./water.png";
  14. protected $water_mark_pos = 5;//水印圖片位置(1=左上角,2=右上角,3=左下角,4=右下角,5中央)
  15. protected $watermode = 0;// 0縮圖時不打浮水印1縮圖時打水印
  16. protected $magick_handle;//圖片操作句柄
  17. protected $format = array('jpg','gif', 'png','jpeg'); // 圖片檔案格式限定
  18. protected $smallpic_mode = 2;//預設模式0為不產生縮圖,1為裁切縮放,2為比例縮放3為縮放填滿模式
  19. /**
  20. * 設定圖片類別參數
  21. *
  22. * @param $arg 圖片參數多次可放入數組裡如下
  23. * @param $protected 參數值
  24. * array(
  25. * 'waterrate'=>0.2,
  26. * 'water_mark'=>'./water.png',
  27. * 'water_mark_pos'=>4,
  28. * 'smallpic_mode'=>1
  29. * ) ;
  30. * @return ture/false
  31. */
  32. public function set_args($arg,$val="")
  33. {
  34. $params = array('waterrate','water_mark', 'water_mark_pos','smallpic_mode','watermode','width','height');
  35. if(is_array($arg))
  36. {
  37. foreach ($arg as $k =>$v )
  38. {
  39. if(in_array($k,$params))
  40. {
  41. $this->$k = $v;
  42. }
  43. }
  44. }
  45. else
  46. {
  47. if(empty($val))
  48. {
  49. return false;
  50. }
  51. else
  52. {
  53. if(in_array($arg,$array($arg,$ params))
  54. {
  55. $this->$arg = $val;
  56. }
  57. }
  58. }
  59. return true;
  60. }
  61. /* *
  62. * 圖片縮放
  63. *
  64. * @param $src_file 來源檔案路徑
  65. * @param $dst_file 目標檔案路徑
  66. * @return 縮寫圖片路徑/false
  67. */
  68. public function scale($src_file,$dst_file="")
  69. {
  70. $dst_width = $this->width;
  71. $dst_height = $this->height;
  72. $mode = $this->smallpic_mode;
  73. $magic_water_handle = NewMagickWand();
  74. if (!MagickReadImage($magic_water_handle, $src_file))return false;
  75. $srcext = strtolower(MagickGetImageFormat($magic_water_handle));
  76. if($srcext=='bmp')
  77. {
  78. $srcext = 'jpeg';
  79. }
  80. if !in_array($srcext,$this->format))return false;
  81. //尺寸
  82. $src_width = MagickGetImageWidth($magic_water_handle);
  83. $src_height = MagickhandImage_Height( 🎜> //裁切縮放模式
  84. if($mode == 1)
  85. {
  86. $pos_x=$pos_y = 0;//裁切臨時位置
  87. $src_widthc = $src_width;/ /裁切臨時寬度
  88. $src_heightc = $src_height;//裁切臨時高度
  89. if($src_width/$src_height>$dst_width/$dst_height)
  90. {
  91. $hewid/$dst $dst_width/$dst_height;
  92. $pos_x = ($src_width-$src_widthc)/2;
  93. }
  94. else
  95. {
  96. $ssrc; dst_width;
  97. $pos_y = ($src_height-$src_heightc)/2;
  98. }
  99. MagickCropImage($magic_water_handle,$src_widthc,$src_heightc,$pos_heightc,$ //因為MagickCropImage函數後,Gif 影像改,但畫布不變
  100. $this->magick_handle = NewMagickWand();
  101. MagickNewImage($this->magick_handle,$src_widthc,$src_heffightc,'#ffffight') ;
  102. MagickSetFormat($this->magick_handle,$srcext);
  103. MagickCompositeImage($this->magick_handle,$magic_water_handle,MW_OverCompositeOp,0,0);
  104. //縮放->magick_handle, $dst_width, $dst_height);
  105. }
  106. //比例縮放模式
  107. if($mode == 2)
  108. {
  109. if($src_width/$ src_height>$dst_width/$dst_height)
  110. {
  111. $dst_height=$dst_width*$src_height/$src_width;
  112. }
  113. else /$src_height;
  114. }
  115. $this->magick_handle=$magic_water_handle;//替換
  116. MagickScaleImage($this->magick_handle, $dst_width, $dst_height);//縮放
  117. }
  118. //縮放填充模式
  119. > if($mode == 3)
  120. {
  121. if($src_width/$src_height>$dst_width/$dst_height)
  122. {
  123. $dst_heightc=$dst_width 🎜> $dst_widthc=$dst_width;
  124. }
  125. else
  126. {
  127. $dst_widthc=$dst_height*$src_width/$src_height;widthc=$dst_height*$src_width/$src_height; MagickScaleImage($magic_water_handle, $dst_widthc, $dst_heightc);//縮放
  128. $this->magick_handle = NewMagickWand();
  129. MagickNewImage($this->dwick_handle,$d_NewImage($d_NewImage($this-stick_handle,$st_p. Smallpic_bgcolor);
  130. MagickSetFormat($this->magick_handle,$srcext);
  131. MagickCompositeImage($this->magick_handle,$magic_water_handle,MW_OverCompositeOp,($dst_width-$ ) )/2);
  132. }
  133. //打浮水印
  134. if($this->watermode == 1)
  135. {
  136. $this->; set_mark();
  137. }
  138. if(empty($dst_file))
  139. {
  140. //建立暫存檔案
  141. $dst_file = tempnam($_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG" );
  142. }
  143. MagickWriteImage($this->magick_handle, $dst_file);
  144. return $dst_file;
  145. }
  146. /**
  147. * 打浮水印
  148. *
  149. * @param $src_file 要打浮水印的圖片路徑
  150. * @param $dst_file 生產浮水印的檔案儲存路徑,為空則生產隨機暫存檔案
  151. * @return 浮水印檔案路徑/false
  152. / {
  153. $this->magick_handle = NewMagickWand();
  154. if (!MagickReadImage($this->magick_handle, $src_file)> return false;
  155. $this->set_mark();
  156. if(empty($dst_file))
  157. {
  158. //建立暫存檔案
  159. $dst_file = tempnam($ _SERVER["SINASRV_CACHE_DIR "],"TMP_IMG");
  160. }
  161. MagickWriteImage($this->magick_handle, $dst_file);
  162. return $dst_file;
  163. }
  164. ** $dst_file;
  165. }
  166. ** */
  167. protected function set_mark()
  168. {
  169. //
  170. $dst_width = MagickGetImageWidth($this->magick_handle); $dst_height_ Magic ) );
  171. //處理浮水印圖
  172. if ($this->water_mark && is_file($this->water_mark))
  173. {
  174. $magic_water_handle = NewMagickWand();
  175. MagicRemImage( $ magic_water_handle);
  176. if (MagickReadImage($magic_water_handle, $this->water_mark))
  177. {
  178. MagickScaleImage($magic_water_handle, $dst_wid*$this-fidth*$this-did*$th. waterrate *MagickGetImageHeight($magic_water_handle)/MagickGetImageWidth($magic_water_handle));//將水印縮放到圖片的1/5
  179. if ($this->water_mark_pos == 1 )
  180. $padding;
  181. $top = $this->padding;
  182. }
  183. elseif ($this->water_mark_pos == 2)
  184. {
  185. $left = $dst_width-$ this- >padding-MagickGetImageWidth($magic_water_handle);
  186. $top = $this->padding;
  187. }
  188. elseif ($this ->water_mark_pos == 3)
  189. {
  190. $
  191. $ = $ this->padding;
  192. $top = $dst_height -$this->padding-MagickGetImageHeight($magic_water_handle);
  193. }
  194. elseif ($this->water_mark_pos == 4)
  195. {🎜> {
  196. $left = $dst_width-$this->padding-MagickGetImageWidth($magic_water_handle);
  197. $top =$dst_height -$this->padding-MagickGetImageHeight($magic_water_height -$this->padding-MagickGetImageHeight($magic_water_handle);water_mark_pos == 5)
  198. {
  199. $left = ($dst_width-MagickGetImageWidth($ magic_water_handle))/2;
  200. $top =($dst_height -MagickGetImageHeight( 2;
  201. }
  202. MagickCompositeImage($this->magick_handle,$magic_water_handle,MW_OverCompositeOp,$left,$頂部);
  203. }
  204. }
  205. }
  206. }
  207. >
  208. 複製程式碼
  209. 和加, php


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn