- ベストアンサー
PHP GD画像が縮小できない
- この記事では、PHP GDを使用して画像を縮小する方法について説明します。
- 質問のコードの中で、画像を読み込み、サイズを取得し、縮小した画像を作成する方法が示されています。
- しかし、縮小された画像が表示されない問題が発生しています。解決策として、画像を出力する前に作成した縮小画像を使用する必要があります。また、拡張子に応じて画像の読み込み方法を変更する必要があります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
元の画像サイズのまま表示される原因は「ImageJPEG($image);」で元の画像を出力しているからです。 「ImageJPEG($new_image);」で縮小した画像を出力できます。 画像の種類判別は、下記の関数で出来ます。 ・exif_imagetype($filename) http://jp2.php.net/manual/ja/function.exif-imagetype.php ・getimagesize($filename) の戻り値で2番目要素 http://jp2.php.net/manual/ja/function.getimagesize.php 下記の関数なら、自動判別で画像を読み込むことが出来ます。 ・imagecreatefromstring(file_get_contents($filename)) http://jp2.php.net/manual/ja/function.imagecreatefromstring.php
その他の回答 (4)
- oktuburero
- ベストアンサー率22% (102/446)
>header("Content-type~・・・・は、とても重要なものだと思いますが、 >勉強不足のため、その確固たる意味合いを知らないのが、 >こういった疑問に繋がっているのだと思います。 正直言ってヘッダこれはphp以前のhttpの仕様の問題。 phpやるなら知っていて当然のこと。 header()関数はそのヘッダを送信する関数。
お礼
有難うございます。 お蔭様で、随分まえに勉強したことをおさらいすることができました。 概ね理解していた通りで、再認識することができました。
- bx2
- ベストアンサー率47% (97/206)
参考までに。 ・image_type_to_mime_type($imagetype) http://jp2.php.net/manual/ja/function.image-type-to-mime-type.php ・image_type_to_extension($imagetype) http://jp2.php.net/manual/ja/function.image-type-to-extension.php
お礼
bx2さん、 追加の回答有難うございます。
- oktuburero
- ベストアンサー率22% (102/446)
書き忘れたけど画像を出力するなら前もって header("Content-type: image/画像形式"); としてヘッダを書いた方がいいよ。
補足
header("Content-type~・・・・ っという物をつけるのは、 なんとなくその意味がわかる程度で、正直なところ勉強不足です。 実はこの件に関しても疑問がありました。 今回の質問に記載したコードは、リサイズした画像を単にブラウザに出力する だけのものになっています。 でも、実際は、特定のディレクトリにファイル名をつけて保存するようにします。 そして、Smartyにて開発しておりますので、 テンプレート側(HTML)に、その保存データーを<img>タグで引っ張ってきて表示させようと思っております。 そのため、 他のサイトでも、header("Content-type~・・・・ をつけるようにということを、 記載されていることが殆どですが、 今回のケースでは、 1、データーとしてディレクトリに保存 2、Smartyとの連携で、HTMLテンプレートに出力 という2つの観点から、phpファイルにheader("Content-type~・・・・を 書くのはおかしいのではと思い、記述しておりません。 header("Content-type~・・・・は、とても重要なものだと思いますが、 勉強不足のため、その確固たる意味合いを知らないのが、 こういった疑問に繋がっているのだと思います。
- oktuburero
- ベストアンサー率22% (102/446)
>現在、下記のように pathinfo を記述しております。 >これだとダメでしょうか? >$imgpass = pathinfo($file_path); >$extension = $imgpass['extension']; //拡張子のみを取得 これだと拡張子が偽装されていたり間違った拡張子になっていた場合には 判断できないですよね。
お礼
回答有難う御座います。 なるほど、では、 getimagesize() にて画像データーの配列を取得するようにします。 その後、 ifにてgif、jpg、pngを判定い、振り分けます。
お礼
結局のところ、問題は解決いたしました。 色々と有難うございました。
補足
回答有難うございます!お蔭様で、解決できました! ただ、画像の種類判別は、 getimagesize() を利用しようと思いますが、 現在、下記のように pathinfo を記述しております。 これだとダメでしょうか? $imgpass = pathinfo($file_path); $extension = $imgpass['extension']; //拡張子のみを取得