社内の方も社外の方もこんばんは。2015年度新卒入社したmekkooです。
Advent Calendarの季節です。街には色があふれていますね。
僕はひたすら画面を見つめているのですが、最近感動したUIがあります。
iTunesに最近搭載された...
美しい。かっこいい!
没頭できる。アルバムアートをちゃんと設定しようという気になる。
PHPで再現して、メディアに取り入れてみたい…
PHPでClassを作ってみよう!
画像色抽出どうすればいいか考えた
- 画像をオブジェクトとして読み込んで
- phpなら、
imagecreatefrom*()
関数
- phpなら、
- 左上から右下へ、ピクセルを走査していく?
- 大きな画像の場合、10px毎とかでスキップしながらでもいいかも
- 最終的に、カラーコードの平均を取る?
実際にやってみた
<?php
class SenseOfColor
{
private $filepath;
public function __construct($filepath)
{
$this->filepath = $filepath;
}
public function getAverageColor()
{
//画像(今回はPNG)をオブジェクトとして読み込んで
$img = imagecreatefrompng($this->filepath);
$imgX = imagesx($img); //ヨコと
$imgY = imagesy($img); //タテのpx数を取得して
$imgXY = $imgX*$imgY; //掛けあわせて
$rSum = '';
$gSum = '';
$bSum = '';
for ($y = 0; $y < $imgY; $y++) { //左上から右下にかけてfor文で走査
for ($x = 0; $x < $imgX; $x++) {
$rgb = imagecolorat($img, $x, $y); //rgbコードを取得して
$r = ($rgb >> 16) & 0xFF; //赤を10進数に
$g = ($rgb >> 8) & 0xFF; //緑を10進数に
$b = $rgb & 0xFF; //青を10進数に
$rSum += $r; //それぞれを合算していく...
$gSum += $g;
$bSum += $b;
}
}
//合算された赤(R),緑(G),青(B)をそれぞれ画像の合計px数で割り、
//再度16進数に変換した上で出力
return '#'.dechex($rSum/$imgXY).dechex($gSum/$imgXY).dechex($bSum/$imgXY);
}
}
class SenseOfColorFactory
{
public static function create($filepath)
{
return new SenseOfColor($filepath);
}
}
//任意のPNG画像を指定すると...
$target = SenseOfColorFactory::create('img/foobar.png');
//平均色のカラーコードを返せる
print($target->getAverageColor());
上記コードで実際にアルバムアートの色抽出をやってみる
スーベニア / スピッツ
「正夢」「春の歌」などが収録されたスピッツ屈指の名作。
もう10年前か!今年も終わる...
うん、まずまずの近さ
Light Wave' 14 / V.A.
最近よく聞いている Ano(t)raks レーベルのコンピレーションアルバム。
Web上で公式に全曲配布されている!! メロウで素敵なシティ・ポップ集。
https://anotraks.bandcamp.com/album/light-wave-14-vol-3
素敵な感じ!
LDK Lounge Designers Killer / capsule
ネオ渋谷系の盟主 capsule の最高にかわいいアルバム。
空飛ぶ都市計画
はスタジオジブリがMVを制作したことでも話題になりました。
青春が蘇る...
上3つのような単色ならうまくいくが…
BEST OF TRATTORIA YEARS / Bridge
90年代の前半に活躍していた、アコーディオン鳴り響くギターポップバンド。
カジヒデキが過去在籍していたことでも知られる。
あれ?色が濃いぞ!せっかくの淡い黄色が…
`85 / Pizzicato Five
ピチカート・ファイヴが佐々木麻美子さんをボーカルに据える4人構成(なのにファイヴ)だった時代の音源の再販品。
最高のウィスパーボイスを聴いて完全な現実逃避ができる。
今度は薄すぎ!
何故ならば... 平均色を取ってるだけだから、色が拮抗している状況だとうまくいかない
iTunesはもっと頭良かったよ!
今後はgetAverageColor()
以外のメソッドを追加して徐々にiTunesに近づけていきたい
以上、好きな音楽紹介でした
現時刻はAdvent Calendar担当日の23:22です。