icon2pngを改良してみた。
インデックスカラーを指定した場合、gimpはiconの構成をレイヤーに落とすため
すべて同じパレットを指定してしまう不具合。
例えばレイヤー1が赤1色、レイヤー2が白一色の場合
インデックスカラー1色とすれば、赤と白で画像が2つ出きるはずが
ピンク色で2つできてしまう。
なお、インデックスカラーを決定するのはRGB→インデックスとしたタイミングのみで
レイヤーを後から追加してもインデックスカラーは再計算されない。
このためRGBに戻して追加した後にインデックスカラーにする必要があった。
~/.gimp-2.6/scripts/icon2png.scm
(define (convert-layer-file imagenew colors image filename tattoos idx)
(let*
(
(drawable (car (gimp-image-get-layer-by-tattoo image (aref tattoos idx))))
(fn (string-append filename (number->string idx) ".png"))
(drawablenew (car (gimp-layer-new-from-drawable drawable imagenew)))
)
(print idx)
(print fn)
(gimp-image-add-layer imagenew drawablenew 0)
(if (> colors 0)
(gimp-convert-indexed imagenew NO-DITHER MAKE-PALETTE colors TRUE FALSE "")
)
(file-png-save RUN-NONINTERACTIVE
imagenew
drawablenew
fn
""
0
9
0
0
0
0
0
)
(gimp-image-remove-layer imagenew drawablenew)
(if (> colors 0)
(gimp-convert-rgb imagenew)
)
(if (> idx 0)
(convert-layer-file imagenew colors image filename tattoos (- idx 1))
)
)
)
(define (icon2png filename colors)
(let*
(
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(tatooarr (gimp-image-get-layers image))
(imagenew (car (gimp-image-new (car (gimp-image-width image)) (car (gimp-image-height image)) RGB)))
)
;(gimp-display-new image)
(convert-layer-file imagenew colors image filename (cadr tatooarr) (- (car tatooarr) 1))
(gimp-image-delete image)
(gimp-image-delete imagenew)
)
)
コマンド
gimp -i -b '(icon2png "t.ico" 2)' -b '(gimp-quit 0)'
[0回]
PR