アストラルプリズム

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

UWSCのキーマクロでGIMPで角い縁取りをつける方法

以下の三つの方法でのキーマクロ。
・選択範囲の境界線を描画
・ドロップシャドウ
・テキストをパスに

「選択範囲の境界線を描画」を使う場合

出てきたウィンドウで「線スタイルを選択して描画」にチェック

ACW(GETID("GIMP","gdkWindowToplevel",-1))
KBD(VK_ESC,CLICK)

KBD(VK_SHIFT,DOWN)
KBD(VK_CTRL,DOWN)
KBD(VK_D,CLICK)
KBD(VK_SHIFT,UP)
KBD(VK_CTRL,UP)

KBD(VK_ALT,DOWN)
KBD(VK_L,CLICK)
KBD(VK_ALT,UP)

SLEEP(0.1)
KBD(VK_K,CLICK)
KBD(VK_L,CLICK)

KBD(VK_ALT,DOWN)
KBD(VK_L,CLICK)
KBD(VK_ALT,UP)

SLEEP(0.1)
KBD(VK_A,CLICK)
KBD(VK_P,CLICK)

KBD(VK_ALT,DOWN)
KBD(VK_E,CLICK)
KBD(VK_ALT,UP)

SLEEP(0.1)
KBD(VK_S,CLICK)

id=GETID("選択範囲の境界線を描画")
WHILE (STATUS(id, ST_TITLE)<>"")
SLEEP(0.01)
WEND

KBD(VK_SHIFT,DOWN)
KBD(VK_CTRL,DOWN)
KBD(VK_A,CLICK)
KBD(VK_SHIFT,UP)
KBD(VK_CTRL,UP)

「ドロップシャドウ」を使う場合

ドロップシャドウをGIMP側のショートカットでCTRL+Uする必要あり。
出てきた画面の設定(赤丸のところが線の太さを設定するところ)
f:id:katsumi3:20220402221128p:plain
プリセットに保存しとくと良い
f:id:katsumi3:20220402221317p:plain

ACW(GETID("GIMP","gdkWindowToplevel",-1))

KBD(VK_ESC,CLICK)

KBD(VK_SHIFT,DOWN)
KBD(VK_CTRL,DOWN)
KBD(VK_A,CLICK)
KBD(VK_SHIFT,UP)
KBD(VK_CTRL,UP)

KBD(VK_SHIFT,DOWN)
KBD(VK_CTRL,DOWN)
KBD(VK_D,CLICK)
KBD(VK_SHIFT,UP)
KBD(VK_CTRL,UP)

KBD(VK_ALT,DOWN)
KBD(VK_L,CLICK)
KBD(VK_ALT,UP)

SLEEP(0.1)
KBD(VK_K,CLICK)
KBD(VK_L,CLICK)

SLEEP(0.1)
KBD(VK_CTRL,DOWN)
KBD(VK_U,CLICK)
KBD(VK_CTRL,UP)

「テキストをパスに」を使う場合

「テキストをパスに」をGIMP側のショートカットでALT+Aにする必要あり。
出てきたウィンドウで「線スタイルを選択して描画」にチェック

ACW(GETID("GIMP","gdkWindowToplevel",-1))

KBD(VK_ESC,CLICK)

KBD(VK_SHIFT,DOWN)
KBD(VK_CTRL,DOWN)
KBD(VK_D,CLICK)
KBD(VK_SHIFT,UP)
KBD(VK_CTRL,UP)

KBD(VK_ALT,DOWN)
KBD(VK_L,CLICK)
KBD(VK_ALT,UP)

SLEEP(0.1)
KBD(VK_K,CLICK)
KBD(VK_L,CLICK)

KBD(VK_ALT,DOWN)
KBD(VK_L,CLICK)
KBD(VK_ALT,UP)

SLEEP(0.1)
KBD(VK_P,CLICK)

KBD(VK_ALT,DOWN)
KBD(VK_A,CLICK)
KBD(VK_ALT,UP)

GIMPでファイルを名前順に分け、かつ指定した容量ごとにフォルダーに分けるプラグイン

GIMPでやる必要あるのか?
自分が使う用事があって作った。拡張子ごとに分けれる。というか同じ拡張子ごとにしか分けれない仕様にしてしまった。
ファイル名にハイフンかアンダーバーがあればそれもファイルを分けるか選択することができる。
f:id:katsumi3:20220403195520p:plain

インストール方法

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

#!/usr/bin/python
# -*- coding: utf-8 -*-
import shutil, os, glob
from gimpfu import *

