首頁  >  文章  >  後端開發  >  php 縮圖生成類別(支援imagemagick與gd庫)

php 縮圖生成類別(支援imagemagick與gd庫)

WBOY
WBOY原創
2016-07-25 08:55:26799瀏覽
  1. /** 縮圖產生類別,支援imagemagick及gd庫兩種處理

  2. * Date: 2013 -07-15
  3. * Author: fdipzone
  4. * Ver: 1.2
  5. * edit: bbs.it-home.org
  6. * Func:
  7. * public set_config: 設定參數
  8. * Func:
  9. * public set_config: 設定參數
  10. * public create_thumb: 產生縮圖
  11. * private fit: 縮寫圖片
  12. * private crop: 裁切圖片
  13. * private gd_fit: GD1p: GD
  14. >* private get_size: 獲取要轉換的size
  15. * private get_crop_offset: 獲取裁圖的偏移量
  16. * private add_watermark: 添加水印
  17. * private check_handler: 判斷處理程序是否已安裝
  18. * private create_dirs: 建立目錄
  19. * private exists: 判斷參數是否存在
  20. * private to_log: 記錄log
  21. * private hex2rgb: hex_vgb> 獲取圖片🎜>* private hex2rgb: hex_getsgb
  22. 獲取圖片🎜> 得到圖片*
  23. * ver: 1.1 增加GD庫處理
  24. * ver: 1.2 增加width,height錯誤參數處理
  25. * 增加當圖片colorspace不為RGB時作轉RGB處理* 修正使用crop保存為gif時出現透明無效區域問題,使用+repage參數,刪除透明無效區域即可
  26. *
  27. * tips:建議使用imagemagick
  28. * GD庫不支援透明度水印,如果必須使用透明水印,請將浮水印圖片做成有透明度。
  29. * GD庫輸出gif如加透明浮水印,會有問題。
  30. */
  31. class PicThumb{ // class start
  32. private $_log = null; // log file
  33. private $_handler = null; // 進行圖片處理的程式,imagemagick/gd函式庫
  34. private $_type = 'fit'; // fit or crop
  35. private $_source = null; // 原圖路徑
  36. private $_dest = null; // 縮圖路徑
  37. private $_watermark = null; // 水印圖片
  38. private $_opacity = 75; // 水印圖片透明度,gd庫不支援
  39. private $_gravity = 'SouthEast'; // 水印擺放位置NorthWest,, North, NorthEast, West, Center, East, SouthWest, South, SouthEast
  40. private $_geometry = '+10+10'; // 水印定位,gd庫不支援
  41. private $_croppos = 'TL'; /gd庫不支援
  42. private $_croppos = 'TL'; / / 截圖的位置TL TM TR ML MM MR BL BM BR
  43. private $_bgcolor = null; // 填入的背景色
  44. private $_quality = 90; // 產生的圖片品質
  45. private $_quality = 90; // 產生的圖片品質
  46. private $_width = null; // 指定區域寬度
  47. private $_height = null; // 指定區域高度
  48. // 初始化
  49. public function __construct($logfile=''){
  50. if($logfile!=''){
  51. $this->_log = $logfile;
  52. }
  53. }
  54. // 設定參數
  55. public function set_config ( $param=array()){
  56. $this->_handler = $this->exists($param, 'handler')? strtolower($param['handler']) : null;
  57. $this- >_type = $this->exists($param, 'type')? strtolower($param['type']) : 'fit';
  58. $this->_watermark = $this- >exists($param, 'watermark')? $param['watermark'] : null;
  59. $this->_opacity = $this->exists($param, 'opacity')? $param[ 'opacity'] : 75;
  60. $this->_gravity = $this->exists($param, 'gravity')? $param['gravity'] : 'SouthEast';
  61. $this- >_geometry = $this->exists($param , 'geometry')? $param['geometry'] : '+10+10';
  62. $this->_croppos = $this->exists ($param, 'croppos')? $param['croppos' ] : 'TL';
  63. $this->_bgcolor = $this->exists($param, 'bgcolor')? $param[' bgcolor'] : null;
  64. $this->_quality = $this ->exists($param, 'quality')? $param['quality'] : 90;
  65. $this->_width = $this->exists($param, 'width')? $param['width '] : null;
  66. $this->_height = $this->exists($param, 'height') ? $param['height'] : null;
  67. }
  68. /* *建立縮圖
  69. * @param String $source 原圖
  70. * @param String $dest 目標圖
  71. * @return boolean
  72. */
  73. public function create_thumb($source, $dest){
  74. / / 檢查所使用的handler是否已安裝
  75. if(!$this->check_handler()){
  76. $this->to_log('handler not installed');
  77. return false;
  78. }
  79. // 判斷區域寬高是否正確
  80. if(!is_numeric($this ->_width) || !is_numeric($this->_height) || $this->_width< ;=0 || $this->_height $this->to_log('width or height invalid');
  81. return false;
  82. }
  83. // 判斷來源檔案是否存在
  84. if(!file_exists($source)){
  85. $this->to_log($ source.' not exists');
  86. return false;
  87. }
  88. // 建立目標檔案路徑
  89. if(!$this->create_dirs($dest)){
  90. $this->to_log(dirname($dest).' create fail') ;
  91. return false;
  92. }
  93. $this->_source = $source; // 來源檔案
  94. $this->_dest = $dest; // 目標檔
  95. // 處理圖片
  96. switch($this->_type){
  97. case 'fit':
  98. if($this ->_handler=='imagemagick'){
  99. return $this->fit();
  100. }else{
  101. return $this->gd_fit();
  102. }
  103. break;
  104. case 'crop':
  105. if($this->_handler=='imagemagick'){
  106. return $this->crop();
  107. }else{
  108. return $ this->gd_crop();
  109. }
  110. break;
  111. default:
  112. $this->to_log($this->_type.' not fit and crop');
  113. return false;
  114. } }
  115. /**將圖片按比例壓縮或拉伸圖片
  116. * @return boolean
  117. */
  118. private function fit(){
  119. // 判斷是否填入背景
  120. $bgcolor = ($this->_bgcolor !=null)?
  121. sprintf(" -background '%s' -gravity center -extent '%sx%s' ", $this->_bgcolor, $this->_width, $this->_height) : " ";
  122. // 判斷是否要轉為RGB
  123. $source_info = getimagesize($this->_source);
  124. $colorspace = (!isset($source_info['channels']) | | $source_info['channels']!=3)? ' -colorspace RGB ' : '';
  125. // 命令列
  126. $cmd = sprintf("convert -resize '%sx%s' '%s' %s -quality %s %s '%s'", $this->_width, $this->_height, $this->_source, $bgcolor, $this->_quality, $colorspace, $this ->_dest);
  127. // 記錄執行的指令
  128. $this->to_log($cmd);
  129. // 執行指令
  130. exec($cmd);
  131. // 加水印
  132. $this->add_watermark($this->_dest);
  133. return is_file($this->_dest)? true : false;
  134. }
  135. /**裁切圖片
  136. * @return boolean
  137. */
  138. private function crop(){
  139. // 取得產生的圖片尺寸
  140. list($pic_w, $ pic_h) = $this->get_size();
  141. // 取得截圖的偏移
  142. list($offset_w, $offset_h) = $this->get_crop_offset($pic_w, $pic_h);
  143. // 判斷是否要轉為RGB
  144. $source_info = getimagesize($this->_source);
  145. $colorspace = (!isset($source_info['channels']) || $ source_info['channels']!=3)? ' -colorspace RGB ' : '';
  146. // 命令列
  147. $cmd = sprintf("convert -resize '%sx%s' '% s' -quality %s %s -crop %sx%s+%s+%s +repage '%s'", $pic_w, $pic_h, $this->_source, $this->_quality, $colorspace, $this- >_width, $this->_height, $offset_w, $offset_h, $this->_dest);
  148. // 記錄執行的命令
  149. $this->to_log($cmd);
  150. // 執行指令
  151. exec($cmd);
  152. // 新增浮水印
  153. $this->add_watermark($this->_dest);
  154. return is_file ($this->_dest)? true : false;
  155. }
  156. /**GD庫依比例壓縮或伸展圖片
  157. * @return boolean
  158. */
  159. private function gd_fit(){ */
  160. private function gd_fit(){
  161. > // 取得產生的圖片尺寸
  162. list($pic_w, $pic_h) = $this->get_size();
  163. list($owidth, $oheight, $otype) = getimagesize($this ->_source);
  164. switch($otype){
  165. case 1: $source_img = imagecreatefromgif($this->_source); break;
  166. case 2: $source_img = imagecreate ->_source); break;
  167. case 3: $source_img = imagecreatefrompng($this->_source); break;
  168. default: return false;
  169. }
  170. // 依比例縮略/拉伸圖片
  171. $new_img = imagecreatetruecolor($pic_w, $pic_h);
  172. $new_img = imagecreatetruecolor($pic_w, $pic_h);
  173. imagecopyresampled($new_img, $source_img, 0, 0, 0, 0, $pic_w, $pic_h, $picpic_ho );
  174. // 判斷是否填入背景
  175. if($this->_bgcolor!=null){
  176. $bg_img = imagecreatetruecolor($this->_width, $this->_height);
  177. $rgb = $this->hex2rgb($this->_bgcolor);
  178. $bgcolor =imagecolorallocate($bg_img, $rgb['r'], $rgb['g'], $rgb[' b']);
  179. imagefill($bg_img, 0, 0, $bgcolor);
  180. imagecopy($bg_img, $new_img, (int)(($this->_width-$pic_w)/2), (int)(($this->_height-$pic_h)/2), 0, 0, $pic_w, $pic_h);
  181. $new_img = $bg_img;
  182. }
  183. //取得目標圖片的類型
  184. $dest_ext = $this->get_file_ext($this->_dest);
  185. // 產生圖片
  186. switch($dest_ext){
  187. case 1: imagegif ($new_img, $this->_dest, $this->_quality); break;
  188. case 2: imagejpeg($new_img, $this->_dest, $this->_quality); break;
  189. case 3 : imagepng($new_img, $this->_dest, (int)(($this->_quality-1)/10)); break;
  190. }
  191. if(isset($source_img)) {
  192. imagedestroy($source_img);
  193. }
  194. if(isset($new_img)){
  195. imagedestroy($new_img);
  196. }
  197. //加水印
  198. $this->add_watermark($this->_dest);
  199. return is_file($this->_dest)? true : false; }
  200. /**GD庫裁切圖片
  201. * @return boolean
  202. */
  203. private function gd_crop(){
  204. // 取得產生的圖片尺寸
  205. list($pic_w, $pic_h) = $this->get_size();
  206. // 取得截圖的偏移
  207. list($offset_w, $offset_h) = $this->get_crop_offset($pic_w, $pic_h);
  208. list($owidth, $oheight, $otype) = getimagesize($this->_source);
  209. switch($otype){
  210. case 1: $source_img = imagecreatefrom(thisagecreatefrom($this ->_source); break;
  211. case 2: $source_img = imagecreatefromjpeg($this->_source); break;
  212. case 3: $source_img = imagecreatefrompng($this->_source); break;
  213. ; default: return false;
  214. }
  215. // 按比例縮寫/拉伸圖片
  216. $tmp_img = imagecreatetruecolor($pic_w, $pic_h);
  217. imagecopyresampled($tmpresampled($img, $ , 0, 0, 0, 0, $pic_w, $pic_h, $owidth, $oheight);
  218. // 裁切圖片
  219. $new_img = imagecreatetruecolor($this->_width, $this-> _height);
  220. imagecopyresampled($new_img, $tmp_img, 0, 0, $offset_w, $offset_h, $this->_width, $this->_height, $this->_width, $this->_height); 🎜>
  221. // 取得目標圖片的類型
  222. $dest_ext = $this->get_file_ext($this->_dest);
  223. // 產生圖片
  224. switch($dest_ext){
  225. case 1: imagegif($new_img, $this->_dest, $this->_quality); break;
  226. case 2: imagejpeg($new_img, $this->_dest, $this->_quality); break;
  227. case 3: imagepng($new_img, $this->_dest, (int)(($this->_quality-1)/10)); break;
  228. }
  229. if (isset($source_img)){
  230. imagedestroy($source_img);
  231. }
  232. if(isset($tmp_img)){
  233. imagedestroy($tmp_img); 🎜>
  234. if(isset($new_img)){
  235. imagedestroy($new_img);
  236. }
  237. // 加水印
  238. $this->add_watermark($this-> _dest);
  239. return is_file($this->_dest)? true : false;
  240. }
  241. /**取得目標圖產生的size
  242. * @return Array $width, $height
  243. / private function get_size(){
  244. list($owidth, $oheight) = getimagesize($this->_source);
  245. $width = (int)($this->_width);
  246. $height = (int)($this->_height);
  247. switch($this->_type){
  248. case 'fit':
  249. $pic_w = $width;
  250. $pic_h = ( int)($pic_w*$oheight/$owidth);
  251. if($pic_h>$height){
  252. $pic_h = $height;
  253. $pic_w = (int)($pic_h*$owidth/ $oheight);
  254. }
  255. break;
  256. case 'crop':
  257. if($owidth>$oheight){
  258. $pic_h = $height;
  259. $pic_w = (int )($pic_h*$owidth/$oheight);
  260. }else{
  261. $pic_w = $width;
  262. $pic_h = (int)($pic_w*$oheight/$owidth);
  263. }
  264. break;
  265. }
  266. return array($pic_w, $pic_h);
  267. }
  268. /**取得截圖的偏移
  269. * @param int $pic_w 圖寬度
  270. * @param int $pic_h 圖高度
  271. * @return Array $offset_w, $offset_h
  272. */
  273. 毛髮函數 get_crop_offset($pic_w, $pic_h){
  274. $offset_w = 0;
  275. $offset_h = 0;
  276. switch(strtoupper($this->_croppos)){
  277. case 'TL':
  278. $offset_w = 0;
  279. $offset_h = 0;
  280. 休息;
  281. case 'TM':
  282. $offset_w = (int)(($pic_w-$this->_width)/2);
  283. $offset_h = 0;
  284. 休息;
  285. case 'TR':
  286. $offset_w = (int)($pic_w-$this->_width);
  287. $offset_h = 0;
  288. 休息;
  289. 案例 'ML':
  290. $offset_w = 0;
  291. $offset_h = (int)(($pic_h-$this->_height)/2);
  292. 休息;
  293. case 'MM':
  294. $offset_w = (int)(($pic_w-$this->_width)/2);
  295. $offset_h = (int)(($pic_h-$this->_height)/2);
  296. 休息;
  297. case 'MR':
  298. $offset_w = (int)($pic_w-$this->_width);
  299. $offset_h = (int)(($pic_h-$this->_height)/2);
  300. 休息;
  301. 案例 'BL':
  302. $offset_w = 0;
  303. $offset_h = (int)($pic_h-$this->_height);
  304. 休息;
  305. case 'BM':
  306. $offset_w = (int)(($pic_w-$this->_width)/2);
  307. $offset_h = (int)($pic_h-$this->_height);
  308. 休息;
  309. case 'BR':
  310. $offset_w = (int)($pic_w-$this->_width);
  311. $offset_h = (int)($pic_h-$this->_height);
  312. 休息;
  313. }
  314. 回傳記憶體($offset_w, $offset_h);
  315. }
  316. /**新增浮水印
  317. * @param String $dest 圖片路徑
  318. */
  319. private function add_watermark($dest){
  320. if($this->_watermark!=null && file_exists($ 1 ->_watermark) && file_exists($dest)){
  321. list($owidth, $oheight, $otype) = getimagesize($dest);
  322. list($w, $h, $wtype) = getimagesize($this->_watermark);
  323. // 水印圖比原圖小才加浮水印
  324. if($w
  325. if($this-> ;_handler=='imagemagick'){ // imagemagick 加浮水印
  326. $cmd = sprintf("composite -gravity %s -geometry %s -dissolve %s '%s' %s %s", $這->_gravity,$這->_geometry,$這->_opacity,$這->_watermark,$dest,$dest);
  327. $this->to_log($cmd);
  328. exec($cmd);
  329. }else{ // gd 加水印
  330. switch($wtype){
  331. case 1: $water_img = imagecreatefromgif($this->_watermark);休息;
  332. 情況2:$water_img = imagecreatefromjpeg($this->_watermark); 休息;
  333. 案例3:$water_img = imagecreatefrompng($this->_watermark); 休息;
  334. 預設:回傳 false;
  335. }
  336. switch($otype){
  337. 情況 1: $dest_img = imagecreatefromgif($dest); 休息;
  338. 情況2:$dest_img = imagecreatefromjpeg($dest);休息;
  339. 案例 3:$dest_img = imagecreatefrompng($dest); 休息;
  340. 預設:回傳 false;
  341. }
  342. // 水印位置
  343. switch(strtolower($this->_gravity)){
  344. case '西北':
  345. $posX = 0;
  346. $posY = 0
  347. $posX = 0;
  348. $posY = 0
  349. 休息;
  350. case '北':
  351. $posX = ($owidth - $w) / 2;
  352. $posY = 0;
  353. 休息;
  354. case '東北':
  355. $posX = $owidth - $w;
  356. $posY = 0;
  357. 休息;
  358. case '西':
  359. $posX = 0;
  360. $posY = ($oheight - $h) / 2;
  361. 休息;
  362. case 'center':
  363. $posX = ($owidth - $w) / 2;
  364. $posY = ($oheight - $h) / 2 ;
  365. 休息;
  366. case 'east':
  367. $posX = $owidth - $w;
  368. $posY = ($oheight - $h) / 2;
  369. 休息;
  370. case '西南':
  371. $posX = 0;
  372. $posY = $oheight - $h;
  373. 休息;
  374. case '南':
  375. $posX = ($owidth - $w ) / 2;
  376. $posY = $oheight - $h;
  377. 休息;
  378. case '東南':
  379. $posX = $owidth - $w;
  380. $posY = $oheight -posY = $owidth - $w;
  381. $posY = $oheight - $h;
  382. 休息;
  383. }
  384. imagealphablending($dest_img, true);
  385. imagecopy($dest_img, $water_img, $posX, $posY, 0, 0, $w, $w $h);
  386. switch($otype){
  387. 情況1:imagegif($dest_img, $dest, $this->_quality);休息;
  388. 情況2:imagejpeg($dest_img, $dest, $this->_quality);休息;
  389. 情況3:imagepng($dest_img, $dest, (int)(($this->_quality-1)/10));休息;
  390. }
  391. if(isset($water_img)){
  392. imagedestroy($water_img);
  393. }
  394. if(isset($dest_img)){
  395. if(isset($dest_img)){
  396. imagedestro );
  397. }
  398. }
  399. }
  400. }
  401. }
  402. /**判斷處理程序是否已安裝
  403. * @return boolean
  404. */
  405. 私有函式>
  406. /**建立圖片目錄
  407. * @param String $path
  408. * @return boolean
  409. */
  410. 私有函數{
  411. $handler = $this->_handler;
  412. if(!in_array($handler, array('imagemagick', 'gd', null))){
  413. return false ;
  414. }
  415. // 檢查是否安裝imagemagick
  416. $imagemagick_installed = strstr(shell_exec('convert -version'),'Version: ImageMagick')!=''?:假;
  417. // 檢查是否有安裝gd函式庫
  418. $gd_installed = function_exists('gd_info')? 真:假;
  419. switch($handler){
  420. case 'imagemagick':
  421. return $imagemagick_installed;
  422. 休息;
  423. case 'gd':
  424. return $gd_installed;
  425. 休息;
  426. case null:
  427. if($ imagemagick_installed){
  428. $this->_handler = 'imagemagick';
  429. 回傳true;
  430. }
  431. if($gd_installed){
  432. $this->_handler = 'gd' ;
  433. 返回true;
  434. }
  435. 休息;
  436. }
  437. 返回false;
  438. }
  439. /**判斷參數是否存在
  440. * @param Array $obj 陣列物件
  441. * @param String $key 要找的key
  442. * @return boolean
  443. */
  444. private function create_dirs($dest){
  445. if(!is_dir(dirname($dest))){
  446. 回傳mkdir(dirname($dest), 0777, true);
  447. }
  448. > 回傳true;
  449. }
  450. /***/
  451. 私有函數存在($obj,$key=''){
  452. if($key= ='') { return isset($obj) && !empty($obj); }else{ $keys =explode('.',$key); for($ i=0,$max=count($keys); $i if(isset($obj[$keys[$i]])){ $obj = $ obj[$keys[$i]]; }else{
  453. 回傳false;
  454. }
  455. }
  456. return isset($obj) && !empty($obj);
  457. }
  458. }
  459. /**記錄log
  460. * @param String $msg 要記錄的log 訊息
  461. */
  462. 私有函數to_log($msg){
  463. if($this->_log){
  464. $msg = '['.date('Y-m-d H:i:s ').']'.$msg."rn";
  465. file_put_contents($this->_log, $msg, FILE_APPEND);
  466. }
  467. }
  468. /* *hex顏色轉rgb顏色
  469. * @param String $color hex顏色
  470. * @return Array
  471. */
  472. 私有函數hex2rgb($hexcolor){
  473. $color = str_replace('#', '' , $hexcolor);
  474. if (strlen($color) > 3) {
  475. $rgb = array(
  476. 'r' => hexdec(substr($color, 0, 2)),
  477. 'g ' => 十六進位(substr($color, 2, 2 )),
  478. 'b' => 十六進位(substr($color, 4, 2))
  479. );
  480. } else {
  481. $r = substr($color, 0, 1) . substr($顏色, 0, 1);
  482. $g = substr($color, 1, 1) 。 substr($顏色, 1, 1);
  483. $b = substr($color, 2, 1) 。 substr($顏色, 2, 1);
  484. $rgb = array(
  485. 'r' => 十六進位($r),
  486. 'g' => 十六進位($g ),
  487. 'b' => 十六進位($ b)
  488. );
  489. }
  490. 回傳$rgb;
  491. }
  492. /** 取得圖片類型
  493. * @param String $file 圖片路徑
  494. * @return int
  495. */
  496. private function get_file_ext($file){
  497. $filename = basename($file);
  498. list($name, $ext)=explode('.', $filename);
  499. $ext_type = 0;
  500. switch(strtolower($ext)){
  501. case 'jpg':
  502. case 'jpeg':
  503. $ext_type = 2;
  504. 休息;
  505. case 'gif':
  506. $ext_type = 1;
  507. 休息;
  508. 案例'png':
  509. $ext_type = 3;
  510. 休息;
  511. }
  512. 回傳$ext_type;
  513. }
  514. } // 課程結束
  515. ?>;
  516. 示範:
  517. [php] view plaincopydefine('ROOT', dirname(__FILE__));
  518. require(ROOT."/PicThumb.class.php");
  519. $logfile = ROOT. '/PicThumb.log';
  520. $source1 = ROOT.'/pic/source.jpg';
  521. $dest1 = ROOT.'/pic/1.jpg';
  522. $dest2 = ROOT.' /pic/2.gif';
  523. $dest3 = ROOT.'/pic/3.png';
  524. $source2 = ROOT.'/pic/source_cmyk.jpg';
  525. $dest4 = ROOT.'/pic/4.jpg';
  526. $dest5 = ROOT.'/pic/5.gif';
  527. $dest6 = ROOT.'/pic/6.png';
  528. $watermark = ROOT.'/pic/watermark.png';
  529. //按比例產生預算
  530. $param = array(
  531. 'type' => 'fit',
  532. 'width' => 100,
  533. 'height ' => 100,
  534. );
  535. $obj = new PicThumb($logfile);
  536. $obj->set_config($param );
  537. $flag = $obj->create_thumb($source1, $dest1);
  538. if($flag){ // bbs.it-home.org
  539. echo 'php 縮圖生成類別(支援imagemagick與gd庫)';
  540. }else{
  541. echo '建立拇指失敗';
  542. }
  543. //按比例產生少許,缺失部分以#FF0000填滿
  544. $param = array(
  545. 'type' => 'fit',
  546. 'width ' => 100,
  547. '高度' => 100,
  548. ' bgcolor' => '#FFFF00'
  549. );
  550. $obj = new PicThumb($logfile);
  551. $obj->set_config($param);
  552. $flag = $objobjj->set_config($param);
  553. $flag = $objbjj-> ->create_thumb($source1, $dest2);
  554. if($flag){
  555. echo 'php 縮圖生成類別(支援imagemagick與gd庫)';
  556. }else{
  557. echo '創建拇指失敗';
  558. }
  559. // 裁剪250x250的大概,裁剪位置是底部中間,水印位置西南,寬度50
  560. $param = array (
  561. 'type' => 'crop' ,
  562. 'croppos' => 'BM',
  563. '寬度' => 250,
  564. '高度' => 250,
  565. '水印' => $水印> '不透明度' => 50,
  566. '重力' => '西南'
  567. );
  568. $obj = new PicThumb($logfile);
  569. $ obj->set_config($param);
  570. $flag = $obj->create_thumb($source1, $dest3);
  571. if($flag){
  572. echo 'php 縮圖生成類別(支援imagemagick與gd庫)';
  573. }else{
  574. echo '建立拇指失敗';
  575. }
  576. //按比例產生特定CMYK格式
  577. $param = array(
  578. 'type' => 'fit',
  579. 'width' => 100 ,
  580. '高度' => 100,
  581. );
  582. $obj = new PicThumb($logfile);
  583. $obj->set_config($param);
  584. $flag = $obj->create_thumb($source2, $dest4);
  585. if( $flag){
  586. echo 'php 縮圖生成類別(支援imagemagick與gd庫)';
  587. }else{
  588. echo '建立拇指失敗';
  589. }
  590. // 以比例產生縮圖,不足部分以#FF0000填滿CMYK格式

  591. $param = array(
  592. 'type' => 'fit',
  593. ' width' => 100,
  594. 'height' => 100,
  595. 'bgcolor' => '#FFFF00'
  596. );
  597. $obj = new PicThumb($logfile);
  598. $obj->set_config($param);
  599. $flag = $obj->create_thumb($source2, $dest5);
  600. if($flag){
  601. echo 'php 縮圖生成類別(支援imagemagick與gd庫)';
  602. }else{
  603. echo 'create thumb fail';
  604. }
  605. // 裁剪250x250的縮圖圖,裁切位置是底部中間,浮水印位置西南,透明度50 CMYK格式
  606. $param = array(
  607. 'type' => 'crop',
  608. 'croppos' => 'BM',
  609. 'width' => 250,
  610. 'height' => 250,
  611. 'watermark' => $watermark,
  612. 'opacity' => 50,
  613. 'gravity' => 'SouthWest'
  614. );
  615. $obj = new PicThumb($logfile);
  616. $obj->set_config($param);
  617. $flag = $obj->create_thumb($source2, $🎜>$flag = $obj->create_thumb($source2, $🎜>$flag = $obj->create_thumb($source2, $🎜>$flag = $obj->create_thumb($source2, $🎜>$flag = $obj->create_thumb($source2, $ dest6);
  618. if($flag){
  619. echo 'php 縮圖生成類別(支援imagemagick與gd庫)';
  620. }else{
  621. echo 'create thumb fail';
  622. }
  623. ?>
複製程式碼

>>>> php縮圖產生類別原始碼下載位址



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