アストラルプリズム

PC、スマホ、ゲームなどの備忘録と日記

GIMPでテキストボックスの後ろを塗りつぶすプラグインを作った

テキストレイヤーの下に指定した色でテキストレイヤーの文字の分だけ四角で塗りつぶしを作るプラグイン
漫画の翻訳や書き直し等でテキストレイヤーの下の文字を隠したい時に使う。
文字だけでは隠し切れない場合の為に一回り大きく透明なふちが着くようになっている。
また、塗りつぶしで吹き出しの端が消えないように丸く角を取れるようにした。
どこの色で塗るか?の「背景の色」はテキストレイヤー真ん中のすぐ上の色を使って塗りつぶす。

インストール方法

以下をコピペしてファイル名をadd_background_fill.pyにしてutf-8で保存後、GIMPプラグインフォルダーに入れる。
GIMPのメニューの「レイヤー」→「add background fill 」をクリックすると動作する。
プラグインフォルダーはGIMPを起動し「編集」→「設定」→「フォルダー」→「プラグイン」で確認の事。

#!/usr/bin/python
# -*- coding: utf-8 -*-
from gimpfu import *

def add_background_fill(which_color, size):
	#開いているGIMPのファイルの情報取得
	image = gimp.image_list()[0]
	#アクティブレイヤーを取得
	act_layer = image.active_layer
	#選択範囲を解除
	pdb.gimp_selection_none(image)
		#アクティブレイヤーの位置取得	
	act_position = pdb.gimp_image_get_item_position(image,act_layer)
	new_position = act_position + 1
	#レイヤーを複製
	new_layer = pdb.gimp_layer_copy(act_layer,TRUE)
	image.add_layer(new_layer,new_position)
	#レイヤーの順番を指定
	pdb.plug_in_autocrop_layer(image,new_layer)
	name = "塗りつぶしレイヤー"
	width   = new_layer.width
	height  = new_layer.height

	new_layer.name = name

	# copyしたレイヤーの位置取得
	x0,y0 = pdb.gimp_drawable_offsets(new_layer)

	# 四角での選択範囲設定
	pdb.gimp_image_select_rectangle(image, 2, x0, y0, width, height)
	# 選択範囲の角を丸くする
	pdb.script_fu_selection_rounded_rectangle(image, new_layer, size, 0)  
	if which_color == "background":
		#背景色で塗りつぶし
		pdb.gimp_edit_fill(new_layer, BACKGROUND_FILL)
	elif which_color == "foreground":
		#前景色で塗りつぶし
		pdb.gimp_edit_fill(new_layer, FOREGROUND_FILL)
	else:
		#一番下のレイヤーの情報取得
		last_layer = image.layers[-1]
		#指定した場所の色を取得
		new_color = pdb.gimp_color_picker(image,last_layer,x0 + act_layer.width / 2,y0+1,TRUE,FALSE,1)
		#前景色を保存
		old_color = pdb.gimp_context_get_foreground()
		#指定した場所の色を前景色にする
		pdb.gimp_context_set_foreground(new_color)
		#前景色で塗りつぶし
		pdb.gimp_edit_fill(new_layer, FOREGROUND_FILL)
		#前景色を元の色に戻す
		pdb.gimp_context_set_foreground(old_color)
	#レイヤーサイズを1.3倍に変更
	pdb.gimp_layer_resize(new_layer,width*1.3,height*1.3,width*0.3/2,height*0.3/2)
	#選択範囲を解除
	pdb.gimp_selection_none(image)

	
register(
	"add_background_fill",
	"add background fill",
	"add background fill",
	"katsumi",
	"katsumi",
 	"2022",
	"add background fill",
	"",
	[
		(PF_RADIO, "which_color", "どこの色で塗るか?", "background",
          			(("前景色","foreground"), ( "背景色","background"),("背景の色","new_space_color"))),
		(PF_INT, "size", "角を丸めるサイズ", 10),
	],
	[],
	add_background_fill,
	menu = "<Image>/Layer" )

main()