def organize_files_by_capacity(separation, cap_limit, extension, folder_path):
	if folder_path == "":
		gimp.quit()
	folder_path = folder_path.decode("utf-8")
	p = os.path.join(folder_path, "*" + extension)
	i = 1
	cap = 0	
	if not glob.glob(p):
		gimp.message("指定フォルダーに".decode("utf-8") + extension + "ファイルがありません".decode("utf-8"))
		gimp.quit()
	else:
		if separation == True:
			first_file_name = glob.glob(p)[0]
			first_file_basename = os.path.splitext(os.path.basename(first_file_name))[0]
			if "_" in first_file_basename:
				folder_name = first_file_basename.split("_")[0]
			elif "-" in first_file_basename:
				folder_name = first_file_basename.split("-")[0]
			else:
				gimp.message("-か_の区切り文字がありません".decode("utf-8"))
				gimp.quit()
			previous_folder_name = folder_name
			new_path = os.path.join(folder_path , folder_name + "_01")
		else:
			new_path = os.path.join(folder_path, "01")
		os.mkdir(new_path)
	
	for file in glob.glob(p):
		cap = cap + os.path.getsize(file)
		if separation == True:
			folder_name = os.path.splitext(os.path.basename(file))[0]
			if "_" in folder_name:
				now_folder_name = folder_name.split("_")[0]
			elif "-" in folder_name:
				now_folder_name = folder_name.split("-")[0]			
			if cap > cap_limit * 1000:
				i = i + 1
				new_path = os.path.join(folder_path, now_folder_name + "_" + str(i).zfill(2))
				os.mkdir(new_path)
				cap = os.path.getsize(file)
	
			elif previous_folder_name != now_folder_name:
				gimp.message("folder_name = "+ folder_name)
				gimp.message("previous_folder_name = "+ previous_folder_name)
				i = 1
				new_path = os.path.join(folder_path, now_folder_name + "_" + str(i).zfill(2))
				os.mkdir(new_path)
				cap = os.path.getsize(file)

			previous_folder_name = now_folder_name
			
		else:
			if cap > cap_limit*1000:
				i = i + 1
				new_path = os.path.join(folder_path,str(i).zfill(2))
				os.mkdir(new_path)
				cap = os.path.getsize(file)
		
		shutil.move(file,os.path.join(new_path,os.path.basename(file)))


register(
	"organize_files_by_capacity",
	"organize files by capacity",
	"organize files by capacity",
	"katsumi",
	"katsumi",
 	"2022",
	"organize files by capacity",
	"",
	[
		(PF_BOOL, "separation", "-や_で区切られた名前ごとにフォルダーを分ける", True),		
		(PF_INT, "cap_limit", "何容量(kb)でまとめるか?",10000 ),
		(PF_TEXT, "extension", "拡張子を入力",".jpg"),
		(PF_DIRNAME, "folder_path", "フォルダーの場所を指定してください", ""),
	],
	[],
	organize_files_by_capacity,
	menu = "<Image>/File/Open" )
main()

googleで画像ファイルからまとめて文字起こし(OCR)する方法。

Googleドライブに保存した画像をgoogleドキュメントで開くと画像に移されている文字が文字起こし(OCR)される。
googleドライブ→画像を選択→右クリック→アプリで開く→Googleドキュメント)
すごい機能なのだが画像一枚づつしかできないので面倒である。

まとめてやるには画像を複数枚まとめてPDF化してGoogleドキュメントで読み込めばいい。
ただしPDFの容量は10Mb以下でないとダメなので注意。

枚数を増やすには画質を落としてPDF化する(当然文字の読み取りの正確さは下がる)。
Windows10でPDF化する場合600×600(600dpi)しか選べないためCubePDFなどをインストールすると容量を下げることができるが‥‥何度も言うが文字の読み取りの正確さは下がる。

自分的にお勧めなのはCubePDF Pageという無料ソフト。
画像をもとの縦横、もとの解像度でPDF保存してくれる(ただし解像度の設定自体はできない)。
大量に画像がある場合は最初から画像を10~15枚(画像サイズによる)のフォルダに分けておけば()手作業でPDF化する場合、CLRL+Aで全選択してCubePDF Pageにつっこむなどで作業を単純化できると思う。

GIMPで角の角い縁取りをする。

GIMPのメジャーな選択範囲を拡大して作る縁取り方法では角の丸い縁取りしかできない。
でも角を角くしたい時もあるのでその方法を書く。

f:id:katsumi3:20220402215122p:plain
焼き肉食べたい

角が丸くなるメジャーな縁取り方法

レイヤー→透明部分→不透明部分を選択範囲に→選択→選択範囲の拡大→レイヤーを増やす→下のレイヤの選択範囲を塗りつぶし

