T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
23rd March

Dinamično kreiranje / Upravljanje slik

Dinamično kreiranje oz. upravljanje slik (na centralni lokaciji), ki jih imamo na strežniku in jih na primer prikazujemo skozi HTML Img tag nam včasih pride zelo prav:

  • povečevanje / zmanjševanje slike brez popačenja (kot naprimer pride pri img tag, če defeniramo napačno širino / višino)
  • če slika ne obstaja lahko podamo generično sliko, ki sporoči uporabniku, da slike ni moč najti
  • lahko kontroliramo ali prikažemo sliko ali ne (lahko prikažemo tudi drugo sliko)
  • v primeru fizičnega premikanja slike na FTP-ju (strežniku) nam v img tagu še vedno ostane enak klic PHP datoteke


Sploh prva možnost zna biti zelo uporabna. Poglejmo si primer kode, ki bo sliko dinamično povečala / zmanjšala:

PHP:
  1. $width      = ($width    !== false) ? $width     : imagesx($original);
  2. $height     = ($height   !== false) ? $height    : imagesy($original);
  3.  
  4. $newImage   = imagecreatetruecolor($width, $height); //RM Output new image
  5. imagecopyresampled($newImage, $original, 0, 0, 0, 0, $width, $height, imagesx($original), imagesy($original));
  6. header ("Content-type: image/jpeg");
  7. @ImageJPEG ($newImage);

Primer klica PHP skripte skozi HTML Img tag:

HTML:
  1. <!-- #1 --> <img src="getimage.php?image=trsplet" alt="This is trsplet site image" />
  2. <!-- #2 --> <img src="getimage.php?image=trsplet&default=1" alt="This is trsplet site image" />
  3. <!-- #3 --> <img src="getimage.php?image=trsplet&default=1&width=500&height=300" alt="This is trsplet site image" />

#1: PHP prikaže sliko, če ta obstaja. V primeru, da ne obstaja vrne 404 error - site not found.

#2: PHP prikaže sliko, če ta obstaja. V primeru, da ne obstaja vrne privzeto sliko s katero želimo uporabniku sporočiti, da je prišlo do napake.

#3: PHP prikaže sliko s točno določeno višino ali širino

Varnost:
Podobno kot pri centralni skripti za upravljanje datotek tudi tukaj obstaja možnost, da bi kdo poskušal dobiti datoteke, ki jih nočemo prikazati oz. ne bi smeli biti javne ali pa te datoteke niso slike. Da se proti temu zavarujemo naredimo sledeče:

  • pogledamo ali je podana datoteka res slika
  • filename URL parameter dodamo k naši osnovni pot, tako da ne uporabimo direktno pot iz URL-ja (v primeru, da je kdo hotel dobiti datoteko izven images direktorija)

Primer skripte, ki skrbi zato:

PHP:
  1. $imagePath  = '/static/images/'; //RM Add your path to images
  2. $file       = $imagePath . $image;
  3.  
  4. if (file_exsists($file) and is_readable($file)) {
  5.     $info = getimagesize($file);
  6.  
  7.     if ($info !== false and isset($mimeTypes[$info['mime']]) and ($imageType = $mimeTypes[$info['mime']])) {
  8.         //RM This is picture ...
  9.     }
  10. }

Datoteke:

Več informacij:

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. Manipulacija slik s PHP-jem – cache slik – 304 Not Modified
  2. PHP – dinamično generiranje tekst slike – font image generator
  3. PHP knjižice za delo s slikami – WideImage | Thumbnailer
  4. PHP – Kreiranje Excel datoteke – Pisanje v Excel datoteko – PHP – xls
  5. Preprosta skripta – kreiranje Excel datoteke iz PHP tabele/array
  6. Primerjava JPG, GIF in PNG formatov slik za internet
  7. PHP – izdelava galerije – preprosta skripta za prikazovanje slik
  8. PHP – pretvorba Excel datoteke v .txt datoteko – Excel to txt converter
  9. AJAX iskanje datotek, dodajanje v seznam ter predogled le teh (PDF, jpeg)
  10. MySQL kreiranje tabele s SELECT stavkom

