本ページはプロモーションが含まれています

GIMPの手動ガイド作成の手間がゼロに!?ガイド一括作成プラグインで時間を手に入れよう!!

gimp-make-guide-plugin-python-fu-eye-catch 解説
スポンサーリンク
スポンサーリンク

無料の画像編集ソフトといえば、「GIMP」。Photoshopに負けないくらい高機能なので、これがあれば特に困ることはありません。

ただし、かゆいところに手が届かない、微妙に使いにくいところがあるんですよね…。

無料ソフトあるあるですね。…いや…GIMPあるあるか?

画像を等間隔で並べたいときや、中央に画像を配置したいときは、「ガイド」を引くと便利です。
しかしGIMPの場合、ガイド線(位置決め)を一本ずつ引いていく必要があります。

これが意外と手間のかかる作業!!

本記事ではそういった悩みやストレスを解消するために、GIMPのガイドを一括作成するプラグインを作成しました。

「プラグインってなに?」
「プラグインの導入方法がわからない」

って方でも、図をたくさん使用して説明していますので、初めての方でもわかりやすいかと思います。

それでは一緒にやっていきましょう!

このページでわかること
  • GIMPプラグイン「一括ガイド作成」の機能説明
  • プラグイン配布
    ※GIMP2とGIMP3の両バージョンを用意
  • ソースコード
  • 導入方法
  • 使用方法
スポンサーリンク

GIMP本体

GIMP本体が必要な場合は、こちらからダウンロードしてください。

GIMP2
※最終安定バージョンは、GIMP 2.10.38です。

GIMP3

スポンサーリンク

一括ガイド作成プラグイン for GIMP

作成の際、こちらのサイトを参考にさせて頂きました。ありがとうございます。この場をお借りして、心より感謝いたします。

GIMP2でかなり便利だったので、GIMP 3でも必須の機能だと感じ、移植してみました!!

機能

クリックするだけで、画像に複数のガイドを追加できます。
ガイドの位置も細かく設定可能です。

ダウンロード

GIMP2と3では、仕様がまったく別物のため、プラグインを共通化できません。

そのため、ご利用のGIMPバージョンにあわせて、プラグインをダウンロードしてください。
※セキュリティ面を考慮して、Google Driveにファイルを保管しています。

導入方法

ダウンロードファイルを解凍後、フォルダごとGIMPのプラグインフォルダに設置してください。詳しくは、こちらで解説しています。

GIMP3のプラグイン設置の注意事項

以下のルールを守らないと、プラグインが読み込みません。

Plug-insフォルダの直下にフォルダを用意し、その中にプラグインファイルの配置が必要。
Plug-insフォルダ直下にプラグインファイルを直接置くことができない。
フォルダ名は、プラグインファイルと同名にしなければならない。

フォルダとプラグインが違う名前になっていて、読み込まないことに気づかず、無駄な時間を過ごしました…。注意されたし!!

ソースコード

ソースコードも掲載しておきます。
ぜひ、自分色にアレンジしてみてください。

GIMP2 以前

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# GIMP 2.x Python Plugin for Guide Generation

import sys
import os

from gimpfu import *

def N_(message): return message
def _(message): return message 

