• ベストアンサー

imagejpegで表示されない。

◆環境◆ PHP Version 5.1.6 apache : 2.x GD Support: enabled GD Version: bundled (2.0.28 compatible) FreeType Support : enabled FreeType Linkage : with TTF library FreeType Version : 1.4 GIF Read Support : enabled GIF Create Support : enabled JPG Support : enabled PNG Support : enabled WBMP Support : enabled XBM Support : enabled ◆質問◆ 既にアップロードされた画像をサムネイルして、表示したいのですが、 バイナリ表示までは出来たのですが、画像が表示できません。 ※$imgにはhttp://www.xxxx.com/image/abcといったファイル名までの絶対パスを取得した文字列が入ります。 <?php $new_img = $img."_thumb.jpg"; $old_img = $img.".jpg"; if(is_dir($img)){ unlink($new_img); }else{ mkdir($img); } list($old_width, $old_height, $old_type, $old_attr) = getimagesize($old_img); //縮小のサイズ $thumbwidth=93; $thumbheight=30; //画像の縮小 $src_im = imagecreatefromjpeg($old_img);//元の画像 $dst_im = imagecreatetruecolor($thumbwidth, $thumbheight);//縮小画像 imagecopyresampled($dst_im,$src_im,0,0,0,0,$thumbwidth,$thumbheight,$old_width,$old_height); imagejpeg($dst_im,$new_img); ?> 一番最後の imagejpeg($dst_im,$new_img); を imagejpeg($dst_im); にするとバイナリが表示されるのですが、 imagejpeg($dst_im,$new_img); にすると何も表示されなくなってしまいます。。 $new_imgのURLにアクセスしても画像が生成されていないようです。 header('Content-type: image/jpeg');を追記すれば良いのか!とも思ったのですが、 追記後にページを見るとサイトのURLが表示されるだけになってしまったり・・。 色々試してみましたが、万策尽き、ご質問させて頂きました。 何か根本的な事が間違っている様な気もしますが、 ご教授願えたらと思います。 何卒よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数4

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

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

is_dir unlink mkdir imagejpegのファイル名 などにはURLは使えないと思いますよ $imgを"./image/abc"のような相対パスにしたらどうでしょう

hambarg
質問者

お礼

大変遅くなり、大変申し訳ございません! 相対パスにすれば、表示ができました! RSSから画像のURLを取得していたので、httpからになってしまっていたのですが、よくよく考えると、表示するページのディレクトリとアップロードされる画像のディレクトリを考えると、相対パスでかける事に気付きました! おかげ様で、滑らかな画像表示となりました! ありがとうございます!

その他の回答 (2)

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

ANo.1です。たびたびすいません。 ANo.2の方の回答を見て気付いたのですが、$imgはURLの絶対パスのことなんですね。ファイルシステム上の絶対パスと勘違いしていました。 私の回答は参考にする必要はないでしょう。

hambarg
質問者

お礼

遅くなりまして、大変申し訳ございませんでした。 何度も返信を頂きましてありがとうございます!

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

コードは検証していませんが、、 >$new_imgのURLにアクセスしても画像が生成されていないようです。 ここはブラウザで確認するのではなくて、FTPやSSHでログインして確認してみた方がよいかと思います。 予期せぬ場所、予期せぬ名前でファイルが保存されているかもしれませんし、ブラウザからのアクセスの方法が悪いかもしれません。