角が角くなる縁取り方法・その一

あらかじめレイヤーを複製→複製した下のレイヤーを選択→フィルター→照明と投影→ドロップシャドウ
画面のように設定する。縁取りの色はお好みで。
赤丸の5のところが厚みなのでここもお好みで数値を変えて。

f:id:katsumi3:20220402221128p:plain
他にいい方法はないのか

右上の小さな+マークを押すとプリセットとして値を保存していつでも使えるので登録しておくと楽。

f:id:katsumi3:20220402221317p:plain
さっそくプリセットに登録だ!

このドロップシャドウはプラグイン用のコマンドが見つからずプラグインに組み込めなかった。
ドロップシャドウ(レガシー)らしきコマンドの方見つからなかった、無念。
ただプリセットに登録しておけば作業は楽になるとは思う。

角が角くなる縁取り方法・その二

レイヤー複製
ダイヤログのテキストレイヤーを右クリック
テキストをパスに
編集→パスの境界線を描画
線の太さを設定してok

ちょっとトゲがでるが一番ちゃんと角くなる。

f:id:katsumi3:20220404005104p:plain
kofって良いですよね。

外部で選択したテキストを一発でGIMPの縦書きテキストレイヤーとして追加する方法

外部テキストをGIMPに縦書きテキストとして追加する作業を繰り返し行うのが苦痛すぎて楽になる手順を考えてみた。

概要

GIMP外でクリップボードに保存したものがプラグインとしてはGIMP内に読み込めないので(手作業では読み込めるんだけどなァ・・・)自作プラグインとマクロソフトを組み合わせて作業する。

手順1

以下をあらかじめインストールしておく

  • HiMacroEx 自分的にお気に入りのマクロソフト
  • UWSC マクロソフト(HiMacroExではGIMPのウィンドウを感知してくれなかったのでUWCSでその部分を行うことにした)
  • 自作GIMPプラグインadd tategaki text one GIMPで入力ウィンドウから縦書きテキストを入力するプラグイン

add tategaki text oneのインストール方法
GIMPでダイアログから縦書きテキストレイヤーを追加するプラグイン - アストラルプリズム

手順2

GIMP側でadd tategaki text oneにショートカットキーを割り付ける
1.メニューの編集→キーボードショートカット
2.検索窓にtategakiと入力してadd tategaki text oneを選択
3.新しいアクセラレーターをクリックしてショートカットキーを入力(CTRL+kにしたという前提で話を進める)
4.保存をクリックして閉じる

手順3

UWSC側の設定
1.UWSCの入ったのフォルダーを管理しやすいようにHiMacroEXのフォルダーに入れておく
2.以下のマクロをテキストファイルにコピペしてファイル名を「GIMPのテキスト追加ウィンドウをアクティブにする」、拡張子を.UWSにしてさっきのUWSCのフォルダーに保存する
KBD(VK_CTRL,DOWN)
KBD(VK_K,CLICK)
KBD(VK_CTRL,UP)
の部分が手順2で設定したショートカットなので変更したければそこを随時書き換え。

ACW(GETID("GIMP","gdkWindowToplevel",-1))

KBD(VK_CTRL,DOWN)
KBD(VK_K,CLICK)
KBD(VK_CTRL,UP)

ACW(GETID("python-fu-add_tategaki_text_one","gdkWindowToplevel",-1))

KBD(VK_CTRL,DOWN)
KBD(VK_A,CLICK)
KBD(VK_CTRL,UP)

KBD(VK_CTRL,DOWN)
KBD(VK_V,CLICK)
KBD(VK_CTRL,UP)

KBD(VK_ALT,DOWN)
KBD(VK_O,CLICK)
KBD(VK_ALT,UP)

3.UWSC→設定(カナヅチの絵のボタン)→ランチメニュー→ランチメニューの設定
スクリプト登録画面でウィンドウ下のhotkeyがCTRL+wであることを確認し好きなスロットを選ぶ
(ここでは二行めの「1.」のスロットを選んだ前提で話を進める)

4.スクリプト設定画面が表示されたらスクリプトファイルをクリックし2で作ったマクロファイルを登録する。
f:id:katsumi3:20220402144007p:plain

手順4

HiMacroEX側の設定
1.以下をテキストファイルにコピペして「GIMPにテキスト追加」という名前にしてHiMacroEXのMacroフォルダーに保存する。

Ctrl Down
C
Ctrl Up
Ctrl Down
W
Ctrl Up
Numpad1

使い方

