人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpで、動的に画像を生成した場合(ファイルとして保存せずに生成・表示)、
その画像をブラウザで保存しようとすると、
本来の形式ではない形式で保存されてしまいます。

例えば、imagejpeg でjpegを生成したのに、
ブラウザで保存するときに bmp になってしまったり、
携帯電話だと png 形式で保存されてしまったりします。

<img src="http://aa.bb.com/gazou.php?id=1">

などのように「拡張子」を表示していないため、
こうなっているのかな、と推測しています。


これを解決する方法はあるのでしょうか?

正しい画像形式で保存できるようにしたいと思っています。

●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:BMP JPEG PHP PNG ファイル
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● GEN111
●20ポイント

画像を出力する前に

header('Content-Type: image/jpeg') ;

とかしてますか?

◎質問者からの返答

どうもありがとうございます。

設定を「png」にしていました。。。

「jpeg」に修正したところ形態とfirefoxは直りましたが、

IEだと「bmp」のままでした。


2 ● y-kawaz
●20ポイント

Content-Type を明示的に指定してやることによりファイルの形式をブラウザに伝えられます。

また、Content-Disposition ヘッダを出力してやれば保存する際のファイル名をブラウザに指定することも出来ます。

header("Content-Type: image/jpeg");
header("Content-Disposition: inline; filename=foo.jpg");

↑この例では画像の右クリック保存、及びURL直接表示でメニューからファイルに保存のどちらを行っても foo.jpg という名前がデフォルトのファイル名になります。

Content-Type だけの場合は IE の場合だと直接URLでメニューから保存をしたときにはjpgとして認識されないようで上手くいきません、右クリック保存ならContent-Typeだけでもgazou.php.jpgやgazou.jpgという風になります。

なので両方のヘッダを出力しておくのが無難だと思います。

◎質問者からの返答

どうもありがとうございます。

携帯、firefoxの場合は正常に処理できましたが、

IEで右クリック保存した場合は、やはり「bmp」と認識されてしまいました。

ファイル名は初めて知りました。

使ってみたいと思います。


3 ● y-kawaz
●20ポイント

VistaのIE7では右クリック保存でもいったんですが、XPのIE環境が先程は手元にないので試せませんでした。

ところで以下のように PATH_INFO を利用してリンクの書き方でURLが画像であるように見せかけるのはどうでしょうか?

<img src="http://aa.bb.com/gazou.php/foo.jpg?id=1">

php の後ろに/とセットでダミーのファイル名を書いてもきちんと対象の php で処理されるので php 側は何も変える必要がありません。

ちなみに /foo.jpg の部分は php からは $_SERVER['PATH_INFO'] で取得することも出来ます。

◎質問者からの返答

どうもありがとうございます。

XP&IE6の組み合わせでのバグなんですかねぇ・・・。

http://aa.bb.com/gazou.php/1.jpg

のように .jpg 等にしてみましたが、「BMP」でしか保存できなかったです。


4 ● しおり
●20ポイント

普通は、「Content-Type: image/jpeg」だけで良いはずなんですが、IE6 は、Content-Type: ヘッダーではなくファイル名(拡張子)でファイルの種別を判断するというバグがあるので、うまく行かないのだと思います。

回答2で id:y-kawaz さんが書かれているように、ファイル名も指定すると IE6 でもうまく行くはずです。

# XP + IE6 で確認しました。

◎質問者からの返答

どうもありがとうございます。

それが、ファイル名指定もしているのですが、

何故かIE6では反映されないみたいで・・・。

数台のPCでチェックしましたが、同じ結果でした。


5 ● yoshi-ken
●20ポイント

.htaccessは使えますか?

使えるのであれば、mod_rewriteを用いるのがベストです。

であるところを

としてアクセスできる方法を紹介します。


現在gazou.phpが置かれている場所に

RewriteEngine on

RewriteBase /

RewriteRule ^gazou_([0-9]+)?.jpg gazou.php?id=$1 [L]

と書かれたhtaccess.txtというファイルをアップロードして、

その後 htaccess.txt から .htaccess へリネームしてください。

もし既にある場合には、追記する形で行えば問題ないでしょう。

◎質問者からの返答

どうもありがとうございます。

実は既にリライトしていて、

http://aa.bb.com/gazou.php/1.jpg

http://aa.bb.com/1.jpg

等にしましたが、結果は同じでした。

そのため、jpgで生成されていない気がしますが、

firefox等ではjpgで保存することができるので、よくわからない状態です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