GIMP の Python-Fu でウォーターマークの自動付加

100 個近くの一組のファイル画像群のウォーターマークを一斉更新する必要が生じたので、この機に GIMP の Python-Fu を使ってみることにした。

  • エラーがない状態でないと、Python-Fu スクリプトとしての認識自体がされない。
  • Python-Fu スクリプトとして認識させるために、一定のフォーマットを整える必要がある。
  • Python 2.x に基いているようなので、Unicode の扱いや str.format など 3.x と違う点に留意しなければならない。
  • macOS では ~/Library/Application Support/GIMP/2.10/plug-ins に置く。
  • 上述のように、そもそもデバッグが不可能なので、スクリプトとして正常に認識されるフォーマットのスケルトン状態から一つ一つの機能を確実に実装して確認していくやり方でスクリプトを完成させていくのが適切な開発手法だろう。
  • 使える機能(pdb.*)のリファレンスはヘルプ > プロシージャーブラウザーにある。

# -*- coding: utf-8 -*-

from gimpfu import *

WATERMARK = 'https://www.scaredeer.com'

def watermark(infile, outfile):
    pdb.gimp_context_set_foreground((255, 255, 255, 255)) # RGBA
    image = pdb.gimp_file_load(infile, 'background')
    pdb.gimp_image_scale(image, 350, 600) # 縮小
    background = pdb.gimp_image_merge_visible_layers(image, EXPAND_AS_NECESSARY)
    pdb.gimp_rotate(background, 0, pi) # 180°回転
    text_layer = pdb.gimp_text_layer_new(image, unicode(WATERMARK, 'utf-8'), 'Arial Bold', 18, 0)
    pdb.gimp_layer_set_opacity(text_layer, 66)
    pdb.gimp_layer_set_offsets(text_layer, 37, 280)
    image.add_layer(text_layer)
    merged_layer = pdb.gimp_image_merge_visible_layers(image, EXPAND_AS_NECESSARY)
    pdb.file_png_save2(image, merged_layer, outfile, outfile, 0, 9, 0, 0, 0, 0, 0, 0, 1)
    # interlacing (Adam7), compression level (0-9), save background color, save gamma,
    # save layer offset, save resolution, save creation time, save comment,
    # save color values from transparent pixels
    gimp.Display(image)

def plugin_main(image, drawable):
    (...)
    watermark(infile, outfile)

register(
    'watermark',
    'Put watermarks on images.',
    'Put watermarks on images.',
    'Scaredeer',
    'Scaredeer',
    '2020-07-03',
    '<Image>/Filters/Languages/Python-Fu/Watermark',
    '',
    [],
    [],
    plugin_main
)

main()

コメント

このブログの人気の投稿

EP-805A 廃インク吸収パッド交換

WZR-HP-AG300H with OpenWrt

この Apple ID は、App Store で使用されたことがありません