14x komentirano na “Dinamično kreiranje / Upravljanje slik”

  1. fett je napisal:

    Link na bmp.php ne pokaže sourca (preimenuj v .inc). A si lahko bmp.php sposodim za svojo WideImage knjižnico?

  2. Roky je napisal:

    Sem popravil v .inc. Source ni moj, je pa prosto dostopen, ampak od JPEX (v source kodi zapisano). Sem dodal avtorja v link.

    Njegova stran: http://www.jpexs.com/news.html
    Download: http://www.jpexs.com/download/php/bmp.php

  3. fett je napisal:

    hvala

  4. Roky je napisal:

    Ni problema, z veseljem:P

  5. brezimenko je napisal:

    Mene mal bega tole z mimetype-om slike. V eni od skript sem preverjal, če je uporabnik naložil dovoljeno vrsto datoteke. V primeru da je naložil *.jp(e)g sliko preko IE (6 in 7), je skripta datoteko zavrnila, češ da ni v pravem formatu, kjub "image/jpeg". V ostalih brkskalnikih je delovalo. Ko pa sem dodal za primer *.jpg slike v preverjanje "image/pjpeg", pa je delovalo tudi v IE-ju.

  6. Roky je napisal:

    PJPEG - progressive JPEG - http://www.faqs.org/faqs/jpeg-faq/part1/section-11.html

    Drugače pa probaj ugotovit mimetype od slike z http://www.php.net/manual/en/function.exif-imagetype.php in sporoči če bo boljše.

  7. smottt je napisal:

    ja, IE ima svoje muhe. tudi pri .png moraš dodat image/x-png in podobne :D

  8. brezimenko je napisal:

    A maš še kkšen tak zanimiv link kjer bi recimo bila razlaga, zakaj je razlika v IE (tipično :) ) napram ostalim brskalnikom? :)
    Drugače pa hvala.

  9. Roky je napisal:

    Nekaj najdeš tudi tukaj http://seewhatever.de/blog/?p=50 ... IE podpira PJPEG, Firefox pa ne:P (neki novga).

    @smottt: Upamo na boljše čase z Firefox 3, IE 8

  10. smottt je napisal:

    upamo upamo :) samo še zmeraj bo treba za kompatibilnost za nazaj gledat..

  11. Roky je napisal:

    Ja, čeprov skoz manj. IE 5, 5.5 se skoerj nikjer ne gleda. Ko pride IE 8.0 bomo (vsaj zdi se mi al pa bolj rečen, upam) ukinl podporo za IE 6.0, pa bo IE 7.0 tist najnižji. Bomo videli:)

  12. gasper_k je napisal:

    IE lahko enostavno prevaraš; v url za sliko dodaš ime slike na koncu, recimo takole:

    http://url/slika.php?id=34&file=/slikica.jpg

    in IE misli, da je datoteki ime slikica.jpg, ne glede na vse headerje na svetu. :)

  13. Roky je napisal:

    Kul stvar, nisem vedel.

  14. PHP knjižice za delo s slikami – WideImage | Thumbnailer | .: TRSplet - internetne storitve :. je napisal:

    [...] O osnovnih operacijah s pomočjo GD knjižnice nad slikami smo na T&R Splet blogu že opisali. Sedaj si poglejmo nekaj primerov operacij s knjižnico WideImage ter Thumbnail. WideImage knjižnica je slovenskega porekla (Fatg), Thumbnailer pa gostuje Ian Selby. Ob brskanju informacij o avtorju te skripte sem opazil, da je na voljo nova izboljšana verzija Thumbnailer-ja, ki se sedaj imenuje PHP Thumb. [...]

Dodaj komentar