2006年6月25日

lightbox.js とPHPで手軽にフォト・アルバムを作成

写真の公開するには、Flickrなどのサービスを使うのもいいのですが、自分のサイトに画像ファイルをおきたい場合もあります。そこで手軽にlightbox.jsで写真をスライドショー表示するための、簡単なPHPを作ってみた。こんな感じ。

設置方法

基本的には、写真とサムネイル画像を、ひとつのディレクトリにまとめてアップしておいて、PHPでそのディレクトリをパースしてlighbox.js用のHTMLを出力するだけ。かなりシンプルです。

利用方法は、上記のスクリプトを保存して、lightalbum.php という名前でサーバにアップロード。次に肝心の lightbox.js を以下のサイトからダウンロード。

注意: 最新版のLightbox v2.04を利用する場合は、一部ファイル構成などが変更されているそうなので、YKTさんからいただいたコメントを参考に、phpファイルを修正してください。

解凍したら「lightbox」というフォルダ名で、lightalbum.phpをアップしたディレクトリにアップロード。そして同じ場所に、写真を入れるphotosディレクトリを作成。ディレクトリ構成はこんな感じになります。

次に写真とサムネイル画像をアップロードするのですが、スクリプトが自動的に判別できるように、画像の名前が一定の規則に従っている必要があります。例えばこんな感じ。

このケースは、「IMG_0632-01.jpg」という写真のサムネイルは「IMG_0632-01-01.jpg」という名前になっています。通常サイズの写真は「-01.jpg」とい末尾で終わり、サムネイルには「-01-01.jpg」という末尾が付いている、という法則があります。

これは、ImageReady のドロップレットで自動で加工&保存した場合に、上書き保存されないように、システムがファイルの最後に-01をつけて自動保存することで、こうなっています。ドロップレットによる自動処理については、後で書きます。ひとまずは、このような法則に基づいて、写真とサムネイルが複数アップされていることが必要です。

PHPスクリプトの設定

PHPスクリプトの設定は、PHPのソースコードの最初の部分を編集。

  
 $liburl = "./";   // lightbox フォルダのあるパス

次に、写真とサムネイルのファイルを判別する法則を記述。

  
  $thumb_disc = "-01-01.jpg";  // サムネイル画像の末尾
  $large_disc = "-01.jpg";  // 拡大画像の末尾

スクリプトは、サムネイル画像の末尾指定に一致するファイルを探してリスト表示します。また同時に、リンク先になる拡大画像は、サムネイル画像の末尾を、拡大画像の末尾で置換したファイル名が指定されます。

最後にアルバムの情報を、配列で記述。アルバムは複数指定することができて、配列の番号が、アルバム番号になります。

  • "title" => "アルバムのタイトルを自由に設定",
  • "subtitle" => "サブタイトルを自由に設定",
  • "img_path" => "./photos/sample1", 写真のあるフォルダのパスを相対指定。public_html など、webで表示可能な場所に写真をアップして、その場所を指定する必要があります。
  • "password" => "" に英数文字を指定すると、簡易パスワード保護。指定しないと、パスワード保護しません。ただし、画像自体はweb表示可能な場所にあるので、あくまでも簡易です。

以下のように複数のアルバム情報を指定した場合は、lightbox.php?num=1 というようにnum=アルバム番号で、それぞれのアルバムを表示します。

  $album[0] = array(
    "title" => "アルバム1", 
    "subtitle" => "このアルバムの説明",
    "img_path" => "./photos/album1",
    "password" => "album1password" );

  $album[1] = array(
    "title" => "アルバム2", 
    "subtitle" => "二番目のアルバムの説明",
    "img_path" => "./photos/album2",
    "password" => "" );

以上、かなり短時間で作った適当スクリプトですが、わりと役立ってます。というか、lightbox.js がほとんど重要なことをやってくれるのですが(笑)

画像の編集の方法

デジカメだと一度に100枚とか軽く撮影してしまうので、まとめて処理するためにImage Ready のドロップレットを使っています。

写真をweb用に縮小するドロップレット(Droplet)

自分のWEBサイトに表示する写真のサイズは、縦写真は横幅を250pxに、横長の写真は横幅を500pxと決めています。それぞれのサイズに自動縮小、保存するアクションを、Adobe フォトショップに付属するImageReadyで作成します。そのアクションをデスクトップにドラッグ&ドロップして、ドロップレットを作成。

サムネイル画像を作成するドロップレット

次にサムネイル画像を作成するドロップレットも作成。これは上記のドロップレットで縮小した画像を、さらに半分に縮小して中心の120pxを切り出すことで、正方形のサムネイルを作成します。

Droplet を使う

フォトショップのファイルブラウザから複数の画像を、上記で作成した横長or縦長画像縮小のDropletにドラッグ&ドロップ。元画像の末尾が"-01.jpg"のように変更されて保存されます。

サムネイル画像を作成

