• ベストアンサー

リサイズした後の画像の表示ができません

お世話になっています。 登録画面でアップロードした画像を確認画面でサイズを小さくしてから Mysqlに保存するようなものを作っています。 アップロードした画像を縮小せずそのままなら表示、登録することはできましたが、 縮小したあとの画像が確認画面で表示できません。 画像の名前を変更し、フォルダに移動しています。 $smlwidth = 200; $smlheight = 150; $smlphotofile =""; $imagefile = substr($mictime, 11) . substr($mictime,2,6) . ".jpg"; $infimgfile = getimagesize($uploadfile); $srcimgfile = imagecreatefromjpeg($uploadfile); $newimgfile = imagecreatetruecolor($smlwidth, $smlheight); imagecopyresampled($newimgfile, $srcimgfile,0, 0, 0, 0, $smlwidth, $smlheight,$infimgfile[0], $infimgfile[1]); if (!move_uploaded_file($newimgfile, "$PHOTOTMP$imagefile")) { $errmsg .= "写真ファイルのアップロードに失敗しました。<BR>";} 省略 print"<IMG src='$PHOTOTMP$imagefile' >"; 確認画面では「×」となっています。画像のプロパティを見ると、 フォルダへの移動はうまくいっているようなのですが、 種類やサイズが使用不可となっています。 どなたかご教授いただけませんでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

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

$newimgfileはメモリ上に構築されたGDイメージ(のリソースID)なのでファイルではありません。 imagejpeg($newimgfile, $PHOTOTMP.$imagefile);でファイルに書き出す必要があります。

99Micchi
質問者

お礼

php504さん、ご回答ありがとうございました。 >imagejpeg($newimgfile, $PHOTOTMP.$imagefile); を追加したところ表示できました! ファイルに書き出すの意味もわかりました。 本当にありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

タイミングの問題だと思います。 $newimgfile = imagecreatetruecolor($smlwidth, $smlheight); の中でファイルに書き込んだとしても実際には即座に書き込みが 完了するわけではないですよね。そのためにsyncコマンドやPHPにも flush関数があるわけです。書き込みよりも早くprintがなされて いるのではないかと思います。

99Micchi
質問者

お礼

