php + GD :: jpg画像を半透明DVDパッケージのpng画像に合成する
2009/8/13 (Thu) at 2:34 pm
deviantARTに半透明クリアのDVDパッケージのPSD画像てのがあって、manichoさんという方がつくったもんで、こりゃきれいだなーと思いました。PSDをダウンロードできます。レイヤーがわかれているのでPhotoshopで好きな画像に差し替えて遊べます。
これをPhotoshopでやるんでなくGDでやればパパッとできるなと思ってコードを書いてみました。この作品のダウンロード数はすごい数字なので既にだれかがやってる気がしますが、勉強がてらやってみようかなと。
以下のふたつの画像を合成して↓
これはpng

これはjpg
こうなっちゃうというもんです↓
pngで出力

コードはこちら↓
generatePng()という関数に渡す引数は5つ。2つは要指定。3つは指定しなくてもよい。元となる2つの画像は、半透明の方はpngで、中に入れる画像はjpgっちゅうのがキメです。
$jpg (必ず指定する)
jpg画像へのパス。大きさはなんでもいいが、350 x 500に縮小される仕様なので、それより小さいとへんなアキができちゃう。タテヨコ比は強制的に350:500になる。
$pkg (必ず指定する)
半透明パッケージのpng画像へのパス。上のリンク先からダウンロードしたpsdから必要なレイヤーだけを取り出して440 x 550に縮小したもの。コレです → pkg.png (58kb)
$dist (optional)
合成されたpngファイルの保存先パス。無指定だと画像出力のヘッダがついてpng画像として出力します。$distを指定するとヘッダ出力せず、pngファイルを保存します。
$w (optional)
$jpgのwidth。無指定だとgetImageSize関数で取得します。
$h (optional)
$jpgのheight。無指定だとgetImageSize関数で取得します。
使い方サンプル。こんなかんじでやるとcreated.pngというファイルができます↓
$jpg = './mypic.jpg';
$pkg = './pkg.png';
$dist = './created.png';
generatePng($jpg, $pkg, $dist);
出力されるpngは常に440 x 550の大きさです。使用する目的に合わせてスクリプトを改変してください。
注意点。
GDでpngを出力するとバージョンの関係からか背景がキレイに透明にならないとかうまくできないことがあります。うちの環境は以下です。
PHP Version 5.2.10
GD Version bundled (2.0.34 compatible)
ver.違いで、きれいに出力されないとかあるかもです。だめな人は自分でジタバタしてください。それにしてもGDの関数って意味不明のヤツが多い!imageAlphaBlendingとか、imageSaveAlphaとか、説明を読んでもよくわからない。どこかにわかりやすいチュートリアルはないですかね。ご存知の方はご教授下さい。
さて、これで画像合成できたわけですが、ここまでできたらこんどはamazonのapiと組み合わせて使いたくなりませんか。それでまぁつくってみたのがコレです↓
と紹介したいオンラインツールがあるんですが、これってamazonの規約に反するのかどうかよくわかんないのでまだ非公開にしときます。asinコードを入れると画像を取得してこのスクリプトを通した結果を返すというもんで、なかなか便利でおもしろいんですが... 。いつか公開するかもしれません。
コメント・プリーズ!
PROFILE![]()
藤居ヒロヤ。ウェブデザイナー/ウェブディレクター。ウェブデザインオフィス、3OT NET主宰。名古屋市中区。「優しいデザイン」「激しいデザイン」「正しいデザイン」「セクシーなデザイン」「泣けるデザイン」「もっともなデザイン」... 。あなただけのウェブデザインを丹精込めておつくり致します。見積り依頼等、お気軽にお問い合わせ下さい。
- www. http://www.3ot.net/
- email. admin [atmark] 3ot.net
- phone. 052 323 7376
RECENT ENTRIES![]()
- トウモロコシがおいしい
- ダイコクドラッグが近所にできた
- ライブドアのBLOGOSをよく読みます
- jQuery :: 画像のリロード
- タムの絵
- Javascript :: ecl.jsにながらくお世話になりました
- サーバ移転&ブログのデザインをすこし変えました
- php :: 正規表現 :: 名前つきキャプチャというのを習った
- jQuery :: ネストしたリスト + ui.sortable.js
- jQuery :: event delegationてナニ?
RECENT COMMENTS![]()
- トウモロコシがおいしい [4]
- ふ (07/09)
- いら (07/03)
- ふ (07/03)
- いら (07/03)
- php :: ファイルを強制的にダウンロードさせる [9]
- ふ (05/26)
- ふ (05/26)
- ふ (05/26)
- esperia (05/26)
- esperia (05/26)
- ふ (05/25)
- esperia (05/25)
- ふ (04/14)
- とほりすがり (04/13)
- タムの絵 [2]
- ふ (12/05)
- いら (12/04)
TOOLS![]()
- s-box.js
- Link2WikipediaEncoder
- QR_CodeGenerator
- PagerankChecker
- IntrocucePhpCodeOnBlog
- FaviconGenerator
- Whois
- SiteThumbnailGenerator (Beta)
- EmailAddressEncoder (Legacy!)
BOOKMARKS![]()
RESOURCES![]()
- 99designs
- COMPUTER ARTS
- CPAN
- PHP標準関数逆引き辞典
- SMASHING MAGAZINE
- UNIXコマンド
- ajaxload.info
- deviantART
- deviantART :: PS Brushes
- deviantART :: PS Shapes
- fotosearch.com
- hotscripts.com
- hotscripts.com :: php
- iconlet.com
- jQuery Reference
- php.net :: 関数レファレンス
- psbrushes.net
- turnkeyforms.com
ARCHIVE![]()
- 2010年7月 (1)
- 2010年1月 (1)
- 2009年12月 (2)
- 2009年11月 (3)
- 2009年10月 (1)
- 2009年9月 (9)
- 2009年8月 (7)
- 2009年6月 (7)
- 2009年5月 (1)
- 2009年4月 (8)
- 2009年3月 (1)
- 2009年1月 (1)
- 2008年12月 (3)
- 2008年11月 (1)
- 2008年4月 (1)
- 2008年1月 (3)
- 2007年12月 (1)
- 2007年10月 (3)
- 2007年9月 (5)
- 2007年8月 (4)
- 2007年7月 (13)
- 2007年6月 (22)
- 2007年5月 (30)
- 2007年4月 (15)
- 2007年3月 (12)
- 2007年2月 (7)
- 2007年1月 (16)
- 2006年12月 (23)
- 2006年11月 (9)
- 2006年10月 (3)
- 2006年9月 (2)
- 2006年8月 (6)
- 2006年7月 (4)
- 2006年6月 (6)
- 2006年5月 (10)
- 2006年3月 (17)
- 2006年2月 (8)
- すべての投稿 (266)

