• ベストアンサー

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関数以降のデバック文が表示しませんでした。 初心者なのでうまく説明できなくてすいません。 お手数ではございますがご教授お願いします。

  • ori08
  • お礼率73% (42/57)
  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答No.1

文字化けってJPEGファイルを文字列で出力しているような気がします。 一応確認ですが、header(~)の前に「html」などタグか何か出力してないですか?

ori08
質問者

お礼

ご回答ありがとうございます。 おっしゃるとおりタグが入っていましたので外して再度 確認しましたが画像表示されず×が表示されるだけで改善しませんでした。

ori08
質問者

補足

試しに以下のようにした場合は画像がリサイズされ表示されました。 ただこの場合はその都度その携帯に合わせた画像を作成することに なり自分のさせたいこととは違うので質問時のような方法で行いたいのですが。 $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); imagejpeg ($output_image_data,"save.jpg"); imagedestroy ($output_image_data); echo("<img src=\"save.jpg\" />");

その他の回答 (2)

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

PHPを置いてるサーバはレンタルサーバでしょうか サーバによっては勝手にヘッダーが出力されるところもありその場合はうまく動きません 広告が自動でつくところはまず無理です

ori08
質問者

補足

ご回答ありがとうございます。 使用しているサーバーは有料のサーバーで広告が出ることはありません。ですので勝手にヘッダーが出力されてないと思います。

  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

@(アットマーク)を外して、まずはどこでエラーがでているかを確認することを薦めます。

ori08
質問者

補足

ご回答ありがとうございます。 ご指摘の通りに@を外して確認しましたがエラーは出ずに 画像表示されず×が表示されるだけで特に変化がございませんでした。

関連するQ&A

  • [PHP]GDを利用した画像リサイズについて

    [PHP]GDを利用した画像リサイズについて GDを利用した画像リサイズ処理を行うクラスを作ったのですが、 以下のようなエラー(文字化け)が出てしまい画像出力することができません。 有識者の方、どうか知恵をお貸しください。宜しくお願い致します。 ????JFIF??;CREATOR: gd-jpeg v1.0 (using IJG JPEG v70), quality = 75 ??C    $.' ",#(7),01444'9=82<.342??C  2!!22222222222222222222222222222222222222222222222222??II"?? ???}!1AQa"q2???#B??R??$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????????????????????????????????????? ???w!1AQaq"2?B???? #3R?br? -------- 以下省略 ---------- ◆作成したPHPファイル ・test.php <?php require_once 'Image.php'; $path = './400x300.jpg'; $r = new Image($path, 75); $r->resize(75); ?> ・Images.php <?php class Image{ var $new_width; var $path; function Image($path, $new_width){ @header("Content-type: image/jpeg"); $this->path = $path; $this->new_width = $new_width; } function resize(){ global $new_width; global $path; // 画像パス $image = imagecreatefromjpeg($this->path); // 画像のサイズを取得 $width = 150; $height = 150; $rate = $this->new_width / $width; $new_height = $rate * $height; $thumb = imagecreatetruecolor($this->new_width, $new_height); imagecopyresized($thumb, $image, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); // imagecopyresampled($thumb, $image_path, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); imagejpeg($thumb, null, 75); imagedestroy($image); } } ?> ◆環境と状況 ・サーバ:WindowsXP(XAMPPを利用してローカル環境を構築) ・phpinfo()にて、GD Support=enabled、JPEG Support=enabledを確認 ・ステップ実行(デバック)にてimagejpeg($thumb, null, 75);まで問題なく実行可能。  ※imagejpeg($thumb, null, 75);実行後上記文字列が出力される。 ・コメントアウト個所のimagecopyresampledでも動作結果は同じ。 ・参考にしたサイト  http://goodjob.boy.jp/chirashinoura/id/79.html 恐れ入りますが、ご回答お願い致します。

    • ベストアンサー
    • PHP
  • PHP GD 画像が縮小できない

    宜しくお願いします。 ※ローカル環境です。 (WinXP PHP5 Smarty PEAR MySQL ※GDはインストされています。) 下記のコードで、サーバーにもともと上げてある画像(jpeg)を縮小して、 それをブラウザに表示させようと思います。 ですが、縮小されずに、元の画像サイズのまま表示されてしまいます。 おかしな点をご指摘下さいませ。 また、(1)で、 jpegファイルを取り込むコードがありますが、これは、 もし画像がGIFであったりPNGの場合を顧慮するなら、 取り込む際にそれぞれを判定するのが基本でしょうか? もし、今回のようにサバー元の画像をリサイズするのであれば、拡張子もわかっていますので、 jpegファイルだけのことを考えればいいですが、 たとえば、任意のアップロードされたファイルを扱う場合は、上記3種類を判定すして処理すべきですよね? 以上、2点を回答下さいませ。 // -- (1) // 画像を読み込む。 $file_path = "http://www元画像.com/img/aa.jpg"; $image = ImageCreateFromJPEG($file_path); //JPEGファイルを読み込む /*********** $image = ImageCreateFromGIF($file_path); //GIFファイルを読み込む $image = ImageCreateFromPNG($file_path); //PNGファイルを読み込む ************/ // -- (2) // 画像のサイズを取得。 $width = ImageSX($image); //横幅(ピクセル) $height = ImageSY($image); //縦幅(ピクセル) // -- (3) // 縮小した画像のサイズを決める。 $new_width = 100; $rate = $new_width/$width; //圧縮比 $new_height = $rate*$height; // -- (4) // 空の画像を作成する。 $new_image = ImageCreateTrueColor($new_width, $new_height); // -- (5) // サンプリングしなおす  ImageCopyResampled($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height); // -- (6) // ブラウザに出力する場合。 ImageJPEG($image); //ImageJPEG($image,'simpletext.jpg'); //ImageGIF($image); //環境によっては使えない //ImagePNG($image); // -- (7) // メモリを解放する。 imagedestroy ($new_image); imagedestroy ($image);

    • ベストアンサー
    • 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ライブラリを使って、「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
  • phpでテキストを返す

    html側で <img src="./image.php" /> php側で header("content-type: image/jpeg"); imagejpeg($image); imagedestroy($image); とすると、画像が表示されますが、 これを画像ではなく、テキストで返すにはどのようにしたらいいでしょうか?

    • ベストアンサー
    • 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
  • 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
  • GDを沢山出力できない

    GDを使ってイメージを出力しいています。 GDでイメージを生成しているプログラム(gd1.php)を <img src='gd1.php'>という形で呼んで表示しています。 ひとつを表示するのはうまく言っているのですが 一画面でGDを複数呼ぶと画面が途中から使用不可能の×になり、その後ページを更新などすると画面が真っ白になってしまいます。 表示できなくなる画像の数ですが、サイズが600*36だと28個目前後、サイズ40*30だと50個前後までは表示できますがそれ以降の画像が表示できません。 メモリが不足しているのかと思い、iniファイルのmemory_limitを増やしてみましたがあまり変化はありません。 (最初64Mだったのを488Mまであげましたが変わりありませんでした。) OSはRedHadLinuxでPHPとGDは4.2.2(GD1.6.2)および4.4.2(GD2.0.28)の両方で現象が起きてしまっています。 もちろんImageDestroyは行っています。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • GDで生成したはずの画像が文字列として表示される!

    PHP初心者です。いろいろ調べたのですが解決策が見つかりません。なんとか解決策を教えてください。よろしくお願いします。 imagejpeg()で画像を生成したつもりなのですが、文字列として下のように表示されてしまいます。 ・・ JFIF ・>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality 棧C $.' ",# (7),01444 '9=82<.342棧C 2! !2222222 画像データがそのまま文字で打ち出されているようです。 こちらの環境は、 ・さくらインターネットの共用サーバー ・php.iniはデフォルトのまま ・文字コードは、euc-jp ソースは以下の通りです。 <?php Header ("Content-type: image/jpeg"); $test = imagecreate(200, 200); $bcolor = imagecolorallocate($test, 0, 0, 0); imagejpeg($test); imagecolordeallocate ($test,$bcolor); imagedestroy($test); ?>

    • ベストアンサー
    • PHP
  • GDで画像表示

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

    • ベストアンサー
    • PHP

専門家に質問してみよう