Cum se poate face marcarea pozelor in vederea personalizarii acestora inainte de publicarea pe site? Acest capitol este un studiu de caz pentru unul din posturile publicate anterior: iterarea fisierelor dintr-o structura de directoare.

Solutia gasita de mine in vederea marcarii unei poze este utilizarea unui soft de procesare imagini care permite executarea de operatii pe imagini utilizand comenzi windows shell. Eu am folosit ImageMagick, un procesor de imagini care ofera foarte multe functionalitati de procesare imagini. Am descarcat si am instalat aplicatia la mine pe calculator, si am folosit urmatoarea comanda pentru marcarea unei imagini:

composite -dissolve 70% -gravity NorthEast -geometry +5+5 stamp.png source.jpg target.jpg

Comanda suprapune stamp.png peste source.jpg in coltul din dreapta sus a acesteia, pastrand o margine de 5 pixeli fata de margini si salveaza rezultatul in target.jpg. Rezultatul este urmatorul:

         
source.jpg                                  stamp.png                               target.jpg    

Ce se intampla daca avem un album foto in care adaugam si adaugam poze pe care vrem sa le marcam? Incepem si rulam comanda pentru fiecare poza in parte? Nu, ar fi foarte costisitor. Cel mai bine este sa automatizam acest proces creand o mica aplicatie care sa primeasca ca parametru un folder de poze si o stampila cu care sa le marcheze.

Pregatirea structurii presupune urmatoarele etape:
- cream un folder: c:\stamp
- in acest subfolder, cream folderul c:\stamp\pictures
- copiem pozele in subfolderul pictures deabia creat
- copiem fisierul stampila stamp.png in c:\stamp
- cream fisierul shell stamp.bat in care scriem codul de mai jos
- rulam stamp.bat cu dbl-click pe fisier

Rezultatul efectuarii pasilor de mai sus duce la stampilarea tuturor pozelor care se gasesc in folderul pictures sau in subfolderele acestuia. Nu se iau in considerare decat fisierele de tip .png, .jpg, .gif si .bmp. Fisierele stampilate vor purta numele fisierului original, sufixat de particola "_stamp"

Vom folosi scriptul de iterare a fisierelor si il vom adapta necesitatilor curente:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET FOLDER_TO_ITERATE=%cd%\pictures
SET PREFIX=_stamp
SET STAMP="%cd%\stamp.png"

CD !FOLDER_TO_ITERATE!

REM Iteram structura de directoare
FOR /R . %%A IN (.) DO (
SET COUNT=0

REM Iteram subdirectorul curent,contorizand fisierele imagine si retinand ultimele nume, extensie si path.
FOR %%B IN ("%%~A"\*.jpg "%%~A"\*.gif "%%~A"\*.png "%%~A"\*.bmp) DO (
SET /A COUNT+=1
SET FileName=%%~nB
SET FileExtension=%%~xB
SET FilePath=%%~dB%%~pB
)

REM Daca am gasit un singur fisier.
IF !COUNT! EQU 1 (
ECHO Marcam: !FilePath!!FileName!!FileExtension!
composite -dissolve 70% -gravity SouthEast -geometry +5+5 !STAMP! "!FilePath!!FileName!!FileExtension!" "!FilePath!!FileName!!PREFIX!!FileExtension!"
)

REM Daca au fost gasite mai multe fisiere, re-iteram fisierele imagine din subfolder.
IF !COUNT! GTR 1 (
SET COUNT=0
FOR %%B IN ("%%~A"\*.jpg "%%~A"\*.gif "%%~A"\*.png "%%~A"\*.bmp) DO (
SET /A COUNT+=1

SET Source="%%~dB%%~pB%%~nB%%~xB"
SET Target="%%~dB%%~pB%%~nB!PREFIX!%%~xB"

ECHO Marcam !Source!
composite -dissolve 70% -gravity SouthEast -geometry +5+5 !STAMP! !Source! !Target!

)
)
)