関連するQ&A

  • GDで画像表示

    GDのimagejpeg()などでJPGバイナリをブラウザに送信することができますが、<img scr= のような所に画像を表示できませんか? やりたいことは、xx.jpgを640,480にリサイズしてyy.phpが出力するHTMLタグの<img srcの部分に640,480のサイズで画像を表示することです。 xx.jpgはユーザが適当なサイズでアップロードする画像です。 640,480にリサイズした画像を保存してから<img srcで表示するなら、それは可能だということが分かりますが、メモリ上で解決したいと思っています。

    • ベストアンサー
    • PHP
  • イメージ関数の使い方について

    ローカルテスト環境で、簡易画像掲示板を自分で作ってみたいと思い、まずimage関数がどういったものかphpマニュアルで見てました。 imagecreatetruecolor()を調べていて、実際どんなものか動かしてみようと思い、マニュアルのサンプルコードのメッセージ部分だけ変えてやってみました。以下がコードの内容です。 <?php header ("Content-type: image/png"); $im = @imagecreatetruecolor(120, 20) or die("新しいイメージストリームを作成できませんでした。"); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, "ここが表示されるテキスト", $text_color); imagepng($im); imagedestroy($im); ?> しかし、これを実行してみても画像が×印になって表示されません。 imagecreatetruecolor()とかimagepng()とかちゃんと動いているのかと思い、自分なりに確認してみようと、コードを少し変えました。 まずimagecreatetruecolor()は成功時に画像リソースIDを返すと書いてあったのでprint文で出力して確認できないかと思いやってみました(返される値がarrayとかstoringじゃないので、出力できないのではと思いましたがとにかくやってみました。) つぎにimagepng()は失敗した場合に FALSE を返すって書いてあったので、失敗したら"false"と出力させてみようと思いました。 以下がそのコードです。 <?php header ("Content-type: image/png"); $im = @imagecreatetruecolor(120, 20) or die("新しいイメージストリームを作成できませんでした。"); print($im); $flag=imagepng($im); if($flag==false){ print("false");} imagedestroy($im); ?> これを試してみましたが、出力結果は同じでした。 なんか反応があるかもとおもい、一応imagecreatetruecolor(120, 20)の前の@マークをはずしてみたりもしましたが別にエラーが表示されるわけでもなく、ただ画像が表示されないだけです。 phpinfoのgdのところは、 GD Support enabled GD Version bundled (2.0.34 compatible) FreeType Support enabled FreeType Linkage with freetype FreeType Version 2.1.9 T1Lib Support enabled GIF Read Support enabled GIF Create Support enabled JPG Support enabled PNG Support enabled WBMP Support enabled XBM Support enabled になっています。 php.iniのmemory_limit は32Mになってます。memory_limitを-1にしたらちゃんと表示されるかもと思ったのですがやはり×印のままでした。 C:\xampp\php\extの中にphp_gd2.dllがあるのも一応確認しました。 動作環境はwindows vistaにxampp1.6.5で、phpのバージョンは5.2.5です。マニュアルを見た限りでは、windowsではphp.iniのphp_gd2.dllのコメントを外すだけでちゃんと動作すると思っていたのですが、他に抜けていることがありましたらアドバイスをお願いします。

    • ベストアンサー
    • 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
  • 「imagejpeg」(GD)で作成した画像を保存できない

    <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> http://www.php.net/manual/ja/function.imagejpeg.php を参照して(そのまま利用して)、画像を作成して表示させてみました。 すると、これはその通り、うまく画像が表示されました。 しかし、 <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // 【追加分】: 画像を保存する imagejpeg($im, 'new.jpg'); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> のように imagejpeg($im, 'new.jpg'); を挿入して、その画像を保存しようとしているのですが、うまくいきません。(何も起こりません。) ちなみに、保存するためのディレクトリのパーミッションはその親ディレクトリを含め、(7,7,7)です。 「new.jpg(相対パス)」を「/www/.../new.jpg」のように絶対パスを使ってやっても結果は同じでうまくいきませんでした。 どのようにすれば、新しく作成した画像を保存できるのでしょうか? ちなみに、OSはLinux(Fedora10)です。もちろん、GDは先のテストで証明される通り、動作していると思います。 よろしくお願い致します。

    • 締切済み
    • PHP
  • アップロードされたファイルを縮小したい

    アップロードされたファイルが200*200よりも大きかった場合、200*200に縮小したいのですが、 エラーが出てしまい困っています。 $filename="test.jpg"; $width="200"; $height="200"; $size = getimagesize($filename); if ($size[0] > $width || $size[1] > $height) { header ("Content-type: image/jpeg"); $src_im = imagecreatefromjpeg($filename); $dst_im = imagecreate($width, $height); imagecopyresampled ( $dst_im, $src_im, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); imagejpeg ($dis_im , $filename); } 以上のように記述したところ、以下のようなエラーが出ました。 Warning: imagejpeg(): supplied argument is not a valid Image resource in /var/*****/***.php on line 171 きちんと動作させるにはどうしたら良いでしょうか? アドバイスをお願いします(*- -)(*_ _)

    • ベストアンサー
    • 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
  • PHPでGDライブラリを使って縮小した画像を直接表示したい

    PHPでGDライブラリを使って、「image.jpg」という画像(800x222のJPEGファイル)を、GETで渡した幅に縮小させたくて、次のように書きました。 -----reimage.php--------------------- <?php header("Content-Type:image/jpeg"); $old_width=800; $old_height=222; $width = htmlspecialchars($_GET['w']); $height = ($old_height / $old_width) * $width; $source = imagecreatefromjpeg("image.jpg"); $re_image = imagecreatetruecolor($width,$height); imagecopyresampled($re_image,$source, 0, 0, 0, 0,$width, $height, $old_width, $old_height); imagejpeg($re_image); imagedestroy($re_image); ?> -------------------------- 他のHTMLファイルから <img src="reimage.php?w=480"> などとすると縮小された画像が表示されるのですが、直接「reimage.php?w=480」を開くと、文字化けした文字列が並んでいるばかりで画像が表示されません。 firefoxでMIMEタイプを見てみると、「text/html」になっています。 >header("Content-Type:image/jpeg"); の部分がうまくいっていないのだと思いましたが、どう直せばいいのか分かりません。 なお、サーバーはxreaの広告免除を使っています。 まだPHPを勉強し始めて日が浅いので、見当違いなことを聞いているかも知れませんが、よろしくおねがいします。

    • ベストアンサー
    • 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
  • 画像が表示されなくなったのですが教えてください。

    今回、画像の表示方法を変えたら一部の画像が表示されなくなりました。 HP上には、20枚くらい画像を表示しており「旧方法」では正常に表示できました。 「新方法」を取ってからは、開くたびにランダムで表示できない画像が発生します。 「旧方法」 <a href="P01.JPG" target="_blank"><img src="P01s.JPG" /></a> 「新方法」 <a href="P01.JPG" target="_blank"><img src="P01.JPG" style="width:320px" /></a> 画像の説明 P01.JPG・・・800*600の元画像 P01s.JPG・・・800*600の縮小版で320*240 「旧方法」は元画像の縮小画像を作ってそれを表示してました。 しかし、縮小画像作るのはめんどいし容量もとるので、出来れば元の画像だけで小さく表示できないかと思っていました。 そんな時、「新方法」では、元の画像だけで小さく表示できたので使ってみたら表示できない画像が出て来て困っています。 使い方が間違っているとか、どんな些細なことでもいいので表示されない原因を教えて頂けないでしょうか? 宜しくお願いします

    • ベストアンサー
    • HTML
  • tableの表示位地

    こんにちは。 HTML超初心者です。初心者のくせして作りたい形は頭にあったりします。 画像がランダムに表示されるjavascriptをコピーしてきました。 画像を入れ替えて、それがちゃんと表示されています。 その画像の表示されている上の位地にtableを入れたいのですが、 書き込んでみても、ランダムに表示される画像と横にならんでしまいます。 どのようにしたら、tableと画像を縦に並ばせることができるのでしょうか? かなり初歩的なことだと思いますが、どなたかよろしくお願いします。 ちなみに下のようなjavascriptです。 <SCRIPT language="JavaScript"> <!-- // ランダムに画像を表示する img = new Array(); img[0] = "img/img0.jpg"; img[1] = "img/img1.jpg"; img[2] = "img/img2.jpg"; img[3] = "img/img3.jpg"; img[4] = "img/img4.jpg"; n = Math.floor(Math.random()*img.length); document.write("<img src='"+img[n]+"' border='0'>"); //--> </SCRIPT>

    • ベストアンサー
    • HTML

専門家に質問してみよう