1.あらかじめUWSCとHiMacroEXを起動してテキストを追加したいGIMPファイルを開いておく。
2.HiMacroEXで「GIMPにテキスト追加」を選択しておく。
3.追加したい外部テキストを選択(マウスをドラッグしなくてもクリック三回で文章の一塊が選択できる場合がある)、
4.HiMacroEXの「再生」をボタンをクリックするとGIMP側にさっきと同じ文章のテキストレイヤーができる。
追記:
HiMacroEXの設定→全般でHiMacroEXのテキストボックスを表示させなくできる
同じく設定で常に手前に表示も設定できる。

GIMPでダイアログから縦書きテキストレイヤーを追加するプラグイン

入力ウィンドウに文章を入力し追加するプラグイン
一連の作業を単純化させる手順の一つとして作った。
プラグインを起動すると文章を入力するウィンドウが表示されるので文章を入力すればテキストレイヤーが追加される。

インストール方法

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

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

def  tategaki_text_one(text):
	#一番下のレイヤーの情報取得
	image = gimp.image_list()[0]
	new_left_up_x = image.width / 8
	new_left_up_y = image.height /  8
	#フォント指定
	font = "MS Gothic"
	#源暎アンチックを使いたい人はフォントをインストール後以下の行の#を消す
	#font = "GenEi Antique Pv5 Medium"
	#テキストレイヤーを追加する
 	text_layer = pdb.gimp_text_layer_new(image, text, font, 32, 0)
	#
	#テキストレイヤーの位置指定
	text_layer.set_offsets(new_left_up_x, new_left_up_y)
	#
	#新規作成したテキストレイヤーを有効にする
	image.add_layer(text_layer)
	#
	#テキストレイヤーを縦書きにする
	pdb.gimp_text_layer_set_base_direction(text_layer,2)
	#
	#テキストレイヤーのサイズを変更する
	text_layer_height = image.height / 4
	text_layer_width = image.width / 6
	pdb.gimp_text_layer_resize(text_layer, text_layer_width, text_layer_height)
	#
 
register(
	"add_tategaki_text_one",
	"add tategaki text one",
	"add tategaki text one",
	"katsumi",
	"katsumi",
 	"2022",
	"add tategaki text one",
	"",
	[
		(PF_TEXT, "text", "縦書きしたい文章を入力",""),
	],
	[],
	tategaki_text_one,
	menu = "<Image>/Layer" )

main()

GIMPで文字の縁取りをするプラグイン

手順が地味に面倒なので作った。
以前キーマクロソフトで作ったが動作が安定しないのでちゃんとGIMPプラグインで作り直した。
選択したテキストレイヤーの下に縁取りのレイヤーができる。
テキストじゃなくても透明部分があるものはすべて縁取り出来る。
この方法だと角の丸い縁取りができる。
角の角い縁取りを作る方法はこっち。

重要メモ
#アクティブレイヤーの位置取得
act_position = pdb.gimp_image_get_item_position(image,act_layer)

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

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

def add_outline_text(size):
	#一番下のレイヤーの情報取得
	image = gimp.image_list()[0]
	#アクティブレイヤーを取得
	act_layer = image.active_layer
	#選択範囲を解除
	pdb.gimp_selection_none(image)
	#レイヤーを新規作成
	name = "縁取り"
	width   = image.width
	height  = image.height
	type    = RGB_IMAGE
	opacity = 100
	mode    = NORMAL_MODE
	new_layer = gimp.Layer(image, name, width, height, type, opacity, mode)
	#アクティブレイヤーの位置取得	
	act_position = pdb.gimp_image_get_item_position(image,act_layer)
	new_position = act_position + 1
	#レイヤー位置指定
	image.add_layer(new_layer, new_position)
	# アルファチャンネルの追加
	pdb.gimp_layer_add_alpha(new_layer)
	pdb.gimp_edit_clear(new_layer)

	# 不透明な範囲を選択
	pdb.gimp_image_select_item(image, 0, act_layer)
	#選択範囲を拡大
	pdb.gimp_selection_grow(image ,size)
	#描画色で塗りつぶし
	pdb.gimp_edit_fill(new_layer, FOREGROUND_FILL)
	#選択範囲を解除
	pdb.gimp_selection_none(image)

	
register(
	"add_outline_text",
	"add outline text",
	"add outline text",
	"katsumi",
	"katsumi",
 	"2022",
	"add outline text",
	"",
	[
		(PF_INT, "size", "縁取りのサイズ", 2),
	],
	[],
	add_outline_text,
	menu = "<Image>/Layer" )

main()


参考サイト
アクティブレイヤーの取得
mendo.work

不透明な範囲を選択、塗りつぶし
qiita.com