def generate_guides_slider_2_x(img, drawable,
                               H0,
                               H1,
                               H2,
                               H3,
                               H4,
                               H5,
                               H6,
                               H7,
                               H8,
                               V0,
                               V1,
                               V2,
                               V3,
                               V4,
                               V5,
                               V6,
                               V7,
                               V8):
    
    gimp.progress_init(_("ガイドを生成中..."))
    gimp.progress_update(0.0)

    image_width = img.width
    image_height = img.height

    pdb.gimp_context_push()
    pdb.gimp_image_undo_group_start(img)

    try:
        if H0 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H0 / 100.0))
        if V0 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V0 / 100.0))

        gimp.progress_update(0.2)
      
        if H1 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H1 / 100.0))
        if V1 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V1 / 100.0))
      
        if H2 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H2 / 100.0))
        if V2 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V2 / 100.0))

        gimp.progress_update(0.4)
        
        if H3 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H3 / 100.0))        
        if V3 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V3 / 100.0))
        
        if H4 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H4 / 100.0))
        if V4 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V4 / 100.0))

        gimp.progress_update(0.6)
        
        if H5 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H5 / 100.0))        
        if V5 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V5 / 100.0))
        
        if H6 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H6 / 100.0))
        if V6 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V6 / 100.0))
        
        if H7 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H7 / 100.0))        
        if V7 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V7 / 100.0))
        
        gimp.progress_update(0.8)

        if H8 >= 0.0:
            pdb.gimp_image_add_hguide(img, int(image_height * H8 / 100.0))
        if V8 >= 0.0:
            pdb.gimp_image_add_vguide(img, int(image_width * V8 / 100.0))

        gimp.progress_update(1.0)

    except Exception as e:
        gimp.message(_("ガイド生成中にエラーが発生しました: %s") % str(e))
        pdb.gimp_image_undo_group_end(img)
        pdb.gimp_context_pop()
        return False

    pdb.gimp_image_undo_group_end(img)
    pdb.gimp_context_pop()

    return True

