忍者ブログ
  • 2017.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2017.12
icon2png(改)
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)'
PR
【2012/11/25 09:24 】 | gimp | 有り難いご意見(0)
                                    
icon2png
gimpを使ってiconからpngに落とすScript-Fuを作ってみた。

icon2png

(define (convert-layer-file image filename tattoos idx)
(let*
(
(draw (car (gimp-image-get-layer-by-tattoo image (aref tattoos idx))))
(fn (string-append filename (number->string idx) ".png"))
(transparent (car (gimp-color-picker image draw 0 0 FALSE FALSE 0)))
)
(file-png-save RUN-NONINTERACTIVE
image
draw
fn
fn
0
9
0
0
0
0
0

)
(if (> idx 0)
(convert-layer-file 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))
)
(if (> colors 0)
(gimp-convert-indexed image NO-DITHER MAKE-PALETTE colors TRUE FALSE ""))
(convert-layer-file image filename (cadr tatooarr) (- (car tatooarr) 1))
(gimp-image-delete image)
))
(icon2png "t.ico" 0)
(gimp-quit 0)



コマンド

cat icon2png | gimp -i -b -
【2012/11/24 15:06 】 | gimp | 有り難いご意見(0)
                                    
| ホーム |