PHP サムネイル生成クラス (imagemagick および gd ライブラリをサポート)

WBOY
リリース: 2016-07-25 08:55:26
オリジナル
799 人が閲覧しました
  1. /** サムネイル生成クラス、imagemagick および gd ライブラリ処理をサポート

  2. * 日付: 2013-07-15
  3. * 著者: fdipzone
  4. * Ver: 1.2
  5. * edit : bbs.it-home.org
  6. * Func:
  7. * public set_config: パラメータの設定
  8. * public create_thumb: サムネイル画像の生成
  9. * private fit: サムネイル画像
  10. * private Crop: 画像のトリミング
  11. * private gd_fit: GD ライブラリのサムネイル画像
  12. * private gd_crop: GDライブラリのトリミング画像
  13. * private get_size: 変換するサイズを取得
  14. * private get_crop_offset: トリミングのオフセットを取得
  15. * private add_watermark: ウォーターマークを追加
  16. * private check_handler: プログラムが実行されたかどうかの判定処理インストールされています
  17. * private create_dirs: ディレクトリを作成します
  18. * private contains: パラメーターが存在するかどうかを確認します
  19. * private to_log: ログを記録します
  20. * private hex2rgb: 16 進数のカラーを rgb カラーに変換します
  21. * private get_file_ext: 画像の種類を取得します
  22. *
  23. * ver : 1.1 GDライブラリ処理を追加
  24. * ver: 1.2 幅と高さのエラーパラメータ処理を追加
  25. * 画像の色空間がRGBでない場合のRGB処理への変換を追加
  26. * 切り抜きを使用してgifとして保存する際に、透明な無効領域が発生する問題を修正+repage パラメーターを使用して、透明な無効領域を削除するだけです
  27. *
  28. * ヒント: imagemagick を使用することをお勧めします
  29. * GD ライブラリは透明ウォーターマークをサポートしていません。透明ウォーターマークを使用する必要がある場合は、ウォーターマーク画像を透明にしてください。
  30. * GD ライブラリが透明な透かしを含む GIF を出力する場合、問題が発生します。
  31. */
  32. class PicThumb{ // クラス開始
  33. private $_log = null; // ログファイル
  34. private $_handler = null // 画像処理用プログラム、imagemagick/gd ライブラリ
  35. private $_type = 'fit ' ; // フィットまたはトリミング
  36. private $_source = null; // 元の画像のパス
  37. private $_watermark = null; // ウォーターマーク画像
  38. 画像の透明度、gd ライブラリはサポートしていません
  39. private $_gravity = 'SouthEast' // ウォーターマークの配置場所 NorthWest、North、NorthEast、West、Center、East、SouthWest、South、SouthEast
  40. private $_geometry = '+10+ 10'; ; // ウォーターマークの配置、gd ライブラリはサポートしていません
  41. private $_croppos = 'TL'; // スクリーンショットの場所 TL TM TR ML MM MR BL BM BR
  42. private $_bgcolor = null // 塗りつぶされた背景色
  43. private $_quality = 90; // 生成される画質
  44. private $_width = null; // 領域の幅を指定
  45. // 初期化
  46. public function __construct($logfile=' '){
  47. if($logfile!=''){
  48. $this->_log = $logfile;
  49. }
  50. }
  51. // パラメータを設定
  52. public function set_config($param=array()){
  53. $this-> ;_handler = $this->exists($param, 'handler')? strto lower($param['handler']) : null; $this->_type = $this->exists( $param, ' type')? strto lower($param['type']) : 'fit'; $this->_watermark = $this->exists($param, 'watermark')? null;
  54. $this->_opacity = $this->exists($param, 'opacity') : 75;
  55. $this->_gt;gt;exists( $param, '重力')? $param['重力'] : '南東'; $this->_geometry = $this->exists($param, 'ジオメトリ')? : '+10+10';
  56. $this->_croppos = $this->exists($param, 'croppos') : 'TL'; = $this->exists($param, 'bgcolor')? $param['bgcolor'] : null;
  57. $this->_quality = $this->exists($param, 'quality ')? param['quality'] : 90;
  58. $this->_width = $this->exists($param, 'width') : null; $this->exists($param, 'height')? $param['height'] : null;
  59. }
  60. /**サムネイル画像を作成します
  61. * @param String $source オリジナル画像
  62. * @param String $dest ターゲット画像
  63. * @return boolean
  64. */
  65. public function create_thumb($source, $ dest){
  66. // 使用されているハンドラーがインストールされているかどうかを確認します
  67. if(!$this->check_handler()){
  68. $this->to_log('ハンドラーがインストールされていません');
  69. return false }
  70. // 判定します。エリアの幅と高さが正しいかどうか
  71. if(!is_numeric($this->_width) || !is_numeric($this->_height) || $this->_width<=0 || $this - >_height<=0){
  72. $this->to_log('幅または高さが無効です');
  73. return false; }
  74. // ソースファイルが存在するかどうかを判断します
  75. if(!file_exists($source) ){
  76. $this->to_log($source.' が存在しません');
  77. return false }
  78. // ターゲットファイルパスを作成します
  79. if(!$this->create_dirs($dest)){
  80. $this ->to_log(dirname($dest).' 作成失敗');
  81. return false; }
  82. $this->_source = $source; // ソースファイル
  83. $this->_dest = $ dest; // 対象ファイル
  84. // 画像を処理
  85. switch($this->_type){
  86. case 'fit':
  87. if($this->handler=='imagemagick'){
  88. return $this -> fit();
  89. }else{
  90. return $this->gd_fit();
  91. case 'crop':
  92. if($this->_handler=='imagemagick')
  93. return $this->crop();
  94. }else{
  95. return $this->gd_crop();
  96. デフォルト:
  97. $this->to_log($this->_type. ' フィットしていない');
  98. false を返します }
  99. }
  100. /**画像を比例的に圧縮または引き伸ばします
  101. * @return boolean
  102. */
  103. private function fit(){
  104. // 背景を塗りつぶすかどうかを決定
  105. $bgcolor = ($this->_bgcolor!=null)
  106. sprintf(" -background? '% s' -gravity center -extent '%sx%s' ", $this->_bgcolor, $this->_width, $this->_height) : "";
  107. // 変換するかどうかを決定RGB へ
  108. $source_info = getimagesize($this->_source);
  109. $colorspace = (!isset($source_info['channels']) || $source_info['channels']!=3)? ' : '';
  110. // コマンドライン
  111. $cmd = sprintf("convert -resize '%sx%s' '%s' %s -quality %s %s '%s'", $this-> _width, $this->height, $this->_source, $bgcolor, $this->_quality, $colorspace, $this->_dest);
  112. // 実行されたコマンドを記録します
  113. $this-> ;to_log ($cmd);
  114. // コマンドを実行
  115. exec($cmd);
  116. // ウォーターマークを追加
  117. $this->add_watermark($this->_dest);
  118. return is_file($this-) > _dest)? true : false;
  119. }
  120. /**画像をトリミング
  121. * @return boolean
  122. */
  123. プライベート関数 Crop(){
  124. // 生成された画像サイズを取得
  125. list($pic_w, $pic_h) = $ this- >get_size();
  126. // スクリーンショットのオフセットを取得
  127. list($offset_w, $offset_h) = $this->get_crop_offset($pic_w, $pic_h); // 変換するかどうかを決定RGB へ
  128. $source_info = getimagesize($this->_source);
  129. $colorspace = (!isset($source_info['channels']) || $source_info['channels']!=3)? ' : '';
  130. // コマンドライン
  131. $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);
  132. // 実行されたコマンドを記録します
  133. $this->to_log($cmd);
  134. // コマンドを実行します
  135. exec($cmd) // ウォーターマークを追加します
  136. $this ->add_watermark ($this->_dest);
  137. return is_file($this->_dest)? true : false;
  138. /**GD ライブラリは画像を比例的に圧縮または引き伸ばします
  139. * @return boolean
  140. */
  141. プライベート関数 gd_fit() {
  142. // 生成された画像サイズを取得します
  143. list($pic_w, $pic_h) = $this->get_size();
  144. list($owidth, $oheight, $otype) = getimagesize($this-> _source);
  145. switch($otype){
  146. ケース 1: $source_img = imagecreatefromgif($this->_source);
  147. ケース 2: $source_img = imagecreatefromjpeg($this->_source);ケース 3: $source_img = imagecreatefrompng($this->_source);
  148. デフォルト: return false; }
  149. // 画像を比例的に縮小/拡大します
  150. $new_img = imagecreatetruecolor($pic_w, $pic_h); imagecopyresampled( $new_img, $source_img, 0, 0, 0, 0, $pic_w, $pic_h, $owidth, $oheight);
  151. // 背景を塗りつぶすかどうかを決定します
  152. if($this->_bgcolor!= null){
  153. $bg_img = imagecreatetruecolor($this->_width, $this->_height);
  154. $rgb = $this->hex2rgb($this->_bgcolor);
  155. $bgcolor =imagecolorallocate($) bg_img, $rgb ['r'], $rgb['g'], $rgb['b']);
  156. imagefill($bg_img, 0, 0, $bgcolor); (int)( ($this->_width-$pic_w)/2), (int)(($this->_height-$pic_h)/2), 0, 0, $pic_w, $pic_h); $new_img = $ bg_img; }
  157. // 対象画像の種類を取得
  158. $dest_ext = $this->get_file_ext($this->_dest) // 画像を生成
  159. switch($dest_ext); ){
  160. ケース 1: imagegif ($new_img, $this->_dest, $this->_quality);
  161. ケース 2: imagejpeg($new_img, $this->_dest, $this->_quality) ); ブレーク;
  162. ケース 3 : imagepng($this->_dest, (int)(($this->_quality-1)/10)); source_img)){
  163. imagedestroy( $source_img);
  164. }
  165. if(isset($new_img)){
  166. imagedestroy($new_img)
  167. }
  168. // ウォーターマークを追加
  169. $this->add_watermark($this- >_dest);
  170. return is_file($this->_dest)?
  171. }
  172. /**GD ライブラリの写真をトリミング
  173. * @return boolean
  174. */
  175. private function gd_crop(){
  176. // 生成された画像サイズを取得
  177. list($pic_w, $pic_h) = $this->get_size();
  178. //スクリーンショットのオフセットを取得します
  179. list($offset_w, $offset_h) = $this->get_crop_offset($pic_w, $pic_h)
  180. list($owidth, $oheight, $otype) = getimagesize($this->) ;_source);
  181. switch($otype){
  182. ケース 1: $source_img = imagecreatefromgif($this->_source);
  183. ケース 2: $source_img = imagecreatefromjpeg($this->_source);
  184. ケース 3: $source_img = imagecreatefrompng($this->_source);
  185. デフォルト: return false; }
  186. // 画像を比例的に縮小/伸縮します
  187. $tmp_img = imagecreatetruecolor($pic_w, $pic_h );
  188. imagecopyresampled($tmp_img, $source_img, 0, 0, 0, 0, $pic_w, $pic_h, $owidth, $oheight);
  189. // 画像をトリミングします
  190. $new_img = imagecreatetruecolor($this->_width , $this->_height);
  191. imagecopyresampled($new_img, $tmp_img, 0, 0, $offset_w, $offset_h, $this->_width, $this->_height, $this->_width, $this ->_height);
  192. // 対象画像の種類を取得
  193. $dest_ext = $this->get_file_ext($this->_dest);
  194. // 画像を生成
  195. switch($dest_ext){
  196. ケース 1: imagegif($new_img, $this->_dest, $this->_quality);
  197. ケース 2: imagejpeg($new_img, $this->_dest, $this->_quality);ブレーク;
  198. ケース 3: imagepng($new_img, $this->_dest, (int)(($this->_quality-1)/10)); ){Imagedestroy($ source_img); iset($ tmp_img)){$ tmp_img); }
  199. // ウォーターマークを追加します
  200. $this->add_watermark($this->_dest);
  201. return is_file($this->_dest) }
  202. /**ターゲット画像によって生成されたサイズを取得します
  203. * @return Array $width, $height
  204. */
  205. プライベート関数 get_size(){
  206. list($owidth, $oheight) = getimagesize($this->_source)
  207. $width = (int)($this->_width); = ( int)($this->_height);
  208. switch($this->_type){
  209. ケース 'fit':
  210. $pic_w = $width
  211. $pic_h = (int)($pic_w*$ oheight/ $owidth);
  212. if($pic_h>$height){
  213. $pic_w = (int)($pic_h*$owidth/$oheight); ':
  214. if($owidth>$oheight){
  215. $pic_h = $height;
  216. $pic_w = (int)($pic_h*$owidth/$oheight);
  217. $pic_w = $width; pic_h = (int)($pic_w*$oheight/$owidth);
  218. }
  219. }
  220. return array($pic_w, $pic_h);
  221. /**スクリーンショットのオフセットを取得します
  222. * @param int $pic_w 画像の幅
  223. * @param int $pic_h 画像の高さ
  224. * @return Array $offset_w, $offset_h
  225. */
  226. プライベート関数 get_crop_offset($pic_w, $pic_h){
  227. $offset_w = 0;
  228. $offset_h = 0;
  229. switch(strtoupper($this->_croppos)){
  230. case 'TL':
  231. $offset_w = 0;
  232. $offset_h = 0;
  233. 休憩;
  234. ケース 'TM':
  235. $offset_w = (int)(($pic_w-$this->_width)/2);
  236. $offset_h = 0;
  237. 休憩;
  238. ケース 'TR':
  239. $offset_w = (int)($pic_w-$this->_width);
  240. $offset_h = 0;
  241. 休憩;
  242. ケース 'ML':
  243. $offset_w = 0;
  244. $offset_h = (int)(($pic_h-$this->_height)/2);
  245. 休憩;
  246. case 'MM':
  247. $offset_w = (int)(($pic_w-$this->_width)/2);
  248. $offset_h = (int)(($pic_h-$this->_height)/2);
  249. 休憩;
  250. ケース 'MR':
  251. $offset_w = (int)($pic_w-$this->_width);
  252. $offset_h = (int)(($pic_h-$this->_height)/2);
  253. 休憩;
  254. ケース 'BL':
  255. $offset_w = 0;
  256. $offset_h = (int)($pic_h-$this->_height);
  257. 休憩;
  258. ケース 'BM':
  259. $offset_w = (int)(($pic_w-$this->_width)/2);
  260. $offset_h = (int)($pic_h-$this->_height);
  261. 休憩;
  262. ケース 'BR':
  263. $offset_w = (int)($pic_w-$this->_width);
  264. $offset_h = (int)($pic_h-$this->_height);
  265. 休憩;
  266. }
  267. return array($offset_w, $offset_h);
  268. }
  269. /**ウォーターマークを追加します
  270. * @param String $dest 画像パス
  271. */
  272. プライベート関数 add_watermark($dest){
  273. if($this->_watermark!=null && file_exists($this->_watermark) && file_exists($dest) ){
  274. list($owidth, $oheight, $otype) = getimagesize($dest);
  275. list($w, $h, $wtype) = getimagesize($this->_watermark);
  276. // 水印图比原图要小才加水印
  277. if($w<=$owidth && $h<=$oheight){
  278. if($this->_handler=='imagemagick'){ / / imagemagick 追加水印
  279. $cmd = sprintf("composite -gravity %s -geometry %s -dissolve %s '%s' %s %s", $this->_gt;_gravity, $this->_geometry, $ this->_opacity、$this->_watermark、$dest、$dest);
  280. $this->to_log($cmd);
  281. exec($cmd);
  282. }else{ // gd 追加水印
  283. switch($wtype){
  284. case 1: $water_img = imagecreatefromgif($this->_watermark);壊す;
  285. ケース 2: $water_img = imagecreatefromjpeg($this->_watermark);壊す;
  286. ケース 3: $water_img = imagecreatefrompng($this->_watermark);壊す;
  287. デフォルト: false を返します。
  288. }
  289. switch($otype){
  290. ケース 1: $dest_img = imagecreatefromgif($dest);壊す;
  291. ケース 2: $dest_img = imagecreatefromjpeg($dest);壊す;
  292. ケース 3: $dest_img = imagecreatefrompng($dest);壊す;
  293. デフォルト: false を返します。
  294. }
  295. // 水印位置
  296. switch(strto lower($this->_gravity)){
  297. case 'northwest':
  298. $posX = 0;
  299. $posY = 0;
  300. 休憩;
  301. '北' の場合:
  302. $posX = ($owidth - $w) / 2;
  303. $posY = 0;
  304. 休憩;
  305. '北東' の場合:
  306. $posX = $owidth - $w;
  307. $posY = 0;
  308. 休憩;
  309. ケース 'west':
  310. $posX = 0;
  311. $posY = ($oheight - $h) / 2;
  312. 休憩;
  313. case 'center':
  314. $posX = ($owidth - $w) / 2;
  315. $posY = ($oheight - $h) / 2;
  316. 休憩;
  317. case 'east':
  318. $posX = $owidth - $w;
  319. $posY = ($oheight - $h) / 2;
  320. 休憩;
  321. '南西' の場合:
  322. $posX = 0;
  323. $posY = $oheight - $h;
  324. 休憩;
  325. '南' の場合:
  326. $posX = ($owidth - $w) / 2;
  327. $posY = $oheight - $h;
  328. 休憩;
  329. '南東' の場合:
  330. $posX = $owidth - $w;
  331. $posY = $oheight - $h;
  332. 休憩;
  333. }
  334. imagealphablending($dest_img, true);
  335. imagecopy($dest_img, $water_img, $posX, $posY, 0, 0, $w, $h);
  336. switch($otype){
  337. case 1:imagegif($dest_img, $dest, $this->_quality);壊す;
  338. ケース 2:imagejpeg($dest_img, $dest, $this->_quality);壊す;
  339. ケース 3:imagepng($dest_img, $dest, (int)(($this->_quality-1)/10));壊す;
  340. }
  341. if(isset($water_img)){
  342. imagedestroy($water_img);
  343. }
  344. if(isset($dest_img)){
  345. imagedestroy($dest_img);
  346. }
  347. }
  348. }
  349. }
  350. }
  351. /**ハンドラーがインストールされているかどうかを判断します
  352. * @return boolean
  353. */
  354. プライベート関数 check_handler(){
  355. $handler = $this->_handler;
  356. if(!in_array($handler, array('imagemagick', 'gd', null))){
  357. return false;
  358. }
  359. // インストールimagemagick があるかどうか
  360. $imagemagick_installed = strstr(shell_exec('convert -version'),'Version: ImageMagick')!=''?真/偽;
  361. // インストール gd 库があるかどうか
  362. $gd_installed = function_exists('gd_info')?真/偽;
  363. switch($handler){
  364. case 'imagemagick':
  365. return $imagemagick_installed;
  366. 休憩;
  367. case 'gd':
  368. $gd_installed を返します。
  369. 休憩;
  370. case null:
  371. if($imagemagick_installed){
  372. $this->_handler = 'imagemagick';
  373. true を返します。
  374. }
  375. if($gd_installed){
  376. $this->_handler = 'gd';
  377. true を返します。
  378. }
  379. 休憩;
  380. }
  381. false を返します。
  382. }
  383. /**画像ディレクトリを作成します
  384. * @param String $path
  385. * @return boolean
  386. */
  387. プライベート関数 create_dirs($dest){
  388. if(!is_dir(dirname($dest))){
  389. return mkdir(dirname($dest), 0777, true) ;
  390. }
  391. true を返します。
  392. }
  393. /**パラメータが存在するかどうかを判断します
  394. * @param Array $obj 配列オブジェクト
  395. * @param String $key 検索するキー
  396. * @return boolean
  397. */
  398. プライベート関数が存在します($obj,$key=''){
  399. if($key==''){
  400. return isset($obj) && !empty( $obj);
  401. }else{
  402. $keys =explode('.',$key);
  403. for($i=0,$max=count($keys); $i if(isset($obj[$keys[$i]])){
  404. $obj = $ obj[$keys[$i]];
  405. }else{
  406. false を返します。
  407. }
  408. }
  409. return isset($obj) && !empty($obj);
  410. }
  411. }
  412. /**ログを記録する
  413. * @param String $msg 記録されるログメッセージ
  414. */
  415. プライベート関数 to_log($msg){
  416. if($this->_log){
  417. $msg = '['.date('Y-m-d H:i :s').']'.$msg."rn";
  418. file_put_contents($this->_log, $msg, FILE_APPEND);
  419. }
  420. }
  421. /**16 進数カラーから RGB カラーへ
  422. * @param String $color 16 進数カラー
  423. * @return 配列
  424. */
  425. プライベート関数 hex2rgb($hexcolor){
  426. $color = str_replace('#', '', $hexcolor);
  427. if (strlen($color) > 3) {
  428. $rgb = array(
  429. 'r' => hexdec(substr($color, 0, 2)),
  430. 'g' => hexdec(substr( $color, 2, 2)),
  431. 'b' => hexdec(substr($color, 4, 2))
  432. );
  433. } else {
  434. $r = substr($color, 0, 1) . substr($color, 0, 1);
  435. $g = substr($color, 1, 1) . substr($color, 1, 1);
  436. $b = substr($color, 2, 1) . substr($color, 2, 1);
  437. $rgb = array(
  438. 'r' => hexdec($r),
  439. 'g' => hexdec($g),
  440. 'b' => hexdec($b)
  441. );
  442. }
  443. $rgb を返します。
  444. }
  445. /**画像タイプを取得
  446. * @param String $file 画像パス
  447. * @return int
  448. */
  449. プライベート関数 get_file_ext($file){
  450. $filename = Basename($file);
  451. list($name, $ext)=explode('.', $filename);
  452. $ext_type = 0;
  453. switch(strto lower($ext)){
  454. case 'jpg':
  455. case 'jpeg':
  456. $ext_type = 2;
  457. 休憩;
  458. ケース 'gif':
  459. $ext_type = 1;
  460. 休憩;
  461. ケース 'png':
  462. $ext_type = 3;
  463. 休憩;
  464. }
  465. $ext_type を返します。
  466. }
  467. } // 授業終了
  468. ?>
  469. デモ:
  470. [php] view plaincopy
  471. define('ROOT', dirname(__FILE__));
  472. require(ROOT."/PicThumb.class.php");
  473. $logfile = ROOT.'/PicThumb.log';
  474. $source1 = ROOT.'/pic/source.jpg';
  475. $dest1 = ROOT.'/pic/1.jpg';
  476. $dest2 = ROOT.'/pic/2.gif';
  477. $dest3 = ROOT.'/pic/3.png';
  478. $source2 = ROOT.'/pic/source_cmyk.jpg';
  479. $dest4 = ROOT.'/pic/4.jpg';
  480. $dest5 = ROOT.'/pic/5.gif';
  481. $dest6 = ROOT.'/pic/6.png';
  482. $watermark = ROOT.'/pic/watermark.png';
  483. // 按比例生成缩略図
  484. $param = array(
  485. 'type' => 'fit',
  486. 'width' => 100,
  487. 'height' => 100,
  488. );
  489. $obj = 新しい PicThumb($logfile);
  490. $obj->set_config($param);
  491. $flag = $obj->create_thumb($source1, $dest1);
  492. if($flag){ // bbs.it-home.org
  493. echo '';
  494. }else{
  495. echo 'サムの作成に失敗しました';
  496. }
  497. // 按比率生成缩略図、部分不足用#FF0000充填
  498. $param = array(
  499. 'type' => 'fit',
  500. 'width' => 100,
  501. 'height' => ; 100、
  502. 'bgcolor' => '#FFFF00'
  503. ;
  504. $obj = 新しい PicThumb($logfile);
  505. $obj->set_config($param);
  506. $flag = $obj->create_thumb($source1, $dest2);
  507. if($flag){
  508. echo '';
  509. }else{
  510. echo 'サムの作成に失敗しました';
  511. }
  512. // 裁剪250x250の缩略図,裁剪位置は底部中间,水印位置西南,透明度50
  513. $param = array(
  514. 'type' => 'crop',
  515. 'croppos' => 'BM '、
  516. '幅' => 250、
  517. 'ウォーターマーク' => 50、
  518. '重力' => );
  519. $obj = 新しい PicThumb($logfile);
  520. $obj->set_config($param);
  521. $flag = $obj->create_thumb($source1, $dest3);
  522. if($flag){
  523. echo '';
  524. }else{
  525. echo 'サムの作成に失敗しました';
  526. }
  527. // 按比例生成缩略図 CMYK格式
  528. $param = array(
  529. 'type' => 'fit',
  530. 'width' => 100,
  531. 'height' => 100,
  532. ) ;
  533. $obj = 新しい PicThumb($logfile);
  534. $obj->set_config($param);
  535. $flag = $obj->create_thumb($source2, $dest4);
  536. if($flag){
  537. echo '';
  538. }else{
  539. echo 'サムの作成に失敗しました';
  540. }

  541. // 比例してサムネイルを生成し、足りない部分を CMYK 形式の #FF0000 で埋めます

  542. $param = array(
  543. 'type' => 'fit',
  544. 'width' => 100、
  545. '高さ' => 100、
  546. 'bgcolor' => '#FFFF00'
  547. );
  548. $obj->set_config($param); $flag = $obj->create_thumb($source2, $dest5);
  549. if($flag){
  550. echo '';
  551. }else{
  552. echo 'サム失敗の作成';
  553. }
  554. // 250x250 のサムネイルをトリミングします。トリミング位置は中央下、透かしの位置は南西、透明度は 50 CMYK 形式です
  555. $param = array(
  556. 'タイプ' => 'クロップ'、
  557. '幅' => 250、
  558. 'ウォーターマーク' =>
  559. '不透明度' =>
  560. '重力' =>
  561. $obj = 新しい PicThumb($logfile);
  562. $flag = $obj->create_thumb ($source2, $dest6);
  563. if($flag){
  564. echo ''; {
  565. echo 'create親指失敗'
  566. }
  567. ?

  568. コードをコピー
  569. >>> PHPサムネイル生成クラスのソースコードのダウンロードアドレス

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート