人生のプチ美学を教えてください!!

質問お願い致します。
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」になります。


どなたかお知恵を貸して頂けないでしょうか。
宜しくお願い致します。

A 回答 (3件)

>windowsのメモ帳でソースをアップし直した所「Warning: Cannot modify


>header information - headers already sent by (output started at
>/home/…) in /home/….php on line 2」の表示までたどり着くことが出来ました。

それは(文字セットがutf-8で)メモ帳で書いたソースにBOMが付いているというだけではないですかね。つまりheaderがエラーになっているので画像だということすら返ってきていないよいうだけです。

まぁとりあえずはheader関数をimagejpegの直前にしてください(そこまでにエラーメッセージが返っていてもheaderがあると表示されないので)。

#というか「画像取得なのかリサイズなのか」の
#切り分けはしたのでしょうか?
    • good
    • 0

>$imgpath = "

http://*****************.jpg";

とりあえず外部サーバの画像ファイルでなく、同一サーバに置いている画像ファイルを指定してみては如何でしょう(まさか同一サーバの画像ファイルをhttp経由で指定していたりはしないと思いますが・・・)。

$imgpath = "*****.jpg";

のように画像ファイルをスクリプトと同一階層に置いて試してみてください。現状では問題の切り分け(取得に失敗しているのかリサイズに失敗しているのか)が出来ません。


あるいは

<?php
header("Content-Type:image/jpeg");
$imgpath = "http://*****************.jpg";
readfile($imgpath);

として、リサイズしなければ取得・表示できることを確認するとか。

この回答への補足

回答有り難うございます。

土曜日にPC忘れてしまい返信が遅れてしまいました。申し訳有りません。

いくらやっても「画像ファイル "http://*****************.php" は壊れているため、表示できませんでした。」と表示されるだけでした。

しかし、今朝駄目元でwindowsのメモ帳でソースをアップし直した所「Warning: Cannot modify header information - headers already sent by (output started at /home/…) in /home/….php on line 2」の表示までたどり着くことが出来ました。

当方は今までmacのエディターを使ってファイルを作成していました。文字コードは一緒でしたので「?」な状態です。

今windowsが使えない環境ですので、上記のソースは後から上げてみたいと思います。

補足日時:2013/03/18 11:24
    • good
    • 0

お疲れ様です。



$src_im = ImageCreateFromJPEG($imgpath);
の後に
print_r($src_im);
入れるとどの様な結果が返って来ますか?
自分の環境では
$imgpath = "http://127.0.0.1/iK/k1601.jpg";
//imagejpeg($dst_im); <--取りあえず殺してます
とすると
Resource id #6
と帰って来ています。

$res=imagecopyresampled();
とし、
print_r($res);
するとどうなります?
imagecopyresized()
では、どうなりますか?

この回答への補足

回答有り難うございます。

土曜日にPC忘れてしまい返信が遅れてしまいました。申し訳有りません。

いくらやっても「画像ファイル "http://*****************.php" は壊れているため、表示できませんでした。」と表示されるだけでした。

しかし、今朝駄目元でwindowsのメモ帳でソースをアップし直した所「Warning: Cannot modify header information - headers already sent by (output started at /home/…) in /home/….php on line 2」の表示までたどり着くことが出来ました。

当方は今までmacのエディターを使ってファイルを作成していました。文字コードは一緒でしたので「?」な状態です。

今windowsが使えない環境ですので、上記のソースは後から上げてみたいと思います。

補足日時:2013/03/18 11:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!