Úvod > PHP, Programování > Vodotisk do obrázků zboží na www.babyobchod.cz

Vodotisk do obrázků zboží na www.babyobchod.cz

08.05.2009 | Zobrazeno: 7100x Zanechte komentář Přejít na komentáře

ss_boNa adrese www.babyobchod.cz je zprovozněn internetový obchod se zaměřením na prodej zboží pro kojence, nemluvňata a děti. V tomto internetovém obchodě, který jsem firmě Artex K, s.r.o. naprogramoval na zakázku, chtěli majitelé automatiky k obrázku vložit vodotisk. Obrázek se nechá připojit k nově vytvářejícímu zboží a nebo k již existujícímu. Zaserfoval jsem po internetu a narazil na pár zdrojáků, které jsem si přepsal do funkce použitelné v jádru obchodu. Výsledná funkce, jejíž zdrojový kód je k dispozici níže, zajišťuje hned 4 úkony:

  • přerozměruje (převzorkuje) vstupní obrázek na požadované rozlišení (zanechá poměry stran)
  • vloží do levého dolního rohu černě orámovaný text na bílém pozadí (text představuje URL obchodu)
  • vloží do pravého dolního rohu černě orámované logo (například logo výrobce zboží)
  • vloží vodotisk (sloučí vstupní obrázek s externím představující například název nebo logo obchodu)

Musíme mít zajištěno, že obrázek se kterým chceme pracovat, je uložen ve správném adresáři (proměnné v úvodu funkce). Dále správně nastavit cestu k obrázku s logem výrobce a k obrázku pro vodotisk. Logo výrobce se pozicuje od pravého dolního rohu, takže doporučuji, aby nemělo velké rozlišení, maximálně 1/3 obrázku zboží. Obrázek pro vodotisk by měl být menší než požadované výsledné rozlišení, jinak se tam nevejde. Vodotisk by měl být obrázek typu GIF, kde můžeme zajisti průhledné pozadí.

image

Původní obrázek zboží – autosedačka

image

Zdrojový obrázek pro vodotisk

image

Výsledný obrázek zboží s vodotiskem, logem výrobce a URL
<?php
  // Převzorkuje obrázek na požadované rozlišení, vloží orámovaný text, logo a vodotisk
  function prevzorkovat($nazev_souboru, $nazev_souboru_logo) {
    $adr_uloziste_souboru = "zaloha_obr";
    $adr_uloziste_souboru_loga = "zaloha_obr/loga";
    $adr_uloziste_vysled_obr = "obr";
    $nazev_souboru_vodotisk = 'bo.gif';
    $poradovana_sirka = 550;
    $poradovana_vyska = 550;
    $url_obchodu = "www.babyobchod.cz";
    $soubor = $adr_uloziste_souboru."/".$nazev_souboru;
    list($sirka, $vyska) = getimagesize($soubor);
    if ($sirka > $vyska) { $nova_sirka = $poradovana_sirka; $nova_vyska = $vyska * ($poradovana_sirka / $sirka); }
    else { $nova_vyska = $poradovana_vyska; $nova_sirka = $sirka * ($poradovana_vyska / $vyska); }
    $zmenseny = imagecreatetruecolor($nova_sirka, $nova_vyska);
    $zdroj = imagecreatefromjpeg($soubor);
    imagecopyresampled($zmenseny, $zdroj, 0, 0, 0, 0, $nova_sirka, $nova_vyska, $sirka, $vyska);
    $cerna_barva = imagecolorallocate($zmenseny, 0, 0, 0);
    $bila_barva = imagecolorallocate($zmenseny, 255, 255, 255);
    imagefilledrectangle($zmenseny, 3, ($nova_vyska - 21), 129, ($nova_vyska - 3), $bila_barva);
    imagerectangle($zmenseny, 3, ($nova_vyska - 21), 129, ($nova_vyska - 3), $cerna_barva);
    imagestring($zmenseny, 3, 7, ($nova_vyska - 19), $url_obchodu, $cerna_barva);
    if ($nazev_souboru_logo != "") {
      $soubor_logo = $adr_uloziste_souboru_loga."/".$nazev_souboru_logo;
      list($sirka_logo, $vyska_logo) = getimagesize($soubor_logo);
      if ($nazev_souboru_vodotisk != "") {
        $soubor_vodotisk = $adr_uloziste_souboru_loga."/".$nazev_souboru_vodotisk;
        list($sirka_vodotisk, $vyska_vodotisk) = getimagesize($nazev_souboru_vodotisk);
        $zdroj_logo = imagecreatefromjpeg($soubor_logo);
        $zdroj_vodotisk = imagecreatefromgif($soubor_vodotisk);
        imagecopymerge($zmenseny, $zdroj_logo, ($nova_sirka - $sirka_logo - 3), ($nova_vyska - $vyska_logo - 3), 0, 0, $sirka_logo, $vyska_logo, 100);
        imagerectangle($zmenseny, ($nova_sirka - $sirka_logo - 3), ($nova_vyska - $vyska_logo - 3), ($nova_sirka - 3), ($nova_vyska - 3), $cerna_barva);
        $xko = ($nova_sirka/2)-($sirka_vodotisk/2); 
        $yko = ($nova_vyska/2)-($vyska_vodotisk/2);
        imagecopymerge($zmenseny, $zdroj_vodotisk, $xko, $yko, 0, 0, $sirka_vodotisk, $sirka_vodotisk, 37);
      }
    }
    imagejpeg($zmenseny, $adr_uloziste_vysled_obr."/".$nazev_souboru);
  }
?>
1 bod2 body3 body4 body5 bodů6 bodů7 bodů (3x hlasováno, průměr: 4,00 ze 7)
Loading...Loading...
  1. 01.08.2010 na 12:40 | #1

    OK, hlavně že skript pomohl.

    Nesouvísí to sice s tímto článkem, ale dovolím si jednu zmínku. Firma provozujcí doménu babyobchod.cz zkrachovala a tím pádem odešlo vše co jsem vytvářel do kremíkového nebe. 😐

  2. 01.08.2010 na 07:52 | #2

    Pardón, jsem ale deb***, neuvědomil jsem si že sám o sobě skript obrázek nevyvolá, ale pouze vytvoří nový obrázek a uloží do adresáře.

  3. 01.08.2010 na 07:39 | #3

    Dle Vašeho příkladu se mi vygeneruje pouze bílá stránka. Nevíte v čem by mohl být problém?

  1. Žádné zpětné odkazy
  • RSS
  • Twitter
  • Facebook
  • LinkedIn
  • Picasa
  • Flickr
  • YouTube