register(
    "generate_guides_slider_2_x_gimp2",
    N_("ガイド一括生成 ※数値マイナスで非表示"),
    _("設定した数値の位置にガイドを一括生成します。"),
    "ぐうてる",
    "ぐうてる",
    "2025",
    "<Image>/プラグイン/ガイド一括生成",
    "RGB*, GRAY*",
    [
        (PF_FLOAT, "H0", N_("水平ガイド-0 (初期値: 0%)"), 0.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H1", N_("水平ガイド-1 (初期値: 12.5%)"), 12.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H2", N_("水平ガイド-2 (初期値: 25%)"), 25.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H3", N_("水平ガイド-3 (初期値: 37.5%)"), 37.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H4", N_("水平ガイド-4 (初期値: 50%)"), 50.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H5", N_("水平ガイド-5 (初期値: 62.5%)"), 62.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H6", N_("水平ガイド-6 (初期値: 75%)"), 75.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H7", N_("水平ガイド-7 (初期値: 87.5%)"), 87.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "H8", N_("水平ガイド-8 (初期値: 100%)"), 100.0, (-100.0, 100.0, 0.1)),

        (PF_FLOAT, "V0", N_("垂直ガイド-0 (初期値: 0%)"), 0.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V1", N_("垂直ガイド-1 (初期値: 12.5%)"), 12.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V2", N_("垂直ガイド-2 (初期値: 25%)"), 25.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V3", N_("垂直ガイド-3 (初期値: 37.5%)"), 37.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V4", N_("垂直ガイド-4 (初期値: 50%)"), 50.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V5", N_("垂直ガイド-5 (初期値: 62.5%)"), 62.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V6", N_("垂直ガイド-6 (初期値: 75%)"), 75.0, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V7", N_("垂直ガイド-7 (初期値: 87.5%)"), 87.5, (-100.0, 100.0, 0.1)),
        (PF_FLOAT, "V8", N_("垂直ガイド-8 (初期値: 100%)"), 100.0, (-100.0, 100.0, 0.1)),
    ],
    [],
    generate_guides_slider_2_x,
    domain=("gimp20-python", gimp.locale_directory) 
)

main()

GIMP3 以降

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import gi
gi.require_version('Gimp', '3.0')
gi.require_version('GimpUi', '3.0')
from gi.repository import Gimp
from gi.repository import GimpUi
from gi.repository import GLib
from gi.repository import GObject

def N_(message): return message
def _(message): return GLib.dgettext(None, message)

def generate_guides_slider(procedure, run_mode, image, drawable, config, data):
    if run_mode == Gimp.RunMode.INTERACTIVE:
        GimpUi.init('plug-in-guide-generator-slider-python')
    
        dialog = GimpUi.ProcedureDialog(procedure=procedure, config=config)
 
        dialog.fill([
            "TEXT",
            "H0",
            "H1",
            "H2",
            "H3",
            "H4",
            "H5",
            "H6",
            "H7",
            "H8",
            "V0",
            "V1",
            "V2",
            "V3",
            "V4",
            "V5",
            "V6",
            "V7",
            "V8"
        ])

        if not dialog.run():
            return procedure.new_return_values(Gimp.PDBStatusType.CANCEL, GLib.Error())

    Gimp.progress_init(_("ガイドを生成中..."))
    Gimp.progress_update(0.0)

    image_width = image.get_width()
    image_height = image.get_height()

    Gimp.context_push()
    image.undo_group_start()

    try:
        H0 = config.get_property('H0')
        H1 = config.get_property('H1')
        H2 = config.get_property('H2')
        H3 = config.get_property('H3')
        H4 = config.get_property('H4')
        H5 = config.get_property('H5')
        H6 = config.get_property('H6')
        H7 = config.get_property('H7')
        H8 = config.get_property('H8')

        V0 = config.get_property('V0')
        V1 = config.get_property('V1')
        V2 = config.get_property('V2')
        V3 = config.get_property('V3')
        V4 = config.get_property('V4')
        V5 = config.get_property('V5')
        V6 = config.get_property('V6')
        V7 = config.get_property('V7')
        V8 = config.get_property('V8')

        if H0 >= 0.0:
            image.add_hguide(int(image_height * H0 / 100.0))
        if V0 >= 0.0:
            image.add_vguide(int(image_width * V0 / 100.0))

        Gimp.progress_update(0.2)
      
        if H1 >= 0.0:
            image.add_hguide(int(image_height * H1 / 100.0))
        if V1 >= 0.0:
            image.add_vguide(int(image_width * V1 / 100.0))
      
        if H2 >= 0.0:
            image.add_hguide(int(image_height * H2 / 100.0))
        if V2 >= 0.0:
            image.add_vguide(int(image_width * V2 / 100.0))

        Gimp.progress_update(0.4)
        
        if H3 >= 0.0:
            image.add_hguide(int(image_height * H3 / 100.0))        
        if V3 >= 0.0:
            image.add_vguide(int(image_width * V3 / 100.0))
        
        if H4 >= 0.0:
            image.add_hguide(int(image_height * H4 / 100.0))
        if V4 >= 0.0:
            image.add_vguide(int(image_width * V4 / 100.0))

        Gimp.progress_update(0.6)
        
        if H5 >= 0.0:
            image.add_hguide(int(image_height * H5 / 100.0))        
        if V5 >= 0.0:
            image.add_vguide(int(image_width * V5 / 100.0))
        
        if H6 >= 0.0:
            image.add_hguide(int(image_height * H6 / 100.0))
        if V6 >= 0.0:
            image.add_vguide(int(image_width * V6 / 100.0))
        
        if H7 >= 0.0:
            image.add_hguide(int(image_height * H7 / 100.0))        
        if V7 >= 0.0:
            image.add_vguide(int(image_width * V7 / 100.0))
        
        Gimp.progress_update(0.8)

        if H8 >= 0.0: 
            image.add_hguide(int(image_height * H8 / 100.0))
        if V8 >= 0.0: 
            image.add_vguide(int(image_width * V8 / 100.0))

        Gimp.progress_update(1.0)

    except Exception as e:
        Gimp.message(_(f"ガイド生成中にエラーが発生しました: {e}"))
        image.undo_group_end()
        Gimp.context_pop()
        Gimp.progress_end()
        return procedure.new_return_values(Gimp.PDBStatusType.FAIL, GLib.Error.new_literal(GLib.Error, 0, str(e)))

    image.undo_group_end()
    Gimp.context_pop()
    Gimp.progress_end()

    return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())


class GuideGeneratorSlider (Gimp.PlugIn):
    def do_query_procedures(self):
        return [ "plug-in-guide-generator-slider-python" ]

    def do_set_i18n(self, name):
        return False

    def do_create_procedure(self, name):
        procedure = Gimp.ImageProcedure.new(self, name,
                                             Gimp.PDBProcType.PLUGIN,
                                             generate_guides_slider, None)

        procedure.set_image_types("*")

        procedure.set_menu_label(_("ガイド一括生成"))
        procedure.add_menu_path('<Image>/プラグイン/')

        procedure.set_documentation(
            _("設定した数値の位置にガイドを一括生成します。"),
            _("設定した数値の位置にガイドを一括生成します。効率爆あがり!!"),
            name
        )
        procedure.set_attribution("ぐうてる", "ぐうてる", "2025")

        procedure.set_menu_label(_("ガイド一括生成 ※数値マイナスで、ガイド作成を無効化"))

        procedure.add_double_argument ("H0", _("水平ガイド-0 (初期値: 0%)"), None,
                                         -100.0, 100.0, 0.0, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("H1", _("水平ガイド-1 (初期値: 12.5%)"), None,
                                         -100.0, 100.0, 12.5, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("H2", _("水平ガイド-2 (初期値: 25%)"), None,
                                         -100.0, 100.0, 25.0, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("H3", _("水平ガイド-3 (初期値: 37.5%)"), None,
                                         -100.0, 100.0, 37.5, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("H4", _("水平ガイド-4 (初期値: 50%)"), None,
                                         -100.0, 100.0, 50.0, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("H5", _("水平ガイド-5 (初期値: 62.5%)"), None,
                                         -100.0, 100.0, 62.5, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("H6", _("水平ガイド-6 (初期値: 75%)"), None,
                                         -100.0, 100.0, 75.0, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("H7", _("水平ガイド-7 (初期値: 87.5%)"), None,
                                         -100.0, 100.0, 87.5, GObject.ParamFlags.READWRITE)

        procedure.add_double_argument ("H8", _("水平ガイド-8 (初期値: 100%)"), None,
                                         -100.0, 100.0, 100.0, GObject.ParamFlags.READWRITE)

        procedure.add_double_argument ("V0", _("垂直ガイド-0 (初期値: 0%)"), None,
                                         -100.0, 100.0, 0.0, GObject.ParamFlags.READWRITE)

        procedure.add_double_argument ("V1", _("垂直ガイド-1 (初期値: 12.5%)"), None,
                                         -100.0, 100.0, 12.5, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("V2", _("垂直ガイド-2 (初期値: 25%)"), None,
                                         -100.0, 100.0, 25.0, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("V3", _("垂直ガイド-3 (初期値: 37.5%)"), None,
                                         -100.0, 100.0, 37.5, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("V4", _("垂直ガイド-4 (初期値: 50%)"), None,
                                         -100.0, 100.0, 50.0, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("V5", _("垂直ガイド-5 (初期値: 62.5%)"), None,
                                         -100.0, 100.0, 62.5, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("V6", _("垂直ガイド-6 (初期値: 75%)"), None,
                                         -100.0, 100.0, 75.0, GObject.ParamFlags.READWRITE)
        
        procedure.add_double_argument ("V7", _("垂直ガイド-7 (初期値: 87.5%)"), None,
                                         -100.0, 100.0, 87.5, GObject.ParamFlags.READWRITE)

        procedure.add_double_argument ("V8", _("垂直ガイド-8 (初期値: 100%)"), None,
                                         -100.0, 100.0, 100.0, GObject.ParamFlags.READWRITE)
        
        return procedure

Gimp.main(GuideGeneratorSlider.__gtype__, sys.argv)
スポンサーリンク

プラグインの導入方法

GIMPのプラグイン導入は、ダウンロードしたファイルを特定のフォルダに置くだけです。

簡単ですので、ぜひやってみてください。

  • 1
    プラグインをダウンロードする

    本記事では、GIMP3に導入する手順で進めていきます。
    ※GIMP2はダウンロードするファイルが異なりますが、導入方法は変わりません。参考にしてください。

  • 2
    ダウンロードしたファイルを解凍する

    解凍すると、「Pythonファイル」が出てきます。

  • 3
    GIMPのプラグインフォルダを確認する

    GIMPを起動し、「編集」→「設定」にアクセスしてください。

    「フォルダ」→「プラグイン」から、フォルダアドレスを選択後、右上のアイコンをクリックしてください。

    初期状態では、以下の2ヶ所がプラグインフォルダとなっています。違いは以下のとおりです。どちらにプラグインを設置するか使い分けてください。

    コンピュータ全体に適用する場合

    GIMP2
    C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins
    GIMP3
    C:\Program Files\GIMP 3\lib\gimp\3.0\plug-ins

    ユーザー毎に適用する場合

    GIMP2
    C:\Users\%USERNAME%\AppData\Roaming\GIMP\2.10\plug-ins
    GIMP3
    C:\Users\%USERNAME%\AppData\Roaming\GIMP\3.0\plug-ins

    AppData フォルダは通常「隠しフォルダ」になっていて見えません。表示したい場合は、適当なフォルダから図のように「隠しファイル」にチェックを入れてください。

  • 4
    プラグインをフォルダごと移動させる

    開いたプラグインフォルダに、先程解凍したファイルをフォルダごと移動させてください。

    以下のようになればOKです。

    プラグイン導入は以上となります。

スポンサーリンク

使い方

  • 1
    GIMPを起動し、編集したい画像を開く
  • 2
    プラグインを起動する

    メニューバーの「プラグイン」→「ガイド一括生成」の順にアクセスします。

    「プラグイン」メニューは、本プラグインが正常に動作している場合に表示されます。このメニューが見つからない場合は、プラグインが正しく読み込まれていない可能性があります。

  • 3
    ガイド位置を設定する

    ガイドの番号と初期設定は、図のように対応しています。

    ガイド位置は、画像サイズの割合で設定していきます。

    水平ガイドは画像の上辺を基準に「0%」・中央「50%」・下辺「100%」
    垂直ガイドは画像の左辺を基準に「0%」・中央「50%」・右辺「100%」

    ガイドが不要な場合は、数値をマイナスにしてください。
    ※マイナスであれば、どの値でも問題ありません。

    設定完了後、設定の保存をクリックしてください。
    設定の保存はGIMP3のみの機能となっています。GIMP2の場合は保存できません。
    ※以下の設定は、「画像の最外」と「中央」にガイドが入ります。

    GIMP2の場合、設定の保存ができないためGIMPを再起動すると設定がリセットされてしまいます。これは仕様なのでどうすることもできません…。

  • 4
    ガイドを作成する

    OKをクリックすると、設定した位置にガイドが作成されます。

    プラグインの使い方は、以上となります。

    覚えておくと便利な操作を書いておきますので、ご活用ください。

    ガイドを全部削除したい場合

    メニューバーの「画像」→「ガイド」→「すべてのガイドを削除」を選択してください。

    保存した設定を読み出したい場合(GIMP3のみ)

    プラグイン起動後、保存された設定を読み込むをクリックしてください。

    初期設定に戻したい場合(GIMP3のみ)

スポンサーリンク

まとめ

ここまで読んで頂き、ありがとうございます。

いかがでしたでしょうか。

GIMPは慣れればめちゃくちゃ使いやすくて、Photoshopなどの高級ソフトを購入する必要がなくなるため、これを機会にぜひ使用してみてください。

不明な点がございましたら、気軽にお問合せフォームよりご連絡をお願いします。できる限りサポートさせて頂きます。

それではまた会いましょう!

guuteru-bow

コメント

タイトルとURLをコピーしました