Aangepast script

Overzicht

De Takenwachtrijbeheerder biedt u het aanpassen van een Werkmethode door het hulpmiddel Aangepast script toe te voegen om uw afbeeldingen te met zoiets als ImageMagick of ExifTool.

Het hulpmiddel Aangepast script is beschikbaar uit de categorie Aangepaste hulpmiddelen van de lijst Basis hulpmiddelen. Het hulpmiddel is ontworpen om de broncode voor een shell-script uit te voeren die één of meer opdrachtregelprogramma’s aanroept voor elk item in de wachtrij. Het shell-script is door de gebruiker geheel binnen de plug-in geschreven. Deze scripts kunnen een set omgevingsvariabelen omvatten die bestandsnamen en een paar typen metagegevens kunnen specificeren.

De Takenwachtrijbeheerder die een aangepast script invoegt in een werkmethode

Het hulpmiddel levert drie opties:

  • Type uitvoerafbeelding: specificeert het verwachte type afbeeldingsformaat bij de uitvoer van uw script. De standaard is Zelfde als invoer, maar u kunt JPEG, PNG of TIFF instellen. Merk op dat JPEG een compressieformaat is met verlies, alleen 8-bits kleurdiepte ondersteunt en geen transparantie ondersteunt.

  • Shell-script: dit tekstveld is waar u de broncode van uw shell-script invoert. Bash script wordt ondersteund onder Linux en macOS. Batch-script wordt ondersteund onder Windows.

De sleutelwoorden die u in uw script kunt gebruiken staan hier onder. Het hulpmiddel zal alle voorkomens van sleutelwoorden in het shell-script bij uitvoeren vervangen voordat het script wordt uitgevoerd. Merk er op dat sleutelwoorden hoofd- en kleine letters onderscheiden.

  • $INPUT wordt door de werkmethode vervangen door de invoerbestandsnaam (met speciale tekens escaped).

  • $OUTPUT wordt door de werkmethode vervangen door uitvoerbestandsnaam (met speciale tekens escaped).

Belangrijk

Een nieuw bestand wordt altijd verwacht op $OUTPUT. Script-programma’s die geen nieuw bestand maken (bijv. wijzigen van metagegevens met ExifTool) moeten eerst $INPUT naar $OUTPUT kopiëren met de opdracht geschikt voor het besturingssysteem en daarna de wijzigingen doen op $OUTPUT.

De omgevingsvariabelen die u kunt gebruiken in uw shell-script zijn:

  • TITLE: om de eigenschappen van item Titel te gebruiken.

  • COMMENTS: om de eigenschappen van item Opschrift te gebruiken.

  • COLORLABEL: om de eigenschappen van item Kleurlabel te gebruiken.

  • PICKLABEL: om de eigenschappen van item Keuzelabel te gebruiken.

  • RATING: om de eigenschappen van item Waardering te gebruiken.

  • TAGSPATH: om de eigenschappen van item Tags te gebruiken.

Al deze eigenschappen zijn per set gebaseerd op de afbeeldingseigenschappen opgeslagen in de database van digiKam.

Notitie

Onder Linux en macOS kunnen omgevingsvariabelen in het script gebruikt worden met $ als een prefix van namen van variabelen (bijvoorbeeld $INPUT). De interpreter die het script uitvoert is /bin/bash.

Onder Windows kunnen omgevingsvariabelen in het script gebruikt worden met % als een voor- en achtervoegsel van namen van variabelen (bijvoorbeeld %INPUT%). De interpreter die het script uitvoert is cmd.exe

Teruggegeven waarde

De conventie van een Bash-script onder Linux en macOS geeft 0 bij succes of een geheel getal in de reeks van 1-255 voor een fout. Gebruik exit < error_code > om de teruggegeven waarde aan de werkmethode door te geven.

Onder Windows geeft een Batch-script een 0 terug bij success en een andere waarde voor een fout, maar de waarde is een geheel getal met teken, dus een negatieve waarde is mogelijk. gebruik EXIT /B < error_code > om de teruggegeven waarde aan de werkmethode door te geven.

De Takenwachtrijbeheerder behandelt de waarde teruggeven door uw script. Als nul wordt teruggegeven zal de werkmethode doorgaan zoals verwacht, anders zal de werkmethode onderbroken worden en de Takenwachtrijbeheerder stopt het verwerken.

Voorbeelden

Proof of Concept

Dit eerste voorbeeld dat u onderstaand ziet doet niets speciaals. Het zal op de console de invoer/uitvoer bestandsnamen en eigenschappen van items doorgegeven aan de takenwachtrijbeheerder naar het script afdrukken en kopieert het invoerbestand naar het uitvoerbestand (deze stap is vereist om te voorkomen dat de takenwachtrijbeheerder bij terugkrijgen van een fout omdat het doelbestand niet bestaat). Het script geeft de waarde terug van de kopieeropdracht van het bestand, deze wordt bekeken door de takenwachtrijbeheerder voor elk item in de werkmethode.

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 $?

Als u digiKam vanaf een terminal hebt gestart en de debugtraces hebt aangeschakeld Dialoogpagina Instellingen/Diversen/Systeem, dan zult iets zien zoals dit:

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

De informatie van digiKam genomen uit de database is:

  • Verwerkt item is /mnt/data/Images/SALAGOU/DSC08833.JPG.

  • Doelbestandsnaam is /mnt/data/Images/SALAGOU/BatchTool-EpEjEz-9e1c7a12.digikamtempfile.JPG (een tijdelijk bestand gegenereerd door takenwachtrijbeheerder).

  • Titel van item is Salagou Trip.

  • Item Commentaar is null.

  • Item Kleurlabel is 5 (Groen).

  • Item Keuzelabel is 3 (Geaccepteerd).

  • Item Waardering is 3 sterren.

  • Item Tags zijn Plaatsen, Plaatsen/Frankrijk, Plaatsen/Frankrijk/Salagou Lake.

Een watermerk toevoegen met ImageMagick

Het tweede onderstaande voorbeeld is complexer en gebruikt het opdrachtregelcommando ImageMagick een zichtbaar watermerk toe te voegen door een meerregelig tekstveld bovenop elke afbeelding in de wachtrij te zetten.

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}"

Notitie

In dit voorbeeld is er geen expliciete exit aanroep om een waarde aan de werkmethode terug te geven. Bash gebruikt de laatst aangeroepen methode als de terugkeerwaarde uit het script, hier de opdracht van ImageMagick convert.

Dit geeft een resultaat zoals onderstaand.

Het resultaat van het script met gebruik van ImageMagick om een watermerk toe te passen