Autor Zpráva
regvac
Profil *
Ahoj,
mám dotaz, zda je možné nějakou php funkcí jednobarevně obarvit černobílou fotku, např. dát jí barevný nádech? Z této fotky [/url] udělat tuto [url=http://www.ata4.cz/color/modra.jpg] či tuto [url=http://www.ata4.cz/color/cervena.jpg][/url], atd...

Díky
regvac
Profil *
Jejda, špatně jsem vložil odkazy:
cb
modra
cervena
Louka
Profil
Myslím, že takovou funkci by sis musel napsat sám, o žádné nativní nevím.
regvac
Profil *
A alespoň nějaký nápad, jak to zrealizovat?
okolojdouci
Profil *
Jestli "obarvit" znamená posunout celou paletu někam, tak na to jsou v php funkce. Prostě projdeš všechny pixely a každému z nich dejme tomu ubereš 20 % červené.
http://cz.php.net/manual/en/book.image.php
Louka
Profil
PHP funkce které upotřebíš:
http://cz.php.net/manual/en/function.imagecreatetruecolor.php
http://cz.php.net/manual/en/function.imagesetpixel.php

Ano, myslel jsem to tak, že není jedna fce, která by to udělala za tebe, ale je to možné s využitím stávajících.
regvac
Profil *
okolojdouci:
znamená posunout celou paletu někam
Ano, to je ono, jen která z těch odkazovaných funkcí mi pomůže?
regvac
Profil *
Omluva, neměl jsem zaktualizovanou stránku, tak můj dotaz přišel až po tvé odpovědi
Louka
Profil
<?php 

$im = imagecreatefrompng("image.png");

// tady vytáhni $width a $height jako rozměry $im
$width = imagesx($im);
$height = imagesy($im);

$novy = imagecreatetruecolor($width, $height);

  $y = 0;
  while ( $y <= $height ) 
  {
    $x = 0;
    while ( $x <= $width ) 
    {
      $rgb = imagecolorat($im, $x, $y);
      $r = ($rgb >> 16) & 0xFF;
      $g = ($rgb >> 8) & 0xFF;
      $b = $rgb & 0xFF;
      
      // ted je v $r $g $b ulozena barva pixelu... zpracuj jí a použij imagesetpixel  
      // na vytvoření nového obrázku který je v $novy
      
      /* zpracuj barvu - to je na tobě jak */
      
      imagesetpixel($novy, $x, $y, $nova_barva);
    }
  }



EDIT: http://cz.php.net/manual/en/function.imagecolorallocate.php tohle ti pomůže při vytvoření $nova_barva :)
regvac
Profil *
Už to mám po svém:-)

<?php
  function html2rgb($color) {
    if ($color[0] == '#') {$color = substr($color, 1);}
    if (strlen($color) == 6) {list($r, $g, $b) = array($color[0].$color[1], $color[2].$color[3], $color[4].$color[5]);}
    elseif (strlen($color) == 3) {list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);}
    else {return false;}
    $r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
    return array($r, $g, $b);
  }
  $file = 'cb.png';
  $obr = imagecreatefrompng($file);
  $color = "ff0000";
  $color_rgb = html2rgb($color);
  list($width, $height, $type, $attr) = getimagesize($file);
  for ($x = 0; $x < $width; $x++) {
    for ($y = 0; $y < $height; $y++) {
      $rgb = imagecolorat($obr, $x, $y);
      $r = ($rgb >> 16) & 0xFF;
      $g = ($rgb >> 8) & 0xFF;
      $b = $rgb & 0xFF;
      $rc = round($r/255*$color_rgb[0]);
      $gc = round($g/255*$color_rgb[1]);
      $bc = round($b/255*$color_rgb[2]);
      $color = imagecolorallocate($obr, $rc, $gc, $bc);
      imagesetpixel($obr, $x, $y, $color);
    }
  }
  header("Content-Type: image/png");
  imagepng($obr);
  imagedestroy($obr);
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0