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

sâmbătă, 24 septembrie 2011

Kde (+ Compiz Fusion) hotkeys

 De ceva vreme, o mică problemă mă scoate din sărite, o chestie minoră, dar iritantă și persistentă, legată de scurtăturile din tastatură. A început să se manifeste în Arch Linux/ Kde 4.6.8 (4.7 Beta1), și acum a apărut și-n Mandriva 2011/ Kde 4.6.5. I´m really pisted off... :(
 Mai exact, obișnuiesc să pornesc aplicațiile din tastatură, mi se pare mult mai comod și rapid, pe lângă shortcut-urile normale în Kde (Alt+F1= meniu, Alt+F2= Krunner, PrintScreen= Ksnapshot, Ctrl+Alt+k= schimbare layout tastatură, F12= Yakuake, etc), îmi creez întotdeauna propriile combinații de taste (Ctrl+Shift+f= firefox, Ctrl+Shift+d= Dolphin, Ctrl+Shift+k= Konsole, etc, evident se pot aloca orice taste...). Ei bine (vorba vine, de unde...), la un moment dat, unele din combinațiile implicite (krunner, ksnapshot, schimbare layout, și-ncă vreo două mai puțin importante) nu mai funcționează, DAR numai când folosesc ca WM compiz, dacă trec pe Kwin, totul revine la normal... Wtf, sunt un tip încăpățânat, așa că dacă vreau să folosesc compiz, folosesc compiz, deci trebuie să-mi setez alte shortcut-uri pentru aplicațiile mele, că doar n-o să caut prin meniu de nebun (am zis că o combinație din astea e krunner? fără krunner viața e grea!), sau să-mi umplu desktopul de icoane, nu? :( Nu de alta, dar desktopul meu arată cam așa:



  Soluția? Systemsettings, normal, acolo se fac setările în kde.



Mai exact: Systemsettings- Shortcuts and Gestures- Custom Shortcuts- Edit- New- Global Shortcut- Command/Url- în loc de ”New action” scrieți numele aplicației- în partea dreaptă a ferestrei systemsettings la ”Trigger” tastați combinația dorită (oricare ar fi, important e să o rețineți, să fie asociată cu aplicația respectivă), iar la ”Action” trebuie scris numele exact al aplicației (în exemplele mele: firefox, dolphin, konsole, ksnapshot, krunner, sau ce altceva doriți...)- Apply. Gata, aveți setate combinațiile, le puteți folosi. De exemplu, eu folosesc tasta Meta (tasta cu sigla windows din stânga, cea dintre Ctrl și Alt)  sau combinația Ctrl+Shift însoțite de inițiala aplicației (f= firefox, k= konsole, etc).





 Mai rămâne probema meniului în Mandriva 2011, acum combinația Alt+F1 este alocată implicit pentru Rosa Meniu, nu pentru kmenu, deci vom da clic dreapta pe Menu- ”Application Launcher Menu Settings”- ”Keyboard Shortcut”- ”Input”- apăsăm combinația dorită- Ok. În cazul în care combinația respectivă este alocată pentru altceva, veți primi un mesaj, urmând să alegeți altă combinație sau să apăsați butonul ”Reassign”, care va re-aloca acea combinație pentru ce dorim noi.

 




 PS: cei cu ochi buni cred că au observat singuri că sistemul ăsta nu e Arch ci Mandriva 2011... Ați încercat Mandriva 2011? Nuuu??? Ce mai așteptați?

duminică, 18 septembrie 2011

Newsbeuter/ Mesaje de pe forum in consolă

 Inspirat de un topic: http://forum.ubuntu.ro/viewtopic.php?&pid=119703#p119703 (cu această ocazie trebuie să exprim mulțumirile mele către nomemory!) , am încercat să citesc noile mesaje de pe forumurile urmărite de mine (de, trebuie să învăț și eu ceva de undeva, nu?) direct în consolă.

 Ușor de spus, mai greu de făcut, diferențele dintre forumuri, fluxuri de date RSS nu permit o comandă generică, universală, după câte am aflat.
 Așa că am încercat altă abordare, aplicații create special pentru așa ceva, precum Snownews sau Newsbeuter, despre care am aflat pe http://www.mandrivausers.ro/node (mulțumiri pentru symbianflo și maaxx!).  Ambele funcționează perfect, în final m-am oprit la Newsbeuter, în principal pentru aspect și funcționalități, dar și Snownews merită categoric încercat!

 Instalăm Newsbeuter și-l lansăm din consolă cu comanda newsbeuter. Vom primi un mesaj de eroare:

Error: no URLs configured. 
Please fill the file /home/ak/.newsbeuter/urls
with RSS feed URLs or import an OPML file.
newsbeuter 2.4
usage: ./newsbeuter [-i |-e] [-u ] [-c ] [-x  ...] [-h]
     -e    export OPML feed to stdout
     -r    refresh feeds on start
     -i    import OPML file
     -u    read RSS feed URLs from 
     -c    use  as cache file
     -C    read configuration from 
     -X    clean up cache thoroughly
     -x    ... execute list of commands
     -o    activate offline mode(only applies to Google Reader synchronization mode)
     -q    quiet startup
     -v    get version information
     -l    write a log with a certain loglevel (valid values: 1 to 6)
     -d    use  as output log file
     -E    export list of read articles to 
     -I    import list of read articles from 
     -h    this help
 
asta deoarece nu avem setată nici o adresă de unde aplicația să ia fluxul de date. Se rezolvă imediat adăugând adresele necesare în $HOME/.newsbeuter/urls (/home/shogun/.newsbeuter/urls în cazul meu). De exemplu pentru forumurile mandrivausers.ro, archlinux.ro și ubuntu.ro, trebuie adăugat în fișierul de configurare amintit liniile următoare:
http://www.mandrivausers.ro/crss
https://bbs.archlinux.ro/extern.php?action=feed&type=atom
http://forum.ubuntu.ro/rss.php.
 Ok, acum putem porni Newsbeuter și vom vedea toate adresele urmărite de noi.

În bara de jos a newsbeuter se găsesc informații despre modul de funcționare/ comenzile necesare. Navigăm între forumuri cu tastele săgeți sus- jos, vedem noile comentarii apăsând Enter, citim un comentariu complet apăsând tot Enter, cu q ieșim din fereastra comentariului, forumului, închidem newsbeuter.
 Un atu în folosirea newsbeuter îl reprezintă posibilitatea de a intra imediat (apăsând tasta o) în browserul CLI instalat (în cazul meu lynx, sincer nu am verificat cu elinks sau alt browser CLI...), pentru a citi topicul complet, nu doar ultuimul mesaj, în fond e posibil să nu ținem minte exact ce anume s-a discutat.

 Se poate vedea în bara de titlu a consolei și-n numele tabului de jos :

  În concluzie, atât Snownews cât și Newsbeuter sunt niște aplicații foarte ușor de folosit, foarte utile și interesante, orice linuxist ar trebui să încerce ”deliciile” CLI, măcar uneori... :D

 Cei ce vor să afle câte ceva și despre Snownews pot consulta wiki-ul forumului local al utilizatorilor de Mandriva Linux: http://wiki.mandrivausers.ro/mandriva/ghid-2011/terminal_2#snownews

LE: un material mai detaliat despre Newsbeuter: http://blog.sanctum.geek.nz/rss-with-newsbeuter/

vineri, 16 septembrie 2011

Metacaractere/ wildcards

 Metacaracterele sunt caractere ale tastaturii cu înțelesuri speciale pentru shell. Metacaracter este orice caracter al tastaturii care nu este alfanumeric (literă sau cifră) cu excepția punctului (.) și a liniei jos (_). Evident tastele speciale nu sunt luate în considerație (Enter, Tab, Spacebar, tastele săgeți, tastele funcționale, etc)... :D
 Este posibil să cunoașteți deja modul de utilizare al unor metacaractere din DOS sau o suită de Office, hai să vedem cum putem folosi practic metacaractere în linia de comandă, mai precis cum putem substitui un caracter sau o serie de caractere cu metacaractere, urmând ca shell-ul să schimbe în comanda dată metacaracterul cu simbolul/ simbolurile corecte sau să execute ce trebuie. Pe scurt câteva cuvinte despre unele din cele mai folosite metacaractere.

 1- Semnul întrebării (?)= înlocuiește orice caracter.
De exemplu vom căuta un screenshot numit screenshot:
[shogun@arch-stressat ~]$ ls screenshot?.png
screenshot1.png  screenshot2.png  screenshot3.png  screenshot4.png  screenshot5.png  screenshot6.png
Se poate observa că ? a înlocuit un caracter, respectiv 1, 2, 3, 4, 5 sau 6.

 2- Asteriscul (*)= înlocuiește orice și mai ales oricâte caractere.
Urmând același exemplu va fi suficient să dăm comanda:
[shogun@arch-stressat ~]$ ls scr*.png
screenshot1.png  screenshot3.png  screenshot5.png  screenshot.png
screenshot2.png  screenshot4.png  screenshot6.png

 Puteți observa că acum am găsit încă un fișier (screenshot.png), imagine care nu se încadra în prima căutare deoarece după screenshot nu mai este un alt caracter...
  Operațiile acestea se pot face în orice director, cu condiția să dăm calea corectă, și putem folosi 2 sau mai multe metacaractere:
[shogun@arch-stressat ~]$ ls Documents/?il*.png
Documents/wildcards1.png  Documents/wildcards2.png  Documents/wildcards3.png


3- Parantezele pătrate ([ ])= corespunde oricărui caracter singular aflat în interiorul acestor paranteze pătrate. Vom crea în directorul test câteva fișiere, să zicem car, cer, cor, cir și vom face o căutare:
[shogun@arch-stressat ~]$ ls test/c[ai]r
test/car  test/cir

 În directorul test avem de fapt mai multe fișiere:
[shogun@arch-stressat ~]$ ls test
car  cer  cir  cor

deci se poate observa cum funcționează...
 Se vede că s-au găsit două fișiere care corespund comenzii, respectiv fișiere cu numele format din trei caractere, primul c, ultimul r iar cel din mijloc a sau i, test/car și test/cir.
Deasemenea putem căuta astfel un șir, o serie de obiecte, să căutăm niște capturi de ecran numite "screenshot", dar numai unele din ele, vom folosi [a-z] pentru a găsi toate obiectele care se termină cu caracterele dintre a si z (orice litere sau cifre...) :
[shogun@arch-stressat ~]$ ls Documents/screenshot[1-5].png
Documents/screenshot1.png  Documents/screenshot3.png
Documents/screenshot2.png  Documents/screenshot4.png 

Documents/screenshot5.png
 Deasemenea putem combina mai multe metacaractere:
[shogun@arch-stressat ~]$ ls scr*[2-5].png
screenshot2.png  screenshot3.png  screenshot4.png  screenshot5.png


4- Semnul exclamației (!)= anulează, este inversul, reversul, nu este egal. De exemplu adăugând în comanda următoare caracterul ! comanda va șterge fișierele cu nume format din caractere care NU SUNT în paranteze:
[shogun@arch-stressat ~]$ rm test/c[!ae]* 
[shogun@arch-stressat ~]$ls test
car  cer

După cum vedeți celelalte fișiere au fost șterse.
Sau pentru a căuta fișiere care la fel sunt excluse datorită numelor:
[shogun@arch-stressat ~]$ ls s?r*[!3-5].png
screenshot1.png  screenshot2.png  screenshot6.png  screenshot.png



5- Punct și virgulă (;)= acest caracter este folosit pentru a ”lega” două sau mai multe comenzi independente:
[shogun@arch-stressat test]$ cd; pwd; ls -l
/home/shogun
total 6228
drwxr-xr-x  2 shogun root    4096 Sep 15 20:01 bin
drwxr-xr-x  2 shogun root    4096 Sep  4 13:01 Desktop
drwxr-xr-x  2 shogun root    4096 Sep 17 13:02 Documents
drwxr-xr-x  5 shogun root    4096 Sep 15 19:59 Downloads
drwxr-xr-x  3 shogun root    4096 Sep 15 19:52 Everest
drwxr-xr-x  6 shogun root    4096 Sep  3 10:27 fbterm-1.7
drwxr-xr-x  3 shogun root    4096 Sep 15 20:01 html
drwxr-xr-x  3 shogun root    4096 Sep 15 20:01 include
drwxr-xr-x  4 shogun root    4096 Sep 15 20:01 lib
drwx------  2 shogun root    4096 Sep 16 20:28 mail
drwxr-xr-x  5 shogun root   12288 Sep 11 18:31 Music
drwxr-xr-x 23 shogun root    4096 Sep 11 12:32 old-settings
drwxr-xr-x  2 shogun root    4096 Sep 15 20:01 pics
drwxr-xr-x  2 shogun root    4096 Sep 11 17:06 Pictures

Etc, outputul este prea lung.
Comanda anterioară va schimba directorul curent din test în ~ (cd), următoarea parte va afișa directorul (pwd) și-n fine ultima comandă va lista conținutul directorului (ls -l).


6- Pipeline (|)= este folosit pentru executarea a două sau mai multe comenzi, în așa fel încăt comanda următoare să se aplice asupra rezultatului primei comenzi:
[shogun@arch-stressat ~]$ cat .mplayer/config | grep subcp
subcp=latin2


7-  Pipeline dublat (||)= pentru executarea celei de-a doua comenzi doar dacă prima returnează eroare, nu se poate executa. De pildă crearea unui director doar dacă el nu există (cd test/11 || mkdir tmp/11):
[shogun@arch-stressat ~]$ cd test/11 || mkdir test/11
bash: cd: test/11: No such file or directory
[shogun@arch-stressat ~]$ cd test/11
[shogun@arch-stressat 11]$


8- &&= pentru executarea celei de-a doua comenzi doar dacă prima comandă s-a executat cu succes:
[shogun@arch-stressat 11]$ mkdir proba && cd proba
[shogun@arch-stressat proba]$


 Mai sunt multe de aflat despre metacaractere și utilizarea lor, dar aceasta rămâne în sarcina fiecăruia dintre doritori.
Back to top