好吧,今天我们将创建一个P插件来自动化一些重复且无聊的任务。
在开始执行代码之前,必须安装koud0。
入口,让我们安装它。
安装gimptool
在我们继续之前,我必须澄清一下我将在Linux中执行此操作,因为我不使用窗口,那么如果您不知道在哪里可以找到窗口的Koud0。
但不用担心,根据strontic的说法,我会帮助您在窗口上可能在哪里,他说该文件可以位于Koud3中。
入口,如果您设法找到了文件,则可以使用插件的创建。
现在,让我们在ubuntu/debian的Linux上安装gimptool。
只需转到终端执行命令:koud4。
准备就绪,只是,现在让我们创建一个插件。
创建一个插件
美丽,在创建插件之前,我将解释一下我会做的。
为了使学习过程变得困难,我将制作一个非常简单但非常简单的插件。
基本上放了一个指南(指南)。
如果您不知道什么是指南。打开gimp,然后转到“图像”或“图像”菜单,如果您是葡萄牙语,然后见他。
将鼠标传递到顶部,您会看到4个选项。
这是一个屏幕捕获。
单击第一个选项,将有一个屏幕选择方向并插入指南的位置值。
入口,位于垂直方向和50%位置,例如在图像中间出现蓝线,例如在此屏幕截图中。
我想自动化这个,因为它很无聊打开小屏幕并插入值。
入口,首先,让我们创建一个称为koud5的文件。
我将把整个时间都放在测试中,然后我解释了一点。
#include <libgimp/gimp.h>
static void query (void);
static void run (
const gchar *name,
gint nparams,
const GimpParam *param,
gint *nreturn_vals,
GimpParam **return_vals);
GimpPlugInInfo PLUG_IN_INFO = {
NULL, // init
NULL, // quit
query,
run
};
static void query (void) {
static GimpParamDef args[] = {
{
GIMP_PDB_INT32, // Tipo de variável
"run-mode", // Nome da variável
"Run mode" // Descrição da variável
},
{
GIMP_PDB_IMAGE, // Tipo de variável
"image", // Nome da variável
"Input image" // Descrição da variável
},
{
GIMP_PDB_DRAWABLE, // Tipo de variável
"drawable", // Nome da variável
"Input drawable" // Descrição da variável
}
};
gimp_install_procedure (
"plug-in-add_guias", // Nome do procedure
"Adiciona guia", // Uma pequena descrição do que o procedure faz
"Ele adiciona uma guia no meio da imagem", // Uma descrição completa
"Alexandre dos Santos Alves", // Seu nome
"Copyright Alexandre", // Licença
"2023", // Ano que foi criado
"_Adicona Guia", // Nome que vai aparece no menu
"RGB*, GRAY*", // Tipo de imagem que o procedure vai trabalhar
GIMP_PLUGIN, // Tipo de procedure
G_N_ELEMENTS (args), // Tamanho do parâmetro
0, // Tamanho do retorno
args, // o parâmetro do procedure
NULL); // o retorno do procedure.
gimp_plugin_menu_register ("plug-in-add_guias",
"<Image>/Tools/");
}
static void run (
const gchar *name,
gint nparams,
const GimpParam *param,
gint *nreturn_vals,
GimpParam **return_vals)
{
// A variável que vai ser retornado
static GimpParam values[1];
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
GimpRunMode run_mode;
GimpDrawable *drawable;
/* Definindo valores de saída obrigatórios */
*nreturn_vals = 1;
*return_vals = values;
/* É obrigatório isso */
values[0].type = GIMP_PDB_STATUS;
values[0].data.d_status = status;
run_mode = param[0].data.d_int32;
gint image = param[1].data.d_image;
drawable = gimp_drawable_get(param[2].data.d_drawable);
gdouble metade_do_tamanho_da_image = (gimp_image_width(image) * 0.5);
gimp_image_add_vguide(image, metade_do_tamanho_da_image);
gimp_displays_flush ();
}
MAIN()
以这种方式,将其复制并粘贴到文件并运行文件所在的命令。
se窗口,C:\program files\GIMP 2\bin\gimptool-2.0.exe --install add_guias.c
。
se for linux,gimptool-2.0 --install add_guias.c
。
如果偶然地出现在下面,您可以忽略。
add_guias.c:92:2: warning: ‘gimp_drawable_get’ is deprecated: Use 'gimp_drawable_get_buffer' instead [-Wdeprecated-declarations]
92 | drawable = gimp_drawable_get(param[2].data.d_drawable);
| ^~~~~~~~
In file included from /usr/include/gimp-2.0/libgimp/gimp.h:41,
from add_guias.c:1:
/usr/include/gimp-2.0/libgimp/gimpdrawable.h:52:16: note: declared here
52 | GimpDrawable * gimp_drawable_get (gint32 drawable_ID);
| ^~~~~~~~~~~~~~~~~
如果没有错误,现在会有此警告,现在,它将出现在GIM上,然后关闭GIM并再次打开它,然后在“工具”菜单(工具)中看到一个带有名称添加指南的项目。<<<<<<<<<< /p>
创建一个新图像,然后单击它以查看发生的事情。
好吧,如果蓝线出现,所以它可以工作,如果您不这样做,则可以解决。
撒谎,评论中评论,问题。
但是现在,让我们了解代码。
在第一行中,我们包括一个用于插件构建的重要库,因此对此没有太多解释。
在此下方,我们可以看到两个功能,query
和run
。
...
static void query (void);
static void run (
const gchar *name,
gint nparams,
const GimpParam *param,
gint *nreturn_vals,
GimpParam **return_vals);
GimpPlugInInfo PLUG_IN_INFO = {
NULL, // init
NULL, // quit
query,
run
};
...
但是在解释这些功能之前,让我们跳到此部分并查看变量koud10。
此变量可以存储4个值。
但是这些值是什么?
是GIM会调用的功能。
也就是说,第一个值是在GIMP初始化期间调用的函数,就我而言,我将NULL
放置,因为我不想在启动时执行任何操作。
第二个是quit
,它将在gimp闭合期间称为NULL
。
我提到的这两个值是可选的,也就是说,没有一个函数,只需放置koud11。
现在,我要提到的两个附近是义务。
第三是query
,我不知道该解释什么,因为文档并没有说太多,但是在我的理解中,我想它用于安装插件,但让我们尝试一下了解更多信息,当我们处于功能query()
时。
第四和最后一个是run
,它是代码的核心,因为它会在菜单或脚本fu或python fu时旋转。
现在,知道了这一点,让我们转到创建的两个功能来理解parano仪表。
static void query (void);
static void run (
const gchar *name, // Nome do plug-in
gint nparams, // Quantidade de parâmetro
const GimpParam *param, // O parâmetro do plug-in
gint *nreturn_vals, // Quantidade de retorno
GimpParam **return_vals); // O retorno do plug-in
在koud8 parano上有很多解释,让我们转到run
。
第一个parano是插件的名称。
第二个是Parano的数量。
第三是插入式Parano。
房间是回报的数量。
第五是插件的返回。
美丽,知道这些部分是什么。
现在,让我们了解Funa query(void)
中的内容。
static void query (void) {
static GimpParamDef args[] = {
{
GIMP_PDB_INT32, // Tipo de variável
"run-mode", // Nome da variável
"Run mode" // Descrição da variável
},
{
GIMP_PDB_IMAGE, // Tipo de variável
"image", // Nome da variável
"Input image" // Descrição da variável
},
{
GIMP_PDB_DRAWABLE, // Tipo de variável
"drawable", // Nome da variável
"Input drawable" // Descrição da variável
}
};
gimp_install_procedure (
"plug-in-add_guias", // Nome do procedure
"Adiciona guia", // Uma pequena descrição do que o procedure faz
"Ele adiciona uma guia no meio da imagem", // Uma descrição completa
"Alexandre dos Santos Alves", // Seu nome
"Copyright Alexandre", // Licença
"2023", // Ano que foi criado
"_Adicona Guia", // Nome que vai aparece no menu
"RGB*, GRAY*", // Tipo de imagem que o procedure vai trabalhar
GIMP_PLUGIN, // Tipo de procedure
G_N_ELEMENTS (args), // Tamanho do parâmetro
0, // Tamanho do retorno
args, // o parâmetro do procedure
NULL); // o retorno do procedure.
gimp_plugin_menu_register ("plug-in-add_guias", // nome do plug-in
"<Image>/Tools/"); // Localização dele no menu
}
首先,我们声明一个差异static GimpParamDef args[]
,可以知道插件收到的parano的值是什么。
在我们的情况下,我们将保留图案,即run-mode
,Koud23和drawable
。
但是,如果偶然地,您的插件需要更多的值,我会放置每种差异的列表,以使您更容易。
变化的类型
| |
---|---|
gimp_pdb_int32 | 32位整数 |
gimp_pdb_int16 | 16位整数 |
gimp_pdb_int8 | 8位整数 |
gimp_pdb_float | float |
gimp_pdb_string | 字符串 |
gimp_pdb_int32array | int32 | 的数组
gimp_pdb_int16array | int16 | 的数组
gimp_pdb_int8array | int8 | 的数组
gimp_pdb_floatarray | 浮子的数组 |
gimp_pdb_stringarray | 字符串数组 |
gimp_pdb_color | 颜色 |
gimp_pdb_item | 项目ID |
gimp_pdb_display | 显示ID |
gimp_pdb_image | 图像ID |
gimp_pdb_layer | 图层ID |
gimp_pdb_channel | 频道ID |
gimp_pdb_drawable | 可绘制的ID |
gimp_pdb_selection | 选择ID |
gimp_pdb_colorarray | 颜色数组 |
gimp_pdb_vectors | 向量(psath)ID |
gimp_pdb_parasite | 寄生虫 |
gimp_pdb_status | 过程返回状态 |
gimp_pdb_end | 最后枚举值的标记 |
美女,我们已经了解了args[]
,现在让我们转到我们称为Koud26的功能。
有很多要解释的东西,因为如果您阅读帕拉诺旁边的评论,您可以拥有一个领域,但是基本上它的作用是在Gimp上安装插件。
入口,让我们转到另一个gimp_plugin_menu_register
的功能。顾名思义,他将在菜单上注册插件,在我们的情况下将放置在Tools
上。
在这里我们结束函数query()
。
让我们去run()
,因为它有点大,我会将解释放在代码中。
...
static void run (
const gchar *name,
gint nparams,
const GimpParam *param,
gint *nreturn_vals,
GimpParam **return_vals)
{
// A variável que vai ser retornado
static GimpParam values[1];
// Como o nome diz é o status
GimpPDBStatusType status = GIMP_PDB_SUCCESS;
// O run_mode é usado para saber se estar no modo interativo ou não
// Não irei explicar isso nesse blog
GimpRunMode run_mode;
// Variável que, por padrão, é o layer(camada) atual.
GimpDrawable *drawable;
/* Definindo valores de saída obrigatórios */
*nreturn_vals = 1; // definindo o tamanho da variável values
*return_vals = values;
/* É obrigatório isso */
values[0].type = GIMP_PDB_STATUS;
values[0].data.d_status = status;
// Aqui temos uma forma de pegar os valores passados no parâmetro
// Eu vou colocar lista de tipos de variáveis abaixo fora do código
// Sobre o índices da variável 'param', ele está na mesma ordem
// que você declarou na função 'query' da variável 'args'
run_mode = param[0].data.d_int32;
gint image = param[1].data.d_image;
drawable = gimp_drawable_get(param[2].data.d_drawable);
// Agora, a partir daqui, são os códigos que você pode fazer
// Aqui estamos pegando a metade do tamanho da imagem
// Para poder colocar a guia no meio
gdouble metade_do_tamanho_da_image = (gimp_image_width(image) * 0.5);
// essa função coloca a guia, primeiro parâmetro é a imagem
// o segundo é a posição dessa guia
gimp_image_add_vguide(image, metade_do_tamanho_da_image);
// Essa função serve para atualizar o que você fez no código,
// mas não é necessário para o nosso caso,
// Não estamos alterando a imagem
gimp_displays_flush ();
}
...
membro | |
---|---|
gint32 | d_int32 |
gint16 | d_int16 |
guint8 | d_int8 |
gdouble | d_float |
gchar | d_string |
gint32 | d_int32array |
gint16 | d_int16array |
guint8 | d_int8array |
gdouble | d_floatarray |
gchar | d_stringarray |
gimprgb | d_colorarray |
gimprgb | d_color |
gint32 | d_display |
gint32 | d_image |
gint32 | d_item |
gint32 | d_layer |
gint32 | d_layer_mask |
gint32 | d_channel |
gint32 | d_drawable |
gint32 | d_selection |
gint32 | d_boundary |
gint32 | d_vectors |
gint32 | d_unit |
gimpparasite | d_parasite |
gint32 | d_tattoo |
gimppdbstatustype | d_status |
如果您不了解此列表或不认识我们,只需做到param[i].data.membro
,请将成员更改为列表中的项目。
最后,我们必须放置koud32,它必须具有此功能,并且它在文件的末尾。
好吧,这样,您就可以自己构建一个插件,但您不是,因为您仍然知道GIMP中的哪些都可以使用。
这是Gimp的文档。
现在,是的,我们可以在这里结束。
好吧,就是这样,再见!