写真の公開するには、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);
などはいかがでしょうか?
#キャストでもいいですが
なるほど、ちょいと修正しておきます。
はじめまして。
このフォトアルバム見栄えも良く使いやすそうですね^^
ためしにローカルで試してみました。
→サムネイル表示で画像が2段目以上になるとタイトル・
サブタイトルが消えてしまうような気が??
lightboxぼくも使おうと思っています。
ちなみに、デモ : cafe Brasserie HxM Bar では、IE5でlightboxが効いていないようです。
はじめまして。
たいへん参考になりました。こんなかんじで使わせていただいています。
はじめまして。
lightalbum大変便利に活用させていただいてます!
1つだけどうしてもわからないのですが、サムネイル画像の並びを昇順ではなく降順に並べ替える方法は無いでしょうか??
これが出来ればとてもうれしいのですが。。。
こんにちは。写真の並び順を、昇順と降順を変更したい場合ですが、php プログラムの中で
sort($thumbs);
という記述の部分を
rsort($thumbs);
に変更すると降順になるかなと思います。
>>Jun Kaneko さま
回答ありがとうございます!
無事降順表示できました。
お手数おかけしました。(汗
はじめまして。
大変気に入り使わせて頂こうと思っています。
サイトのデモでは、画像表示した際の下部の、ファイル名にAタグが設定されている様うですが、試しに作成してみた所デモの様にはできませんでした。できれば、別ルートのサイズの大きいオリジナル画像を別ページにて明けたいと思っています。
不勉強で申し訳ありませんが、画像表示下部の、ファイル名にAタグの設定方法を教えて頂けないでしょうか?
こんにちは。画像下のリンクですが、実はこちらはLightboxのソースコード自体を直接編集してしまっています。ちょっと解説は難しいのですが、以下の改変後のスクリプトがうまく動くようでしたら、お使いください。
http://www.tagging.jp/album/lightbox/js/lightbox.js
こんにちは。便利に使わせていただいており、感謝しています。
最新版のLightbox v2.04ではファイル構成が一部変わっているようで、lightalbum.php内の74行目辺りに以下の記述を追加する必要があるようです。
lightbox/js/builder.js" >
また、lightbox.js内のパーツ画像読込み部分の記述を数箇所「images/」→「lightbox/images/」に変更する必要がありました。
ありがとうございます。注意書きを追記させていただきいました!
始めまして。
lightboxのグループ化の記述が面倒なので(^^;)こちらのphpの導入を考えています。
1つ、ご相談なのですが、グループ化された画像の一番最初のサムネイルのみを表示して2枚目以降はスライドのみで表示することは可能でしょうか??php、scriptがわからないため、不可解な質問をしているかも知れませんが、もし可能であれば、方法を教えていただければと思い、書き込みさせていただきました。
よろしくお願いいたします。
こんにちは。Lightboxが認識をするのが というaタグの部分だけなので、中身のを削除してしまえば、サムネイルは表示されずにスライドのみで表示できるかもしれません。あとは、lightbox の画像の配列をjavascriptで追加することも可能かと思いますが、こちらは javascript の知識が必要かな〜と思います。
はじめまして。
とても気に入り使わせて頂こうと思ってます。
希望なんですが拡大画像の写真の下に
Image 13 of 19と番号がある場所にコメントなど入れたいと思っているのですが簡単入れることは可能でしょうか?おしえて頂けたらうれしいのですが‥。