| ブログトップ | PHP関連 |

phpThumb()でサムネイル生成

imgタグ単位でサムネイルを自動生成してくれる便利なプログラム「php Thumb()」(ダウンロードサイトはこちら)。

このプログラムを使用する上でつまったことがあるのでメモっておきます。

 

まずどのように使用するかというと、

  1. ダウンロードしてきた「phpThumb_xxx.zip」を解凍します。
  2. 「phpThumb_xxx」というフォルダが出来るので、「phpThumb」と名前を変更し、そのフォルダを丸ごとサーバにアップロードします。
  3. サムネイルを表示したいimgタグを以下のように記述します。(「phpThumb」フォルダはウェブルートにアップロードしたと想定しています。)
<img src="http://ドメイン/phpThumb/phpThumb.php?src=サムネイルにしたい元画像のパス&w=100&h=100&zc=1&q=100" />

これで、この記述がされているページへブラウザからアクセスすると、自動的にサムネイルが生成され、以降はその生成されたサムネイルを表示するようになります。(一番最初にアクセスされたときはサムネイルを生成するため少し画像の表示に時間がかかります。)

ちなみに引数については以下の通りです。

  • src:サムネイルにしたい元画像のパス
  • w:幅
  • h:高さ
  • zc:トリミングのオン・オフ
  • q:クオリティ(0~100)

 

で、どこでつまったのかというと、「サムネイルにしたい元画像のパス」

ここをhttpから始まるURLにしているとエラーが帰ってきて動作しません。

なんでこんな仕様なんだろう?と思ったんですが、他の色々なサイト(たとえばこちら)を見て「そりゃそうか」と納得しました。つまり外部のサイトであっても画像を引っ張ってきてサムネイル化してしまうことが可能となってしまうわけです。

別にimgタグに埋め込まなくても

http://ドメイン/phpThumb/phpThumb.php?src=サムネイルにしたい元画像のパス&w=100&h=100&zc=1&q=100

とアドレスバーに打ち込めばサムネイル画像がキャッシュとして生成されてしまうわけですから、いたずらで外部サイトからとんでも画像を引っ張ってこられた日には・・・ガクガク(((( ;゚Д゚))))ブルブル

というわけで、「サムネイルにしたい元画像のパス」に記述する場合は相対パス、もしくは「/images/hoge.jpg」という風にスラッシュからはじめるパスにしましょう。

そもそも、phpThumb.phpへダイレクトにアクセスでき、それによるサムネイル生成が可能なことに問題があるので、htaccessを使用してダイレクトアクセスならびに外部からのリンクをつなげなくしたほうが良いでしょう。

.htaccessの記述方法はこんな感じ。

<Files ~ "phpThumb.php">
SetEnvIf Referer "^http://ドメイン/" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Files>

これをphpThumbフォルダにアップすれば、phpThumb.phpにダイレクトアクセスおよび外部からのリンクができなくなります。

 

さて、話を「サムネイルにしたい元画像のパス」に戻しまして、問題になるのがCMSとの連携(まあ、そもそもphpThumbは記述方法がちょっとめんどくさいので、CMSと連携させないとあんまり利用しないと思うんですが)。

MTはデフォルトでサムネイルを生成できるタグ(<$MTAssetThumbnailLink$>または<$MTAssetThumbnailURL$>)があるのでこれを使用する必要は無いと思います。

でもたとえばWordPressの場合、(Custom Field GUI Utilityで設定した)画像用のカスタムフィールドに画像を投稿したとして、保存される画像へのパスはhttpから始まるURLとなってしまいます。

これをそのままphpThumbのsrcに放り込むと当然エラーが帰ってくるわけで、正常に表示させるにはひと手間必要となります。
※以下の記述は「Custom Field GUI Utility ver3.1」を使用したカスタムフィールドに、画像を投稿した場合と想定しています。(「hoge」はそのフィールド名)

<?php
$imagefield = get_imagefield('hoge');
$image_src_array = parse_url($imagefield['url']);
$image_src = $image_src_array["path"];
?>

<img src="http://ドメイン/phpThumb/phpThumb.php?src=<?php echo $image_src; ?>&w=100&h=100&zc=1&q=100" />

parse_urlはURLの構築要素を分解して配列に格納してくれる関数です。くわしくはこちら

これでウェブルートからのパスをsrcに放り込むことが出来ます。

 

参考サイト

このエントリーをはてなブックマークに追加

LINEで送る

nandani | 2011年05月21日 | コメント(0) | トラックバック(0) | PHP関連

トラックバック

トラックバックURL

コメントする

※メールアドレスが公開されることはありません。

名前 *
メール*
URL
Copyright(c) 2010 - 2017 ダリの雑記