http://q.hatena.ne.jp/1242705460

をテストしています。
なぜかPNG画像だけ「壊れている」とエラーになりますが、考えられる原因はなんでしょうか?
phpinfo()でGDを見ると、PNG Support もenabledになっています。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:2009/05/20 16:17:29
  • 終了:2009/05/26 20:41:09

回答(2件)

id:doumoto No.1

どうもと回答回数497ベストアンサー獲得回数372009/05/20 21:58:07

ポイント10pt

ファイルをアップロードした際に、画像ファイルが壊れてしまった可能性はないでしょうか?

thumbnail.inc.phpを使って、当方の環境(ローカルのxamppとwebarena)では問題なく動作しました。

include_once('thumbnail.inc.php');

$thumb = new Thumbnail('./cap319.png');

$thumb->resize(500,500);

$thumb->show();

?>

使用した画像はコレです( ̄ー ̄)ノ。http://doumoto.s9.xrea.com/work/cap319.png

xreaではグローバルレジスタか、phpのバージョンの絡みで、スクリプトでエラーが出ました。

id:P-mako

画像は直接表示可能ですし、同階層に保存したjpg、gifは問題なく(直接でもDG経由でも)表示されます。

> xreaではグローバルレジスタか、phpのバージョンの絡みで、スクリプトでエラーが出ました。

グローバルレジスタがどういう設定だとエラーが出るんでしょうか?PHPバージョンはいくつだとエラーになりますか?

またそれぞれエラーとはどういうメッセージでしょうか?

2009/05/21 09:48:29
id:tdoi No.2

tdoi回答回数174ベストアンサー獲得回数752009/05/23 01:28:06

ポイント60pt

まず、確認です。

http://q.hatena.ne.jp/1242705460

をテストしていますとのことですが、ベストアンサーの方のように自分でサムネイルを作成しているのではなく、doumotoさんが回答された

http://www.gen-x-design.com/projects/php-thumbnailer-class/

のライブラリを利用しているということでよいでしょうか?

もし、ベストアンサーの方の方法のように自分でサムネイルを作成しているのであれば、そのソースを見せて頂かないとなんともいえません。ぱっと想像がつくのは、Content-typeの設定がおかしいくらいでしょうか。


さて、thumbnail.inc.phpを利用している場合についてですが、ライブラリのソースもざっと眺めましたが、特別問題はない気がします。

まずは、プログラム的に処理に失敗しているのか、出力はちゃんとされているが、ブラウザで表示されないのかを確認した方がよいでしょう。

まずは、次のような感じでライブラリの処理中でエラーが起きていないかを確認してみてください。

include_once('thumbnail.inc.php');
$thumb = new Thumbnail('画像ファイルパス');
$thumb->resize(500,500);
if ($thumb->error) {
  echo $thumb->errmsg;
} else {
  $thumb->show();
}

で、これでエラーメッセージが表示されるようなら、それで原因の1つは判明するでしょう。

これで何もでないようであれば、少なくとも、このライブラリは出力しようとしているはずです。

内部的には、showという関数の中で、ImagePng()で出力しています。

このライブラリはここのエラーチェックはしていないので、ちょっと汚いですが、ライブラリのコードを変更してImagePng()がTRUEを返すことを確認してみてください。

ここまで問題がなければ、プログラム的には正しいレスポンスを返していると推定されます。


となると、その他の要因によって表示されないと思います。

例えばですが、まず問題ないと思いますが、PNGの扱いがブラウザによって一部問題もあるようなので、他のブラウザで実行してみると結果は違うかもしれませんね。

http://www.remus.dti.ne.jp/~a-satomi/bunsyorou/PNG_descript.html...


まず、こんなところまで確認してみてはいかがでしょうか?

それで問題が分からなければ、ある程度書いたコードを公開していただければ、もう少しコメントできるかもしれません。

あと、コメントあけてもらった方がいいです。


何かの参考になれば。

id:P-mako

長文のご回答ありがとうございました。

ご指摘のようにNGなソースを提示すべきでした。

いろいろ丁寧に解説いただいて申し訳ありませんが、非常にPoorなミスで自己解決しました。

イメージ出力用の

ImageJpeg($dst, null, 100);

から、まったく調べずに

ImagePng($dst, null, 100);

としていたのが誤りだったようでして、

ImagePng($dst);

とすべきだったようです。(つまりパラメータが冗長だった)

2009/05/26 20:40:17

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません