ホームページ > バックエンド開発 > PHPチュートリアル > PHP で gif 画像のサイズを調整する非常に実践的なクラスです。

PHP で gif 画像のサイズを調整する非常に実践的なクラスです。

WBOY
リリース: 2016-07-25 08:49:17
オリジナル
1256 人が閲覧しました
このクラスは GIF 形式の動的ファイルを調整できます。ダイナミック ピクチャ フレーム ファイルを一時ディレクトリに抽出します。画像のサイズを変更し、アニメーション GIF 形式で新しいファイルに抽出して再構築します。

@sweet Potato では GIF 画像のアップロードが許可されていません
エフェクトを表示: http://www.codepearl.com/files/187.html PHP で gif 画像のサイズを調整する非常に実践的なクラスです。
  1. //http://www.codepearl.com
  2. require_once "gifresizer.php";
  3. $gr = 新しい gifresizer = "codepearl"; gr->resize("codepearl.gif","codepearl_resize.gif",500,500);
  4. ?>
  5. コードをコピーします
  1. /**
  2. * http://www.codepearl.com
  3. * アニメーション GIF ファイルのサイズを変更します
  4. *
  5. * ///重要な注意: スクリプトには、すべてのフレームを抽出する一時ディレクトリが必要です。
  6. * 777 アクセス許可レベルでディレクトリを作成し、そのパスを以下の $temp_dir 変数に書き込みます。
  7. *
  8. * デフォルトのディレクトリは「frames」です。
  9. */
  10. class gifresizer {
  11. public $temp_dir = "frames";
  12. private $pointer = 0;
  13. private $index = 0;
  14. private $globaldata = array();
  15. private $ imagedata = array();
  16. private $imageinfo = array();
  17. private $handle = 0;
  18. private $orgvars = array();
  19. private $encda​​ta = array();
  20. private $parsedfiles = array();
  21. private $originalwidth = 0;
  22. private $originalheight = 0;
  23. private $wr,$hr;
  24. private $props = array();
  25. private $decoding = false;
  26. /**
  27. * クラスのパブリック部分
  28. *
  29. * @orgfile - 元のファイルパス
  30. * @newfile - パス付きの新しいファイル名
  31. * @width - 希望する画像の幅
  32. * @height - 希望する画像の高さ
  33. */
  34. 関数のサイズ変更($orgfile,$newfile,$width,$height){
  35. $this->decode($orgfile);
  36. $this->wr=$width/$this->originalwidth;
  37. $this->gt; hr=$height/$this->originalheight;
  38. $this->resizeframes();
  39. $this->encode($newfile,$width,$height);
  40. $this->clearframes();
  41. }
  42. /**
  43. * GIF デコーダー機能。
  44. * GIF アニメーションを単一のフレームに解析します。
  45. */
  46. プライベート関数 decode($filename){
  47. $this->decoding = true;
  48. $this->clearvariables();
  49. $this->loadfile($filename);
  50. $this->get_gif_header();
  51. $this->get_graphics_extension(0);
  52. $this->get_application_data ();
  53. $this->get_application_data();
  54. $this->get_image_block(0);
  55. $this->get_graphics_extension(1);
  56. $this->get_comment_data();
  57. $this-> ;get_application_data();
  58. $this->get_image_block(1);
  59. while(!$this->checkbyte(0x3b) && !$this->checkEOF()){
  60. $this->get_comment_data(1) );
  61. $this->get_graphics_extension(2);
  62. $this->get_image_block(2);
  63. }
  64. $this->writeframes(time());
  65. $this->closefile();
  66. $this->decoding = false;
  67. }
  68. /**
  69. * GIF エンコーダー機能。
  70. * 解析された GIF フレームを 1 つのアニメーションに結合します。
  71. */
  72. プライベート関数 encode($new_filename,$newwidth,$newheight){
  73. $mystring = "";
  74. $this->pointer = 0;
  75. $this->imagedata = array();
  76. $this->imageinfo = array();
  77. $this->handle = 0;
  78. $ this->index=0;
  79. $k=0;
  80. foreach($this->$imagepart として解析されたファイル){
  81. $this->loadfile($imagepart);
  82. $this->get_gif_header() ;
  83. $this->get_application_data();
  84. $this->get_comment_data();
  85. $this->get_graphics_extension(0);
  86. $this->get_image_block(0);
  87. // 透明色を取得インデックスとカラー
  88. if(isset($this->encda​​ta[$this->encda​​ta[$this->index-1]))
  89. $gxdata = $this->encda​​ta[$this->index-1]["graphicsextension" ];
  90. else
  91. $gxdata = null;
  92. $ghdata = $this->imageinfo["gifheader"];
  93. $trcolor = "";
  94. $hastransparency=($gxdata[3]&&1==1);
  95. if($hastransparency){
  96. $trcx = ord($gxdata[6]);
  97. $trcolor = substr($ghdata,13+$trcx*3,3);
  98. }
  99. //画像データへのグローバル カラー テーブル;
  100. $this->transfercolortable($this->imageinfo["gifheader"],$this->imagedata[$this->index-1]["imagedata "]);
  101. $imageblock = &$this->imagedata[$this->index-1]["imagedata"];
  102. //透明度が存在する場合、透明度インデックスを転送
  103. if($hastransparency){
  104. $haslocalcolortable = ( (ord($imageblock[9])&128)==128);
  105. if($haslocalcolortable){
  106. // ローカル テーブルが存在します。境界を決定し、それを探します。
  107. $tablesize=(pow(2,(ord($imageblock[9])&7)+1)*3)+10;
  108. $this->orgvars[$this->index -1]["transparent_color_index"] =
  109. ((strrpos(substr($this->imagedata[$this->index-1]["imagedata"],0,$tablesize),$trcolor)-10) /3);
  110. }else{
  111. //ローカルテーブルが存在しないので、グローバルテーブルを見てください。
  112. $tablesize=(pow(2,(ord($gxdata[10])&7)+1)*3)+10;
  113. $this ->orgvars[$this->index-1]["transparent_color_index"] =
  114. ((strrpos(substr($ghdata,0,$tablesize),$trcolor)-10)/3);
  115. }
  116. }
  117. //元の遅延時間、透明インデックス、破棄値をグラフィックス拡張機能に適用します
  118. if(!$this->imagedata[$this->index-1]["graphicsextension"]) $this ->画像データ[$this->index-1]["グラフィックセックステンション"] = chr(0x21).chr(0xf9).chr(0x04).chr(0x00).chr(0x00).chr(0x00)。 chr(0x00).chr(0x00);
  119. $imagedata = &$this->imagedata[$this->index-1]["graphicsextension"];
  120. $imagedata[3] = chr((ord ($imagedata[3]) & 0xE3) | ($this->orgvars[$this->index-1]["disposal_method"] $imagedata[4] = chr( ($this->orgvars[$this->index-1]["遅延時間"] % 256));
  121. $imagedata[5] = chr(floor($this->orgvars[$this->インデックス-1]["遅延時間"] / 256));
  122. if($hastransparency){
  123. $imagedata[6] = chr($this->orgvars[$this->index-1]["transparent_color_index" ]);
  124. }
  125. $imagedata[3] = chr(ord($imagedata[3])|$hastransparency);
  126. //計算された左と上のオフセットを適用します
  127. $imageblock[1] = chr(round(($ this->orgvars[$this->index-1]["offset_left"]*$this->wr) % 256));
  128. $imageblock[2] = chr(floor(($this->gt; orgvars[$this->index-1]["offset_left"]*$this->wr) / 256));
  129. $imageblock[3] = chr(round(($this->orgvars[$this ->index-1]["offset_top"]*$this->hr) % 256));
  130. $imageblock[4] = chr(floor(($this->orgvars[$this->index -1]["offset_top"]*$this->hr) / 256));
  131. if($this->index==1){
  132. if(!isset($this->imageinfo["applicationdata"]) || !$this->imageinfo["applicationdata"])
  133. $ this->imageinfo["applicationdata"]=chr(0x21).chr(0xff).chr(0x0b)."NETSCAPE2.0".chr(0x03).chr(0x01).chr(0x00).chr(0x00 ).chr(0x00);
  134. if(!isset($this->imageinfo["commentdata"]) || !$this->imageinfo["commentdata"])
  135. $this->imageinfo["commentdata" "] = chr(0x21).chr(0xfe).chr(0x10)."PHPGIFRESIZER1.0".chr(0);
  136. $mystring .= $this->orgvars["gifheader"]。 $this->imageinfo["applicationdata"].$this->imageinfo["commentdata"];
  137. if(isset($this->orgvars["hasgx_type_0"]) && $this->orgvars[" hasgx_type_0"]) $mystring .= $this->globaldata["graphicsextension_0"];
  138. if(isset($this->orgvars["hasgx_type_1"]) && $this->orgvars["hasgx_type_1"]) $mystring .= $this->globaldata["graphicsextension"];
  139. }
  140. $mystring .= $imagedata . $imageblock;
  141. $k++;
  142. $this->closefile();
  143. }
  144. $mystring .= chr(0x3b);
  145. //新しい幅と高さを gif ヘッダーに適用します
  146. $mystring[6] = chr($newwidth % 256);
  147. $mystring[7] = chr(floor($newwidth / 256));
  148. $mystring[8 ] = chr($newheight % 256);
  149. $mystring[9] = chr(floor($newheight / 256));
  150. $mystring[11]= $this->orgvars["background_color"];
  151. // if(file_exists($new_filename)){unlink($new_filename);}
  152. file_put_contents($new_filename,$mystring);
  153. }
  154. /**
  155. * 変数リセット機能
  156. * インスタンスを複数回使用する場合に必要です。信じてください
  157. */
  158. プライベート関数 clearvariables(){
  159. $this-> ;pointer = 0;
  160. $this->index = 0;
  161. $this->imagedata = array();
  162. $this->imageinfo = array();
  163. $this->handle = 0;
  164. $this->parsedfiles = array();
  165. }
  166. /**
  167. * クリアフレーム機能
  168. * エンコード後のフレームを削除します。*/
  169. プライベート関数 clearframes(){
  170. foreach($this->parsedfiles as $temp_frame){
  171. unlink($temp_frame);
  172. }
  173. }
  174. /**
  175. * フレームライター
  176. * GIF フレームをファイルに書き込みます。
  177. */
  178. プライベート関数 writeframes($prepend){
  179. for($i=0;$iimagedata);$i++){
  180. file_put_contents($this->temp_dir."/frame_".$prepend."_".str_pad($i,2,"0",STR_PAD_LEFT).".gif" ,$this->imageinfo["gifheader"].$this->imagedata[$i]["graphicsextension"].$this->imagedata[$i]["imagedata"].chr(0x3b)) ;
  181. $this->parsedfiles[]=$this->temp_dir."/frame_".$prepend."_".str_pad($i,2,"0",STR_PAD_LEFT).".gif";
  182. }
  183. }
  184. /**
  185. * カラーパレット転送デバイス
  186. * アニメーションでグローバル カラー テーブル (GCT) をフレームからローカル カラー テーブルに転送します。
  187. */
  188. private function transfercolortable($src,&$dst){
  189. //src は gif ヘッダー、dst は画像データ ブロックです
  190. // グローバル カラー テーブルが存在する場合、それを転送します
  191. if((ord($src[10])&128)==128){
  192. //Gif ヘッダーのグローバル カラー テーブルの長さ
  193. $ghctl = pow(2,$this->readbits(ord($src[10]) ),5,3)+1)*3;
  194. //GIF ヘッダーからグローバル カラー テーブルを切り取る
  195. $ghgct = substr($src,13,$ghctl);
  196. //画像ブロックのカラー テーブルの長さを確認する
  197. if(( ord($dst[9])&128)==128){
  198. //画像データにはカラーテーブルが含まれています。 Skip.
  199. }else{
  200. //画像データにはカラー テーブルが必要です。
  201. //ダミーのカラー テーブルを切り詰めるため、最後のカラー テーブルの長さを取得します
  202. $idctl = pow(2,$this->readbits(ord($ dst[9]),5,3)+1)*3;
  203. //カラーテーブルのフラグと長さを設定します
  204. $dst[9] = chr(ord($dst[9]) | (0x80 | (log($ ghctl/3,2)-1)));
  205. //カラーテーブルを挿入
  206. $dst = substr($dst,0,10).$ghgct.substr($dst,-1*strlen($dst)+10 );
  207. }
  208. }else{
  209. //グローバル カラー テーブルが存在しません。 Skip.
  210. }
  211. }
  212. /**
  213. * GIF パーサー関数。
  214. * 以下の関数は、主要な構造パーサー コンポーネントです。
  215. */
  216. プライベート関数 get_gif_header(){
  217. $this->p_forward(10);
  218. if($this->readbits(($mybyte=$this) ->readbyte_int()),0,1)==1){
  219. $this->p_forward(2);
  220. $this->p_forward(pow(2,$this->readbits($mybyte, 5,3)+1)*3);
  221. }else{
  222. $this->p_forward(2);
  223. }
  224. $this->imageinfo["gifheader"]=$this->datapart(0) ,$this->pointer);
  225. if($this->decoding){
  226. $this->orgvars["gifheader"]=$this->imageinfo["gifheader"];
  227. $this-> ;originalwidth = ord($this->orgvars["gifheader"][7])*256+ord($this->orgvars["gifheader"][6]);
  228. $this->originalheight = ord ($this->orgvars["gifheader"][9])*256+ord($this->orgvars["gifheader"][8]);
  229. $this->orgvars["background_color"]= $this->orgvars["gifheader"][11];
  230. }
  231. }
  232. //----------------------------------------------- --------
  233. プライベート関数 get_application_data(){
  234. $startdata = $this->readbyte(2);
  235. if($startdata==chr(0x21).chr(0xff)){
  236. $start = $this->pointer - 2;
  237. $this->p_forward($this->readbyte_int());
  238. $this->read_data_stream($this->readbyte_int());
  239. $this- >imageinfo["applicationdata"] = $this->datapart($start,$this->pointer-$start);
  240. }else{
  241. $this->p_rewind(2);
  242. }
  243. }
  244. //------------------------------------------------ -------
  245. プライベート関数 get_comment_data(){
  246. $startdata = $this->readbyte(2);
  247. if($startdata==chr(0x21).chr(0xfe)){
  248. $start = $this->pointer - 2;
  249. $this->read_data_stream($this->readbyte_int());
  250. $this->imageinfo["commentdata"] = $this->datapart($start, $this->pointer-$start);
  251. }else{
  252. $this->p_rewind(2);
  253. }
  254. }
  255. //----------------- --------------------------------------
  256. プライベート関数 get_graphics_extension($type){
  257. $startdata = $this->readbyte(2);
  258. if($startdata==chr(0x21).chr(0xf9)){
  259. $start = $this->pointer - 2;
  260. $this->p_forward( $this->readbyte_int());
  261. $this->p_forward(1);
  262. if($type==2){
  263. $this->imagedata[$this->index]["graphicstension" ] = $this->datapart($start,$this->pointer-$start);
  264. }else if($type==1){
  265. $this->orgvars["hasgx_type_1"] = 1;
  266. $this->globaldata["graphicsextension"] = $this->datapart($start,$this->pointer-$start);
  267. }else if($type==0 && $this->gt; decoding==false){
  268. $this->encda​​ta[$this->index]["graphicsextension"] = $this->datapart($start,$this->pointer-$start);
  269. } else if($type==0 && $this->decoding==true){
  270. $this->orgvars["hasgx_type_0"] = 1;
  271. $this->globaldata["graphicsextension_0"] = $this ->datapart($start,$this->pointer-$start);
  272. }
  273. }else{
  274. $this->p_rewind(2);
  275. }
  276. }
  277. //------ ------------------------------------------------
  278. プライベートfunction get_image_block($type){
  279. if($this->checkbyte(0x2c)){
  280. $start = $this->pointer;
  281. $this->p_forward(9);
  282. if($this-> ;readbits(($mybyte=$this->readbyte_int()),0,1)==1){
  283. $this->p_forward(pow(2,$this->readbits($mybyte,5, 3)+1)*3);
  284. }
  285. $this->p_forward(1);
  286. $this->read_data_stream($this->readbyte_int());
  287. $this->imagedata[$this ->index]["imagedata"] = $this->datapart($start,$this->pointer-$start);
  288. if($type==0){
  289. $this->orgvars ["hasgx_type_0"] = 0;
  290. if(isset($this->globaldata["graphicsextension_0"]))
  291. $this->imagedata[$this->index]["graphicsextension"]=$this- >globaldata["graphicsextension_0"];
  292. else
  293. $this->imagedata[$this->index]["graphicsextension"]=null;
  294. unset($this->globaldata["graphicsextension_0"]);
  295. }elseif($type==1){
  296. if(isset($this->orgvars["hasgx_type_1"]) && $this->orgvars["hasgx_type_1"]==1){
  297. $this-> ;orgvars["hasgx_type_1"] = 0;
  298. $this->imagedata[$this->index]["graphicsextension"]=$this->globaldata["graphicsextension"];
  299. unset($this-> ;globaldata["graphicsextension"]);
  300. }else{
  301. $this->orgvars["hasgx_type_0"] = 0;
  302. $this->imagedata[$this->index]["graphicsextension"]=$this->globaldata["graphicsextension_0"];
  303. unset($this->globaldata["graphicsextension_0"]);
  304. }
  305. }
  306. $this->parse_image_data();
  307. $this->index++;
  308. }
  309. }
  310. //--- -------------------------------------------------- --
  311. プライベート関数 parse_image_data(){
  312. $this->imagedata[$this->index]["disposal_method"] = $this->get_imagedata_bit("ext",3,3,3);
  313. $ this->imagedata[$this->index]["user_input_flag"] = $this->get_imagedata_bit("ext",3,6,1);
  314. $this->imagedata[$this->gt; [index]["transparent_color_flag"] = $this->get_imagedata_bit("ext",3,7,1);
  315. $this->gt;imagedata[$this->index]["delay_time"] = $this- >dualbyteval($this->get_imagedata_byte("ext",4,2));
  316. $this->imagedata[$this->index]["transparent_color_index"] = ord($this->get_imagedata_byte ("ext",6,1));
  317. $this->imagedata[$this->index]["offset_left"] = $this->dualbyteval($this->get_imagedata_byte("dat", 1,2));
  318. $this->imagedata[$this->index]["offset_top"] = $this->dualbyteval($this->get_imagedata_byte("dat",3,2)) ;
  319. $this->imagedata[$this->index]["width"] = $this->dualbyteval($this->get_imagedata_byte("dat",5,2));
  320. $this- >imagedata[$this->index]["height"] = $this->dualbyteval($this->get_imagedata_byte("dat",7,2));
  321. $this->imagedata[$ this->index]["local_color_table_flag"] = $this->get_imagedata_bit("dat",9,0,1);
  322. $this->imagedata[$this->index]["interlace_flag"] = $this->get_imagedata_bit("dat",9,1,1);
  323. $this->gt;imagedata[$this->index]["sort_flag"] = $this->get_imagedata_bit("dat" ,9,2,1);
  324. $this->imagedata[$this->index]["color_table_size"] = pow(2,$this->get_imagedata_bit("dat",9,5,3) +1)*3;
  325. $this->imagedata[$this->index]["color_table"] = substr($this->imagedata[$this->index]["imagedata"],10 ,$this->imagedata[$this->index]["color_table_size"]);
  326. $this->imagedata[$this->index]["lzw_code_size"] = ord($this->gt; get_imagedata_byte("dat",10,1));
  327. if($this->decoding){
  328. $this->orgvars[$this->index]["transparent_color_flag"] = $this->imagedata [$this->index]["transparent_color_flag"];
  329. $this->orgvars[$this->index]["transparent_color_index"] = $this->imagedata[$this->index][ "transparent_color_index"];
  330. $this->orgvars[$this->index]["delay_time"] = $this->imagedata[$this->index]["delay_time"];
  331. $this- >orgvars[$this->index]["disposal_method"] = $this->imagedata[$this->index]["disposal_method"];
  332. $this->orgvars[$this-> Index]["offset_left"] = $this->imagedata[$this->index]["offset_left"];
  333. $this->orgvars[$this->index]["offset_top"] = $ this->imagedata[$this->index]["offset_top"];
  334. }
  335. }
  336. //------------------------ ------------------------
  337. プライベート関数 get_imagedata_byte($type,$start,$length){
  338. if($ type=="ext")
  339. return substr($this->imagedata[$this->index]["graphicsextension"],$start,$length);
  340. elseif($type=="dat")
  341. return substr($this->imagedata[$this->index]["imagedata"],$start,$length);
  342. }
  343. //----------------------------------------------- --------
  344. プライベート関数 get_imagedata_bit($type,$byteindex,$bitstart,$bitlength){
  345. if($type=="ext")
  346. return $this->readbits(ord(substr( $this->imagedata[$this->index]["graphicsextension"],$byteindex,1)),$bitstart,$bitlength);
  347. elseif($type=="dat")
  348. return $this- >readbits(ord(substr($this->imagedata[$this->index]["imagedata"],$byteindex,1)),$bitstart,$bitlength);
  349. }
  350. //--- -------------------------------------------------- --
  351. プライベート関数dualbyteval($s){
  352. $i = ord($s[1])*256 + ord($s[0]);
  353. return $i;
  354. }
  355. //----- ------- ヘルパー関数 ----------
  356. プライベート関数 read_data_stream($first_length){
  357. $this->p_forward($first_length) ;
  358. $length=$this->readbyte_int();
  359. if($length!=0) {
  360. while($length!=0){
  361. $this->p_forward($length);
  362. $length= $this->readbyte_int();
  363. }
  364. }
  365. return true;
  366. }
  367. //---------------------------- -------------------------
  368. プライベート関数loadfile($filename){
  369. $this->handle = fopen($filename," rb");
  370. $this->pointer = 0;
  371. }
  372. //---------------------------- ------------------------
  373. プライベート関数 closefile(){
  374. fclose($this->handle);
  375. $this->handle= 0;
  376. }
  377. //------------------------------------------ ------------
  378. プライベート関数 readbyte($byte_count){
  379. $data = fread($this->handle,$byte_count);
  380. $this->pointer += $byte_count;
  381. return $data;
  382. }
  383. //---------------------------------------- ---------------
  384. プライベート関数 readbyte_int(){
  385. $data = fread($this->handle,1);
  386. $this->pointer++;
  387. return ord( $data);
  388. }
  389. //----------------------------------------------------- --------------
  390. プライベート関数 readbits($byte,$start,$length){
  391. $bin = str_pad(decbin($byte),8,"0",STR_PAD_LEFT);
  392. $data = substr($bin,$start,$length);
  393. return binding($data);
  394. }
  395. //--------------------- ----------------------------------
  396. プライベート関数 p_rewind($length){
  397. $this->pointer -=$length;
  398. fseek($this->ハンドル,$this->ポインタ);
  399. }
  400. //---------------------- ---------------------------------
  401. プライベート関数 p_forward($length){
  402. $this->pointer+= $length;
  403. fseek($this->ハンドル,$this->ポインタ);
  404. }
  405. //------------------------ ------------------------
  406. プライベート関数 datapart($start,$length){
  407. fseek($this-> ;handle,$start);
  408. $data = fread($this->handle,$length);
  409. fseek($this->handle,$this->pointer);
  410. return $data;
  411. }
  412. //------------------------------------------------ -------
  413. プライベート関数 checkbyte($byte){
  414. if(fgetc($this->handle)==chr($byte)){
  415. fseek($this->handle,$this- >pointer);
  416. return true;
  417. }else{
  418. fseek($this->handle,$this->pointer);
  419. return false;
  420. }
  421. }
  422. //-------- -----------------------------------------------
  423. プライベート機能checkEOF(){
  424. if(fgetc($this->handle)===false){
  425. return true;
  426. }else{
  427. fseek($this->handle,$this->pointer);
  428. return false;
  429. }
  430. }
  431. //----------------------------------------------------- --------------
  432. /**
  433. * デバッグ機能。
  434. * GIF アニメーションを単一のフレームに解析します。
  435. */
  436. プライベート関数 debug($string){
  437. echo "
    ";<li> for($i=0;$ i<strlen($string);$i++){<li> echo str_pad(dechex(ord($string[$i])),2,"0",STR_PAD_LEFT)。 " ";<li> }<li> echo "
    ";
  438. }
  439. //----------------------------------------------- --------
  440. プライベート関数 debuglen($var,$len){
  441. echo "
    ";<li> for($i=0;$i<$len;$i++){<li> echo str_pad (dechex(ord($var[$i])),2,"0",STR_PAD_LEFT)。 " ";<li> }<li> echo "
    ";
  442. }
  443. //---------------------------- -------------------------
  444. プライベート関数 debugstream($length){
  445. $this->debug($this->datapart($ this->pointer,$length));
  446. }
  447. //-------------------------------------- ----------
  448. /**
  449. * GD Resizer Device
  450. * アニメーションフレームのサイズを変更します
  451. */
  452. プライベート関数resizeframes(){
  453. $k=0;
  454. foreach($this-> ;$img として解析されたファイル){
  455. $src = imagecreatefromgif($img);
  456. $sw = $this->gt;imagedata[$k]["width"];
  457. $sh = $this->imagedata[$k ]["高さ"];
  458. $nw =round($sw * $this->wr);
  459. $nh =round($sh * $this->hr);
  460. $sprite = imagecreatetruecolor($nw, $nh);
  461. $trans = imagecolortransparent($sprite);
  462. imagealphablending($sprite, false);
  463. imageavealpha($sprite, true);
  464. imagepalettecopy($sprite,$src);
  465. imagefill($sprite,0,0,imagecolortransparent($src));
  466. imagecolortransparent($sprite,imagecolortransparent($src));
  467. imagecopyresize($sprite,$src,0,0,0,0,$nw,$nh,$sw,$sh);
  468. imagegif($sprite,$img);
  469. imagedestroy($sprite);
  470. imagedestroy($src);
  471. $k++;
  472. }
  473. }
  474. }
  475. ?>
复制發


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