Script personalizado¶
Visão geral¶
O gerenciador de processamento em lote permite que você personalize um Fluxo de trabalho adicionando a ferramenta Script shell do usuário para executar um script para processar suas imagens com ferramentas externas, como ImageMagick ou ExifTool.
A ferramenta Script shell do usuário está disponível na categoria Ferramentas personalizadas da lista Ferramentas base. A ferramenta foi projetada para executar o código-fonte de um script de shell que pode chamar um ou mais programas de linha de comando para cada item na fila. O script de shell é escrito pelo usuário inteiramente dentro do plugin. Esses scripts podem incluir um conjunto de variáveis de ambiente que especificam nomes de arquivos e alguns tipos de metadados.
O gerenciador de processamento em lote incluindo um script personalizado em um fluxo de trabalho¶
A ferramenta oferece estas opções:
Tipo de arquivo de saída: especifica o formato de imagem esperado na saída do seu script. O padrão é Igual à entrada, mas você pode definir JPEG, PNG, TIFF, dentre outros. Observe que JPEG é um formato de compactação com perdas, suporta apenas profundidade de cor de 8 bits e não oferece suporte a transparência.
Shell script: este campo de texto é onde você insere o código-fonte do seu script de shell. Script Bash é suportado no Linux e macOS. Script Batch é suportado no Windows.
As palavras-chave que você pode usar no código do seu script estão listadas abaixo. A ferramenta substituirá todas as ocorrências de palavras-chave no script de shell em tempo de execução, antes da execução do script. Observe que as palavras-chave diferenciam maiúsculas de minúsculas.
$INPUT é substituído pelo nome do arquivo de entrada do fluxo de trabalho (com caracteres especiais escapados).
$OUTPUT é substituído pelo nome do arquivo de saída do fluxo de trabalho (com caracteres especiais escapados).
Importante
Um novo arquivo é sempre esperado em $OUTPUT. Programas de script que não criam um novo arquivo (por exemplo, alterando metadados com o ExifTool) devem primeiro copiar $INPUT para $OUTPUT com o comando apropriado para o sistema operacional, antes de fazer qualquer alteração em $OUTPUT.
As variáveis de ambiente que você pode usar no seu script de shell são:
TITLE: para usar a propriedade Título do item do digiKam.
COMMENTS: para usar a propriedade Descrição do item do digiKam.
COLORLABEL: para usar a propriedade Rótulo de cor do item do digiKam.
PICKLABEL: para usar a propriedade Rótulo de seleção do item do digiKam.
RATING: para usar a propriedade Classificação do item do digiKam.
TAGSPATH: para usar a propriedade Etiquetas do item do digiKam.
Todas essas propriedades são definidas com base nas propriedades da imagem armazenadas no banco de dados do digiKam.
Nota
No Linux e no macOS, as variáveis de ambiente podem ser acessadas no script com $ como prefixo para nomes de variáveis (por exemplo, $INPUT). O interpretador usado para executar o script é o /bin/bash.
No Windows, as variáveis de ambiente podem ser acessadas no script com % como prefixo e sufixo dos nomes das variáveis (por exemplo, %INPUT%). O interpretador usado para executar o script é o cmd.exe.
Valor devolvido¶
Por convenção, um script Bash no Linux e macOS retorna 0 em caso de sucesso ou um inteiro no intervalo de 1 a 255 em caso de erro. Use exit < código_de_erro > para passar o valor de retorno de volta para o fluxo de trabalho.
No Windows, um script Batch retorna 0 em caso de sucesso e outro valor em caso de erro, mas o valor é um inteiro com sinal, portanto, um valor negativo é possível. Use EXIT /B < código_de_erro > para passar o valor de retorno para o fluxo de trabalho.
O gerenciador de processamento em lote processa o valor retornado pelo seu script. Se zero for retornado, o fluxo de trabalho continuará conforme o esperado. Caso contrário, o fluxo de trabalho será interrompido e o gerenciador de processamento em lote interromperá o processamento.
Exemplos¶
Prova de conceito¶
O primeiro exemplo mostrado abaixo não faz nada de especial. Ele imprime no console os nomes dos arquivos de entrada/saída e as propriedades dos itens passados do gerenciador de processamento em lote para o script e copia o arquivo de entrada para o arquivo de saída (esta etapa é necessária para evitar que o gerenciador de processamento em lote retorne um erro porque o arquivo de destino não existe). O script retorna o valor do comando de cópia de arquivo, que é analisado pelo gerenciador de processamento em lote para cada item no fluxo de trabalho. Veja abaixo a versão Bash do script:
echo "INPUT FILE: $INPUT"
echo "OUTPUT FILE: $OUTPUT"
echo "TITLE: $TITLE"
echo "COMMENT: $COMMENT"
echo "COLORLABEL: $COLORLABEL"
echo "PICKLABEL: $PICKLABEL"
echo "RATING: $RATING"
echo "TAGSPATH: $TAGSPATH"
cp $INPUT $OUTPUT
exit $?
Veja abaixo a versão do script para o Windows Shell. A saída é redirecionada e concatenada para o arquivo C:tempdigikam.txt:
set infile=$INPUT
set outfile=$OUTPUT
echo INPUT FILE: %infile% >>C:\temp\digikam.txt
echo OUTPUT FILE: %outfile% >>C:\temp\digikam.txt
echo TITLE: %TITLE% >>C:\temp\digikam.txt
echo COMMENT: %COMMENT% >>C:\temp\digikam.txt
echo COLORLABEL: %COLORLABEL% >>C:\temp\digikam.txt
echo PICKLABEL: %PICKLABEL% >>C:\temp\digikam.txt
echo RATING: %RATING% >>C:\temp\digikam.txt
echo TAGSPATH: %TAGSPATH% >>C:\temp\digikam.txt
copy %infile% %outfile%
Se você iniciou o digiKam em um terminal e habilitou os rastreamentos de depuração na página de diálogo Configurações/Diversos/Sistema, verá algo assim:
digikam.general: Action Thread run 1 new jobs
digikam.general: Tool : index= 1 :: name= "UserScript" :: group= Digikam::BatchTool::CustomTool :: wurl= QUrl("file:///mnt/data/Images/SALAGOU")
digikam.general: path: "/mnt/data/Images/SALAGOU/BatchTool-EpEjEz-9e1c7a12.digikamtempfile.JPG"
digikam.general: Tool: "User Shell Script"
digikam.general: Input url: QUrl("file:///mnt/data/Images/SALAGOU/DSC08833.JPG")
digikam.general: Output url: QUrl("file:///mnt/data/Images/SALAGOU/BatchTool-EpEjEz-9e1c7a12.digikamtempfile.JPG")
digikam.dplugin.bqm: Script stdout "INPUT FILE: /mnt/data/Images/SALAGOU/DSC08833.JPG\nOUTPUT FILE: /mnt/data/Images/SALAGOU/BatchTool-EpEjEz-9e1c7a12.digikamtempfile.JPG\nTITLE: Salagou Trip\nCOMMENT: \nCOLORLABEL: 5\nPICKLABEL: 3\nRATING: 3\nTAGSPATH: Places;Places/France;Places/France/Salagou Lake\n"
digikam.dplugin.bqm: Script stderr ""
digikam.dplugin.bqm: Script exit code: 0
As informações do digiKam retiradas do banco de dados são:
O item processado é /mnt/data/Images/SALAGOU/DSC08833.JPG.
O nome do arquivo de destino é /mnt/data/Images/SALAGOU/BatchTool-EpEjEz-9e1c7a12.digikamtempfile.JPG (um arquivo temporário gerado pelo gerenciador de processamento em lote).
O título do item é Salagou Trip.
O comentário do item é nulo.
O rótulo de cor do item é 5 (Verde).
O rótulo de seleção do item é 3 (Aceito).
A classificação do item é 3 estrelas.
As etiquetas do item são Places, Places/France, Places/France/Salagou Lake.
Adicionar uma marca d’água com o ImageMagick¶
O segundo exemplo abaixo é mais complexo e usa a ferramenta de linha de comando ImageMagick para adicionar marcas d’água visíveis sobrepondo um campo de texto multilinha sobre cada imagem na fila.
watermark="This image is\ncopyrighted and\navailable with\nlimited usage"
in_file="$INPUT"
out_file="$OUTPUT"
convert -size 2000x1000 xc:none -gravity center \
-stroke yellow -pointsize 120 -font Courier-BoldOblique \
-strokewidth 3 -annotate +100+100 "${watermark}" \
-blur 0x25 -level 0%,50% \
-fill white -stroke none -annotate +100+100 "${watermark}" \
"${in_file}" +swap -gravity center -geometry +0-3 \
-composite "${out_file}"
Nota
Neste exemplo, não há uma chamada explícita de exit para retornar um valor ao fluxo de trabalho. O Bash usa o último método chamado como o valor retornado do script, neste caso, a ferramenta de linha de comando convert do ImageMagick.
Isso dá um resultado como o abaixo.
O resultado do script usando o ImageMagick para aplicar uma marca d’água¶