上記で作成した縮小画像を、サムネイル作成ドロップレットにまとめてドラッグ&ドロップ。サムネイル画像は、"-01-01.jp"のような名前で自動保存されます。

縮小した画像とサムネイルを両方アップロード

上記で作成した画像をまとめてアップロードすると、サムネイルは"-01-01.jp"という末尾で、大きな画像は"-01.jp"とい末尾になるルールの画像になっているので、lightalbum.php の設定をそのように指定すればOK。

 

ブックマーク & はてなスター

コメント

$num = !empty($_GET['num']) ? $_GET['num'] : "0";
$num = htmlspecialchars($num);

ですが,数値以外はこないみたいなので

$num = !empty($_GET['num']) ? $_GET['num'] : "0";
$num = intval($num);

などはいかがでしょうか?
#キャストでもいいですが

Posted by: ELF at 2006年6月26日 12:51

なるほど、ちょいと修正しておきます。

Posted by: Jun Kaneko at 2006年6月29日 22:03

はじめまして。
このフォトアルバム見栄えも良く使いやすそうですね^^
ためしにローカルで試してみました。
→サムネイル表示で画像が2段目以上になるとタイトル・
サブタイトルが消えてしまうような気が??

Posted by: 旅人 at 2006年7月13日 15:48

lightboxぼくも使おうと思っています。
ちなみに、デモ : cafe Brasserie HxM Bar では、IE5でlightboxが効いていないようです。

Posted by: tanabe at 2007年3月 1日 19:07

はじめまして。
たいへん参考になりました。こんなかんじで使わせていただいています。

Posted by: cima164 at 2007年6月20日 16:25

はじめまして。
lightalbum大変便利に活用させていただいてます!
1つだけどうしてもわからないのですが、サムネイル画像の並びを昇順ではなく降順に並べ替える方法は無いでしょうか??
これが出来ればとてもうれしいのですが。。。

Posted by: TATTOO at 2007年7月19日 21:30

こんにちは。写真の並び順を、昇順と降順を変更したい場合ですが、php プログラムの中で

sort($thumbs);

という記述の部分を

rsort($thumbs);

に変更すると降順になるかなと思います。

Posted by: Jun Kaneko at 2007年7月25日 22:23

>>Jun Kaneko さま
回答ありがとうございます!
無事降順表示できました。

お手数おかけしました。(汗

Posted by: TATTOO at 2007年7月26日 16:11

はじめまして。
大変気に入り使わせて頂こうと思っています。
サイトのデモでは、画像表示した際の下部の、ファイル名にAタグが設定されている様うですが、試しに作成してみた所デモの様にはできませんでした。できれば、別ルートのサイズの大きいオリジナル画像を別ページにて明けたいと思っています。
不勉強で申し訳ありませんが、画像表示下部の、ファイル名にAタグの設定方法を教えて頂けないでしょうか?

Posted by: takutaku at 2008年3月18日 05:14

こんにちは。画像下のリンクですが、実はこちらはLightboxのソースコード自体を直接編集してしまっています。ちょっと解説は難しいのですが、以下の改変後のスクリプトがうまく動くようでしたら、お使いください。

http://www.tagging.jp/album/lightbox/js/lightbox.js

Posted by: Jun Kaneko at 2008年3月20日 18:41

こんにちは。便利に使わせていただいており、感謝しています。
最新版のLightbox v2.04ではファイル構成が一部変わっているようで、lightalbum.php内の74行目辺りに以下の記述を追加する必要があるようです。
lightbox/js/builder.js" >
また、lightbox.js内のパーツ画像読込み部分の記述を数箇所「images/」→「lightbox/images/」に変更する必要がありました。

Posted by: YKT at 2008年7月31日 16:46

ありがとうございます。注意書きを追記させていただきいました!

Posted by: jun at 2008年8月 5日 20:07

始めまして。
lightboxのグループ化の記述が面倒なので(^^;)こちらのphpの導入を考えています。
1つ、ご相談なのですが、グループ化された画像の一番最初のサムネイルのみを表示して2枚目以降はスライドのみで表示することは可能でしょうか??php、scriptがわからないため、不可解な質問をしているかも知れませんが、もし可能であれば、方法を教えていただければと思い、書き込みさせていただきました。
よろしくお願いいたします。

Posted by: ハルカ at 2008年8月22日 20:43

こんにちは。Lightboxが認識をするのが というaタグの部分だけなので、中身のを削除してしまえば、サムネイルは表示されずにスライドのみで表示できるかもしれません。あとは、lightbox の画像の配列をjavascriptで追加することも可能かと思いますが、こちらは javascript の知識が必要かな〜と思います。

Posted by: jun at 2008年9月 2日 15:34

英語だけのコメントは、スパムフィルターではじかれてしまうので、日本語でのコメントをお願いします。

追加情報(必須ではありません)

(ページには表示されません)

Yes No

トラックバック

トラックバックURL

ブログ記事の情報

このページへのリンク

このブログを

作成日 : 2006年6月25日 22:54