angbandさん、ご回答ありがとうございました。 syncコマンドというのは初めて聞いたので調べてみます。 >実際には即座に書き込みが完了するわけではないですよね。 というのはわかっていませんでした・・・ きちんと理解しなければ!と思いました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 初心者ですみません。画像ファイルのアップロードについて

    任意の画像ファイルをHTMLフォームで入力して 登録確認画面に渡した後、ファイルをアップロード したいのですが上手くいきません。 ・フォーム入力ページ <FORM action="登録確認ページ.php" method="POST" enctype="multipart/form-data"> <INPUT type="file" name="uploadfile" size="50"> <INPUT type="submit" name="reg" value="OK"> ↓ ・登録確認ページ $uploadfile = $_FILES['uploadfile']; move_uploaded_file($uploadfile, "$PHOTOTMP$imagefile"); $body .= "<IMG src='$PHOTOTMP$imagefile' width='240' height='180'>"; として、登録確認ページでアップロードする 画像ファイルをいったん表示させてから 最終的にアップロードさせたいのですが 「×」マークが出て画像が表示されません。 データの受け渡しが上手くできていないのでしょうか。 どなたか教えて下さい。よろしくお願いします。

    • ベストアンサー
    • PHP
  • アップロードした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 />"; } } } になります。 ご教授のほど宜しくお願い致します。

    • 締切済み
    • PHP
  • アップロードしたファイルの移動→表示

    ホームページ上でフォームからアップロードしたファイルを imageディレクトリ下に移動させて、 そのファイルを確認用にブラウザに表示させたいのですが 下記のプログラムではファイルの移動ができていないようで、 表示されず困っています。 $uploadfile = $_FILES['uploadfile']; move_uploaded_file($uploadfile, "image/$imagefile"); $body = "<IMG src='image/$imagefile' width='240' height='180'>"; 皆様どうかご指導お願いします。

    • ベストアンサー
    • PHP
  • PHPで複数の画像を同時にアップロードする方法

    OS = WINXP Pro SP2、Server = An Httpd、PHP = PHP5の環境にてDevelopmentしております。 質問です。PHPで複数の画像を同時にアップロードする方法が知りたいです。現在、jpg,png,bmp,gifを アップロード可能にしているのですが、同時に5つまで10MB以内でUploadできるようにしたいのですが、 if(strlen($uploadfile) > 0 ) { $fileinfo = pathinfo($uploadfile_name); $fileext = strtoupper($fileinfo["extension"]); if ($uploadfile_size > 10002400) { $errmsg .= "<font color='#555555'>画像ファイルのサイズが大きすぎます。3MB以下にしてください。<BR>"; } elseif ($uploadfile_size == 0) { $errmsg .= "<font color='#555555'>画像ファイルが存在しないか空のファイルです。</font><BR>"; } if (($fileext=='JPG')||($fileext=='GIF')||($fileext=='BMP')||($fileext=='PNG')){ if ($fileext == "JPG") { $mictime = microtime(); $imgfilename = substr($mictime, 11) . substr($mictime, 2, 6) . ".jpg"; chmod($uploadfile,0755); if (!move_uploaded_file($uploadfile, "upload/$imgfilename")) { $errmsg .= "<font color='#555555'>ファイルのアップロードに失敗しました。</font><BR>"; } } ... この様な感じで現在はやっていますが、これのどの様に変更すれば同時にアップロードできるようになるのでしょうか。どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 画像のリサイズの仕方について

    <? class Resize { function resize_exec($in, $out, $x, $y){ $img_in = imagecreatefromjpeg($in); $ix = imagesx($img_in); $iy = imagesy($img_in); $img_out = imagecreatetruecolor($ix, $iy); ImageCopyResampled($img_out, $img_in, 0, 0, 0, 0, $x, $y, $ix, $iy); $quality = 100;//画質クオリティ(標準値 75) imagejpeg($img_out, $out, $quality); imagedestroy($img_in); imagedestroy($img_out); } } ?> というクラスを作成して コンストラクタ内でnewして $this->resize->resize_exec($upfile, $sendpath, 50, 30); としたのですが、リサイズできません。 どこか悪いでしょうか? 対象画像はとりあえずjpegでいいかなと考えています。

    • ベストアンサー
    • PHP
  • PHP GD 画像リサイズ

    PHP+GDで携帯サイト用の画像リサイズ処理させるプログラムを書籍のサンプルプログラムを元に作成していますが画像が表示されません。 GD:ver2.17 $image_data = @imagecreatefromjpeg($image_file); $output_image_data = @imagecreatetruecolor($output_image_x, $output_image_y); @imagecopyresampled($output_image_data, $image_data, 0, 0, 0, 0, $output_image_x, $output_image_y, $image_x, $image_y); header('Content-Type: image/jpeg'); @imagejpeg($output_image_data); @imagedestroy($image_data); @imagedestroy($output_image_data); 動作確認は携帯とPC両方でやってますが、携帯だと画像表示されず×が表示され、PCだと文字化けした文字が出力されます。 PCで所々デバック文を表示させたりして確認したところimagecopyresampled関数ではTRUEが返ってきておりましたが、imagejpeg関数以降のデバック文が表示しませんでした。 初心者なのでうまく説明できなくてすいません。 お手数ではございますがご教授お願いします。

    • ベストアンサー
    • PHP
  • phpで画像のリサイズ表示

    質問お願い致します。 phpで画像のリサイズをして表示させたいと思っています。 色々調べた結果下記のサンプルコードを入れてみました。 <?php header("Content-Type:image/jpeg"); $imgpath = "http://*****************.jpg"; $im_info = getimagesize($imgpath); $src_im = ImageCreateFromJPEG($imgpath); $dst_im = imagecreate($im_info[0]/2,$im_info[1]/2); imagecopyresampled($dst_im,$src_im,0,0,0,0,$im_info[0]/2,$im_info[1]/2,$im_info[0],$im_info[1]); imagejpeg($dst_im); ?> しかし「画像ファイル "http://*****************.php" は壊れているため、表示できませんでした。」となってしまいました。 色々試した結果、下記の記述だけでも「画像ファイル "http://*****************.php" は壊れているため、表示できませんでした。」と表示されてしまいました。 <?php header("Content-Type:image/jpeg"); ?> 「header("Content-Type:image/jpeg");」を使用する際にはphp.iniの書き換えをするのかと調べてみたのですが、結局原因はわかりませんでした。 サーバーはさくら(スタンダードコース)です。 PHPは「PHP 5.2.17」になります。 どなたかお知恵を貸して頂けないでしょうか。 宜しくお願い致します。

    • 締切済み
    • PHP
  • DBに格納された画像データを縮小して表示したい

    PHP5+MySQL5です。 DB内のBLOBカラムに、Base64エンコードされた画像データが格納されています。 これを、サムネイル用に縮小して表示したいのですが、widthとheightで見た目だけを小さくするのではなく、ファイルサイズも小さくしてブラウザに渡したいと考えています。 (小さくした画像は保存しません) そこで、DBから取得した画像データを「imagecopyresampled」で再サンプリングしつつ小さくしたいと思いましたが、画面には何も表示されませんでした。 以下、ソースを簡潔に記載します。 $db_img = "DBから画像データを取得"; //600x600の画像 //Base64デコード $old_img = base64_decode($db_img); //200x200のサムネイル画像を作成 $new_img = imagecreatetruecolor(200,200); //再サンプリング・縮小(600x600→200x200) $thumbnail = imagecopyresampled($new_img, $old_img, 0, 0, 0, 0, 200, 200, 600, 600); //画面出力 print $thumbnail; この場合、どのように処理すればいいのか教えていただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • DBに格納された画像データを縮小して表示したい

    PHP5+MySQL5です。 DB内のBLOBカラムに、Base64エンコードされた画像データが格納されています。 これを、サムネイル用に縮小して表示したいのですが、widthとheightで小さくするのではなく、ファイルサイズも小さくしてブラウザに渡したいと考えています。 (小さくした画像は保存しません) そこで、DBから取得した画像データを「imagecopyresampled」で再サンプリングしつつ小さくしたいと思いましたが、画面には何も表示されませんでした。 以下、ソースを簡潔に記載します。 $db_img = "DBから画像データを取得"; //600x600の画像 $old_img = base64_decode($db_img); $new_img = imagecreatetruecolor(200,200); //200x200のサムネイル画像を作成 $thumbnail = imagecopyresampled($new_img,$db_img,0,0,0,0,200,200,600,600); print $thumbnail; $old_imgの処理が間違っているのだろうと思うのですが、どのように処理すればいいのかわかりませんでした。 この場合、どのように処理すればいいのか教えていただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • 画像の縮小が遅いです 外部プログラムを使うことはできますか?

    phpで画像の縮小をしています。 imagecopyresampled関数でやっているのですが ファイルサイズが大きいと時間がやたらかかってしまいます。 画像をFormよりアップロードし、その後縮小という作業をしているのですが、 画像の縮小だけ、C言語などのほかのプログラムにさせようかとおもっています。 C言語を1から書くのは大変なので、そのような既製品(フリーウェアで)あるとおもうのですが、なんというソフトで行えばいいかわかりません。 unix上で画像の縮小をするプログラム があればおしえてください。 おねがいします。

    • ベストアンサー
    • PHP