スキップメニュー:コンテンツへナビゲーションへ

乱雑モックアップ   らんざつ[乱雑] (名・形動)[文]ナリ 入り乱れていること。乱れていて秩序がないこと。また、そのさま。

photoshopのスウォッチ(.aco)を色相で並び替えるようにしたい

2009年 12月 20日 |

photoshop, php |

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリーのブックマーク数

20091227|とりあえずのが出来たのでアップしまんた。
暫定版 photoshopのスウォッチ(.aco)を色相で並び替えるようにした
————————-

何をどうしたらそんな事が出来るようになるのかわからんので、やってる事がずれてるかもしれんけどもメモ。

.acoの中身を見たい、
バイナリエディタで見るしかないようだ。
Stirlingを使ってみる。

16進数?なにそれ、まいったな。

適当なスウォッチを何個か作って.acoで書き出して、見比べてみて判ったこと

#508b94 を2個登録したスウォッチをバイナリエディタで開くと以下の通り

00 01 00 02 00 00 50 50 8B 8B 94 93 00 00 00 00
50 50 8B 8B 94 93 00 00 00 02 00 02 00 00 50 50
8B 8B 94 93 00 00 00 00 00 08 30 B9 30 A6 30 A9
30 C3 30 C1 00 20 00 31 00 00 00 00 50 50 8B 8B
94 93 00 00 00 00 00 08 30 B9 30 A6 30 A9 30 C3
30 C1 00 20 00 32 00 00

2色目を#945066に変更したスウォッチは以下

00 01 00 02 00 00 50 50 8B 8B 94 93 00 00 00 00
94 93 50 50 66 66 00 00 00 02 00 02 00 00 50 50
8B 8B 94 93 00 00 00 00 00 08 30 B9 30 A6 30 A9
30 C3 30 C1 00 20 00 31 00 00 00 00 94 93 50 50
66 66 00 00 00 00 00 08 30 B9 30 A6 30 A9 30 C3
30 C1 00 20 00 32 00 00

最初の00 01と最後の00 00は定型ぽい
次の00 02が登録されてる色の数、
3つ登録してあるスウォッチは00 03で、58個登録されてるスウォッチは00 3Aだった。
(2進数、8進数、10進数、16進数相互変換で変換させてもらってます。)

次の00 00がよく分からないけど区切り?
その後の50 50 8B 8B 94 93がhex値、前半2桁だけが有効?で00 00で閉じる?

00 08 30 B9 30 A6 30 A9 30 C3 30 C1 00 20 00

も区切りかな

hex値ぽいところを以下のようにガーっと00にしてもちゃんと読み込む

00 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 02 00 02 00 00 50 50
8B 8B 94 93 00 00 00 00 00 08 30 B9 30 A6 30 A9
30 C3 30 C1 00 20 00 31 00 00 00 00 94 93 50 50
66 66 00 00 00 00 00 08 30 B9 30 A6 30 A9 30 C3
30 C1 00 20 00 32 00 00

02 00 02 00からが本当の色設定?

phpのテスト

<!-- rgb.html -->
<form id="form1" name="form1" method="post" action="rgb.php">
<ul><li><label for="rr">r</label>:<input type="text" name="rr" id="rr" max="3" /></li>
<li><label for="gg">g</label>:<input type="text" name="gg" id="gg" max="3" /></li>
<li><label for="bb">b</label>:<input type="text" name="bb" id="bb" max="3" /></li></ul>
<input type="submit" />
</form>
// rgb.php
$r=hexdec($_POST["rr"]);
$g=hexdec($_POST["gg"]);
$b=hexdec($_POST["bb"]);
//
$max=max($r,$g,$b);
$min=min($r,$g,$b);
print "max:".$max."<Br>";
print "min:".$min."<Br>";
print $_POST["rr"]."<Br>";
print $_POST["gg"]."<Br>";
print $_POST["bb"]."<Br>";

if($max==$min){
	$hue=0;
}
else if($g==$max) {
$hue=($b-$r)/($max-$min)*60+120;
}
else if($b==$max) {
$hue=($r-$g)/($max-$min)*60+240;
}
else if($g<$b){
$hue=($g-$b)/($max-$min)*60+360;
}
else{
$hue=($g-$b)/($max-$min)*60;
}
print "hue値".$hue;

でhexからhueを取り出せた。

あと必要な事

.acoの色の格納のされ方と範囲指定しての取り出し方
phpでバイナリを読む方法
とか?
方向はあってるんのでしょうか…

とりあえずphpで読み込んでみた

辞書を引きながら、こんな感じに。

$fname="945066.aco";
$aco=fopen($fname,"rb");
$str=fread($aco,filesize($fname));
$str=bin2hex($str);
echo $str;

$aco_ar=explode('0000',$str);
print_r($aco_ar);

fclose($aco);

出力結果

00010002000050508b8b949300000000949350506666000000020002000050508b8b949300000000000830b930a630a930c330c1002000310000000094935050666600000000000830b930a630a930c330c1002000320000Array
(
    [0] => 00010002
    [1] => 50508b8b9493
    [2] =>
    [3] => 949350506666
    [4] => 00020002
    [5] => 50508b8b9493
    [6] =>
    [7] => 000830b930a630a930c330c100200031
    [8] =>
    [9] => 949350506666
    [10] =>
    [11] => 000830b930a630a930c330c100200032
    [12] =>
)

メモ
explode(‘区切り文字’,文字列);
explode(’0000′,$str);

0000で区切ったけど、これだと#000が登場した時に区切り文字になってしまう。

メモ2
どうゆう風にしてけばいいんだろ
最初の2バイトを飛ばして、次の2バイトに格納されてる色の数を取得
前半00 00 RR RR GG GG BB BB 00 00で1セット
RR RRなどそれぞれの後半2文字を飛ばす
000830b930a630a930c330c1002000の前に出てくるRRRR GGGG BBBBを書き換える


1件のコメント »

  1. [...] photoshopのスウォッチ(.aco)を色相で並び替えるようにしたいの続き。 [...]

    ピンバック by 続 photoshopのスウォッチ(.aco)を色相で並び替えるようにしたい « 乱雑モックアップ — 2009年12月22日 @ 16:49

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする

You can add images to your comment by clicking here.




Back to Top↑

あわせて読みたい

Back to Top↑

RSS 乱雑モックアップのフィード

Copyright © 乱雑モックアップ. All Rights Reserved.