Home > PHP

phpからmineヘッダーで画像を開く

いわゆるHTMLタグからの画像の表示は<img src=...でやりますが、これは実はmineタイプがhtml/textってことな筈。何らかの方法で<img...の部分のみを画像タイプのmineヘッダーにしてやって表示しているわけですが、ここではヘッダーそのものを画像タイプとして検出して表示してしまうというやり方です。
 利点というのは、例えば売り物の写真、または著作権のついた画像などは大きな画像そのものをダウンロードさせたくないというのがあるのでファイルパスがわからない...という利点はあります。ブラウザーによっては、ファビアイコンが表示される部分に小さな画像が表示されるなんてのもいい感じではあります。いろいろ使い勝手はある筈。

<?php
# 画像ファイルのパスとファイル名
$filename = './test-photo/553.jpg';

# 画像のサイズを取得(配列)
$size = getimagesize($filename);

# 画像を開いてmimeタイプを取得
$fileopen = fopen($filename, "rb");#オプションは読みとバイナリ
if ($size && $fileopen) {
    #mimeタイプを取得
    header("Content-type: {$size['mime']}");
    #ファイルを全部排出!
    fpassthru($fileopen);
}
exit;
?>
 
 この関数は画像のサイズも同時に取得してくれます。mimeタイプを取得や画像の様々な情報を取得するには$size(配列)を洗い出してやればいいです。返り値は配列で7つしかないので、

list ($width, $height, $imagetype, $imgtag) = getimagesize($filename);

でも十分です。ちなみにbitsからmimeは連想配列なのでlistで取り出せません。ですんで、そのまま$size['bits']とか$size['mime']とかで取り出せます。

<?php
# 画像ファイルのパスとファイル名
$filename = './test-photo/553.jpg';

# 画像のサイズを取得(配列)
$size = getimagesize($filename);

# 画像を開いてmimeタイプを取得
$fileopen = fopen($filename, "rb");#オプションは読みとバイナリ
if ($size && $fileopen) {
    fclose($fileopen);
}

/*
0 => 幅
1 => 高
2 => IMAGETYPE_XXX 定数のひとつで画像の形式を表します...意味分からん。
3 => <img~タグで直接利用できる文字列 height="yyy" width="xxx" (便利)
bits => 個々の色のビット数
channels => RGBは3、CMYK画像は4
mime => mimeヘッダーのタイプ
*/
foreach ($size as $k=>$v) {
    print "$k=>$v<br />\n";
}

exit;
?>






プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer