Faceți căutări pe acest blog

vineri, 30 septembrie 2011

Watermarks imagini/ Imagemagick

 Cred c-ați văzut până acum pe diferite site-uri/ bloguri imagini marcate cu vreo siglă sau inscripție, pentru a nu fi copiate de altcineva fără a fi specificată sursa, sau pentru a personaliza imaginea respectivă. Sigla/ imaginea/ inscripția adăugată imaginii se numește watermark. Putem folosi imagini .png, .jpg, .jpeg, etc.

 Hai să vedem cum putem face și noi același lucru cu imaginile puse pe bloguri, fie că sunt screenshoturi sau altceva. Cum sunt pasionat de CLI, aceasta va fi metoda prezentată. Trebuie să instalăm pachetul imagemagick din care vom folosi câteva utilitare precum: import, convert și composite.

 În primul rând avem nevoie de o imagine, să ”personalizăm” un screenshot. De obicei folosesc scrot sau ksnapshot (și fbgrab în tty), dar acum vom folosi import, pentru a ne limita la pachetul imagemagick...
 Comanda folosită în consolă va fi:  import -window root screen.png
 Parametrul -window root este necesar pentru a captura tot ecranul cu ferestrele deschise pe el, altfel vom captura doar o ferestră sau wallpaperul de pe desktop...
 Acesta este screenshotul rezultat:

 Acum avem imaginea, haideți să o marcăm cu un text sau cu altă imagine.

1- Marcare cu text
În același terminal/ consolă vom da o comandă care va adăuga un text imaginii, în funcție de preferințele noastre, folosindu-ne de composite sau convert. Cea mai simplă variantă este următoarea:
composite label:TEXT opțiuni sursă.png rezultat.png
Implicit textul va fi adăugat în colțul stânga sus, dacă preferăm altă parte a imaginii vom folosi opțiunea -gravity, la care trecem locul dorit. Valorile recunoscute de gravity:
-center                = centrul imaginii
-south                 = centru- jos
-north                 = centru- sus
-east                   = dreapta
-west                  = stânga
-northwest          = dreapta- sus
-northeast          = stânga- sus
-southwest         = stânga- jos
-southeast          = dreapta- jos
  Două exemple:
 composite label:Stressat screen.png screen1.png


 composite label:Stressat -gravity southwest screen.png screen2.png



 Să mergem mai departe, poate dorim un font mai mare, sau alt tip de font, alte culori, sau alte modificări. Comanda:
convert screen.png -gravity south \
          -stroke '#000C' -strokewidth 6 -pointsize 60 -annotate 0 'Stressat' \
          -stroke  none   -fill white    -annotate 0 'Stressat' \
          screen4.png

 va da următorul rezultat:
 Parametrul -pointsize stabilește dimensiunea fontului, -fill setează culoarea textului, putem folosi mai multe cuvinte în textul adăugat, etc.

convert screen.png -gravity center \
          -stroke '#000C' -strokewidth 6 -pointsize 60 -annotate 0 'Stressat' \
          -stroke  none   -fill yellow    -annotate 0 'Stressat.blogspot.com' \
          screen4.png

 
 Deasemenea putem afișa textul pe mai multe linii:

convert screen.png -gravity center \
          -stroke '#000C' -strokewidth 6 -pointsize 60 -annotate 0 'Stressat' \
          -stroke  none   -fill red    -annotate 0 'Stressat \n.blogspot \n.com' \
          screen5.png





2- Marcare cu imagine/ logo
 Putem crea noi mici imagini logo cu care să marcăm imaginile noastre. Voi continua cu același exemplu, cu textul ”Stressat”.
convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
           -fill navy -annotate +25+65 'Stressat' \
           -distort Arc 120  -trim +repage \
           -bordercolor lightblue -border 10  font_arc.jpg

ne va face logo-ul următor:
convert -size 320x100 xc:lightblue -font Candice -pointsize 72 \
    -fill red  -annotate +25+65 'Stressat' \
    -background lightblue -wave -50x640 -crop x110+0+10 \
    font_wavy.jpg

 va face alt logo:

 convert -size 320x100 xc:black -font Arial -pointsize 80 \
          -fill white   -annotate +5+70 'Stressat' \
          -gamma 2  +level 0,1000 -white-threshold 999 \
          -morphology Distance:-1 Chebyshev:1,1000 -auto-level \
          -shade 135x30 -auto-level +level 10,90% font_chebyshev.jpg

ne va crea un logo mai tern:

Tot ce ne rămâne de făcut este să ”lipim” unul din aceste logo-uri imaginii destinate personalizării. Acum vom folosi comanda composite:
composite -gravity  ”poziție” ”watermark” ”imagine sursă” ”imagine rezultată”


Putem folosi și opțiune de transparență pentru logo (-dissolve x,  unde x reprezintă valoarea transparenței în procente: -dissolve 45 înseamnă coeficient de transparență de 45%, etc, cu cât coeficientul este mai mic cu atât opacitatea este mai mică, logo-ul fiind mai transparent), o posibilă comanda este:
composite -gravity  north -dissolve 20 logo.png imagine.png rezultat.png 

composite -gravity  north -dissolve 20 logo.jpg screen.png screen8.png



 Folosind un logo ca watermark, și captura de ecran (zona unde va fi pus logo va fi în acest exemplu colțul stânga- jos) vom avea:

 composite -gravity southwest font_wavy.jpg  screen.png screen-watermark.png



 Evident putem folosi și altceva ca watermark, o altă imagine de exemplu.
composite -gravity southwest Pictures/samurai.jpg  screen.png screen-watermark1.png

 Se pot adăuga simultan în mai multe poziții watermarks:
convert screen.png \
>           -gravity center     watermark.png  -compose Over     -composite \
>           -gravity northeast  watermark.png  -compose Over  -composite \
>           -gravity southwest  watermark.png  -compose Over -composite \
>           screen-multip.png






3- Marcare în grup
 Haideți să vedem cum putem adăuga watermarks la mai multe imagini simultan, idee și script luate de aici:  http://savvyadmin.com/resize-and-watermark-images-in-linux/).

  Presupunem că avem imaginile noastre în directorul ~/Pictures, vom crea încă două directoare ~/Pictures/temp și ~/Pictures/watermark. În temp vom copia imaginile cărora dorim să le adăugăm watermark, iar în watermark vom copia imaginea care va servi de watermark. Watermarkul va trebui redimensionat la o mărime rezonabilă (sau căutăm pe net o imagine mică, gen pictogramă), o unealtă comodă este Kim4 : vedeți aici la ce mă refer, sau folosind convert:
convert -resize 80 sursă.png rezultat.png
Comanda precedentă va redimensiona imaginea inițială (sursă.png) la o valoare de 80 pixeli pe lățime (înălțimea fiind calculată automat în raport...), iar imaginea micșorată se va numi rezultat.png (veți înlocui denumirile sursă și rezultat cu ce trebuie).

 Ok, să trecem la treabă. Vom crea un fișier text numit watermark.sh (touch watermark.sh) în care vom copia următorul text:

#!/bin/bash
WATERMARK="$HOME/Pictures/watermark/watermark.png"

echo "*****************************************"
echo "* Image Resize and Watermarking Script  *"
echo "* By Gilbert Mendoza -  SavvyAdmin.com! *"
echo "*****************************************"
echo " "

for each in ~/Pictures/temp/*{.jpg,.jpeg,.png}
 do
  echo "Working on $each ..."
  composite -gravity southwest $WATERMARK "$each" "$each" >> /dev/null
  echo "... Done!"
 done
exit 0



 Vom face fișierul executabil (chmod a+x watermark.sh), copiem câteva imagini în ~/Pictures/temp și le adăugăm watermarkul din ~/Pictures/watermark:
./watermark.sh


  Puteți vedea cum lucrează marcarea în bloc a câtorva imagini și una din ele:







 Imagemagick știe să facă mult mai mult de atât, puteți citi documentația excelentă, sunt date exemple concrete...
 Sursă: http://www.imagemagick.org/Usage/


PS: Fără legătură cu watermarks, doar cu manipularea în alt mod a imaginilor cu imagemagick, adăugarea watermarks fiind doar un fel de manipulare... În încheiere vreau să vă prezint două chestii amuzante privind manipularea imaginilor cu imagemagick:
1- captură ”negativ” desktop (culori inversate):
import -window root -negate negativ.png


 Putem obține și negativul unei imagini pe care o avem deja, vom lua de exemplu screnshotul cu care am început acest material:
convert -negate screen.png screen-neg.png


2- rotire captură (opțiune -rotate grade):
import -window root -rotate 15 rot.png


 Sau putem roti o imagine existentă:
convert -rotate 320 screen.png screen-rot.png


 Putem folosi în paralel cele două opțiuni:
convert -rotate 345 -negate screen.png screen-modify.png

Niciun comentariu:

Trimiteți un comentariu

Back to top