• 締切済み

アップロードしたGIF画像を縮小

画像をアップロードした際にリサイズするプログラムを作っています。 jpegとgif形式アップロードを考えています。jpegのアップロードは うまく作動しますが、gifをアップロードしても画像はサーバにアップできるのですが、縮小処理がされていません。 その際に表示されるエラーは以下です。 Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /***/***/***/***/***/uploader.php on line 82 Warning: imagegif(): supplied argument is not a valid Image resource in /***/***/***/***/***/uploader.php on line 83 ■ソースは以下です。 フォーム部分 <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES); ?>" method="post" enctype="multipart/form-data"> <table class="main1 table001" align="center" cellpadding="5" cellspacing="0"> <tr> <th nowrap>画像ファイル1<br>(gif,jpgのみ)</th> <td nowrap><input type="file" name="gra1" size="50"></td> </tr> <tr> <td colspan="2"><input type="submit" name="confirm" value="  確認画面へ  " />&nbsp;&nbsp;<input type="submit" name="reset" value="リセット" /></td> </tr> </table> </form> 縮小処理部分 //写真ファイルのアップロード処理 if(strlen($gra1) > 0 ) { //アップロードされたテンポラリファイルの情報を取得します $fileinfo = pathinfo($gra1); //debug($fileinfo); $fileext = strtoupper($fileinfo[extension]); if ($gra1_size > $MAX_FILESIZE || $gra1_size == 0) { //アップロードファイルのサイズ上限をチェックします $error=1; $error_mes .= "画像1のサイズが大きすぎます。".$FILESIZE_COM."以下にしてください。<br />"; }elseif ($fileext != "JPG" && $fileext != "GIF") { //アップロードファイルの拡張子をチェックします $error=1; $error_mes .= "JPG、GIF形式以外の写真ファイルは登録できません。<br />"; }else { $mictime = microtime(); if($fileext=="JPG"){$imagefile1 = substr($mictime, 11) . substr($mictime, 2, 6) . ".jpg";}else if($fileext=="GIF"){$imagefile1 = substr($mictime, 11) . substr($mictime, 2, 6) . ".gif";} //テンポラリファイルを一時フォルダに名前を変えて移動します if (move_uploaded_file($_FILES['gra1']['tmp_name'], "$H_PHOTOTMP$imagefile1")) { //画像縮小処理 $sfn1="$H_PHOTOTMP$imagefile1"; //読み込みファイル名 $dfn1="$H_PHOTOTMP$imagefile1"; //書き出しファイル名 list($lw1,$lh1,$type1,$attr1) = getimagesize($sfn1); //画像情報取得 if($type1==2){ //JPGならば処理 $sw1=$lw1*0.1; //サイズは縦横10%に $sh1=$lh1*0.1; $im_in1 = @imagecreatefromjpeg($sfn1); //元画像の読み込み $im_out1 = @imagecreatetruecolor($sw1,$sh1); //縮小画像の作成 imagecopyresampled($im_out1,$im_in1,0,0,0,0,$sw1,$sh1,$lw1,$lh1); //縮小コピー imagejpeg($im_out1,$dfn1); //ディスクに出力 //debug($dfn); }else if($type1==1){ //GIFならば処理 $sw1=$lw*0.1;//$lw1*0.1; //サイズは縦横10%に $sh1=$lw*0.1;//$lh1*0.1; $im_in1 = @imagecreatefromgif($sfn1); //元画像の読み込み $im_out1 = @imagecreatetruecolor($sw1,$sh1); //縮小画像の作成 imagecopyresampled($im_out1,$im_in1,0,0,0,0,$sw1,$sh1,$lw1,$lh1); //縮小コピー imagegif($im_out1,$dfn1); //ディスクに出力 //debug($dfn); } //画像縮小処理ここまで }else{ $error=1; $error_mes .= "写真ファイル1のアップロードに失敗しました。<br />"; } } } になります。 ご教授のほど宜しくお願い致します。

みんなの回答

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.4

以下の部分の$lwという変数は突然でてきているのですが、どこかで定義されているのでしょうか。 $sw1=$lw*0.1;//$lw1*0.1; //サイズは縦横10%に $sh1=$lw*0.1;//$lh1*0.1; でなければ$sw1、$sh1は0となり以降のimagecreatetruecolorに失敗しているはずです。 imagecreatetruecolorの@を外して確認してみてください。

raoh199907
質問者

お礼

ご指摘ありがとうございます。 こっちの確認ミスでした。 $sw1=$lw*0.1;//$lw1*0.1; //サイズは縦横10%に $sh1=$lw*0.1;//$lh1*0.1; 変数の入力ミスです $lw→$lw1 修正したらちゃんと動きました。 ありがとうございます。

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.3

警告メッセージ通りで、設定しているパラメータがおかしいです。 良く確認しましょう。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

お使いのPHPでGIFはサポートされていますか phpinfo( )で確認してみてはどうでしょう

raoh199907
質問者

補足

確認はしましたが サポートされています

回答No.1

>supplied argument is not a valid Image resource ということで、imagecreatefromgifが正常にGIF画像を生成できてないのではないでしょうか。 imagecreatefromgif関数の前に「@(エラー制御子)」が付加されているので、これをはずした場合に、何らかのエラーは出てきませんか? また、一度アップロードするGIF画像も別のものに変更してから行ってみてはどうでしょう。

raoh199907
質問者

補足

ちなみに画像を変えてみても結果は同じです。 imagecreatefromgif関数の前の「@(エラー制御子)」をはずした場合も 同じエラー表示になりました。 これ以上無理なのでしょうか?