GIMPでイメージのサイズ変更、別ファイルからの貼付け、自由選択などの自動化

  • 0
    Like
  • 0
    Comment

    GIMPで次のような事を繰り返していました。

    • [画像の生成]-[クリップボードから](Shift + Ctrl + V
    • 範囲選択(毎回同じ場所)
    • [画像]-[キャンパスを選択範囲に合わせる]
    • 別のイメージを編集中の画像に貼付け(毎回同じ場所)
    • 自由選択(なげ輪)で範囲選択(毎回同じ場所)
    • [編集]-[消去](Delete
    • ファイル保存

    コレはさすがに自動化したいなと思い、Script-Fuに手をつけました。

    ソースコード

    次のようなコードです。

    test01.scm
    (define (
        Test01
        img1
        lay1
        )
    
        (let*
            (
                (filename "C:\\Hoge.xcf")
                (img2 (car (gimp-file-load 1 filename filename)))
                (lay2 (car (gimp-image-active-drawable img2)))
                (floating 0)
            )
    
            ;Undoグループの開始
            (gimp-undo-push-group-start img1)
    
            ;キャンバスサイズの変更
            (gimp-image-resize img1 552 808 -1196 -206)
            ;一部上書き用のイメージの範囲選択
            (gimp-rect-select img2 0 0 269 36 REPLACE FALSE 0)
            ;コピー
            (gimp-edit-copy lay2)
            ;ペースト
            (set! floating (car (gimp-edit-paste lay1 FALSE)))
            ;ペーストしたイメージの位置移動
            (gimp-layer-set-offsets floating 283 772)
            ;選択領域を固定
            (gimp-floating-sel-anchor floating)
            ;アルファチャンネルの追加
            (gimp-layer-add-alpha lay1)
            ;自由選択
            (gimp-free-select img1 6 #(538 808 552 792 552 808) 2 FALSE FALSE 0)
            ;選択範囲の消去
            (gimp-edit-clear lay1)
            ;選択範囲の解除
            (gimp-selection-none img1)
    
            ;undoグループの終了
            (gimp-undo-push-group-end img1)
    
            ;出力
            (gimp-displays-flush)
        )
    )
    
    (script-fu-register
        "Test01"
        "<Image>/Script-Fu/Test/Test01"
        "Edit image"
        "R"
        "R"
        "2017"
        ""
        SF-IMAGE "Image" 0
        SF-DRAWABLE "Drawable" 0
    )
    

    決まった用途なので、座標などそのまま記述しています。

    Python-Fuで書いたもの(現在中途)

    折角なのでPython-Fuでも書いてみようとしましたが、一部うまく動かせず、現在途中で断念していますが、その途中のコードです。(後々で直せたら直す予定です)

    #!/usr/bin/python
    # coding: utf-8
    from gimpfu import *
    
    def plugin_main(img1, lay1):
        #Undoグループの開始
        #pdb.gimp_undo_push_group_start(img1)
        #上書き用ファイル
        filename = "C:\\Hoge.xcf"
        img2 = pdb.gimp_file_load(filename, filename)
        lay2 = pdb.gimp_image_active_drawable(img2)
        #キャンバスサイズの変更
        img1.resize(552, 808, -1196, -206)
        #上書き用のイメージの範囲選択
        pdb.gimp_rect_select(img2, 0, 0, 269, 36, 2, FALSE, 0)
        #コピー
        pdb.gimp_edit_copy(lay2)
        #ペースト
        floating = pdb.gimp_edit_paste(lay1, FALSE)
        #ペーストしたイメージの位置移動
        pdb.gimp_layer_set_offsets(floating, 283, 772)
        #フローティングの固定
        pdb.gimp_floating_sel_anchor(floating)
        #アルファチャンネルの追加
        lay1.add_alpha()
        #フリー選択
        #pdb.gimp_free_select(img1, 6, [538, 808, 552, 792, 552, 808], 2, FALSE, FALSE, 0)
        #選択範囲の消去
        #pdb.gimp_edit_clear(lay1)
        #選択範囲の解除
        #pdb.gimp_selection_none(img1)
        #undoグループの終了
        #pdb.gimp_undo_push_group_end(img1)
    
    register(
            "Test01",
            "Test",
            "Test",
            "R",
            "R",
            "2017",
            "<Image>/Script-Fu/Python/Test01",
            "*",
            [],
            [],
            plugin_main)
    
    main()
    

    コメントアウトしている部分は、動かすとエラーとなってしまう部分で、原因を特定できていません。
    Pythonとしての構文なのか、パラメータなどのミスなのか・・・
    なにせ、Pythonは素人で、最初に日本語コメントを書いていて動かない原因がわからなかったくらいですから。おいおい直していきたいと思います。

    参考にした記事など

    以上