www.www.zaachi.com »  Blog/Php  »  PHP Sepia Image

PHP Sepia Image



Obrázek v odstínech sépie je vcelku podobný černobílému obrázku, jenom s tím rozdílem, že jeho odstíny nevycházejí z odstínů šedé, ale hnědé barvy. Napsat jednoduchý skript na vytvoření takového obrázku v PHP je vcelku jednoduché.

 

Reklama

Pokud mě chcete podpořit a jste milovník jedné stopy, navštivte můj projekt: MotoArena.cz

Nejprve je nutno zavést trochu teorie, jak se barvy sépie počítají. Tón barev sépie vychází z RGB složek barev, které upravuje dle vzorce:

R' = R * 0.393   G * 0.769   B * 0.189
G' = R * 0.349   G * 0.686   B * 0.168
B' = R * 0.272   G * 0.534   B * 0.131

Dle těchto rovnic můžeme následně počítat nové barvy a v paletě barev v obraze je nahrazovat:

//v cyklu projdeme celou paletu barev
for ( $i = 0; $i < $total; $i++ ) {

//postupne si vracime barvu z indexu
$col = ImageColorsForIndex( $img, $i );

//vypocitame si nove barvy
$red = ( $col['red'] * 0.393 + $col['green'] * 0.769 + $col['blue'] * 0.189 );
$green = ( $col['red'] * 0.349 + $col['green'] * 0.686 + $col['blue'] * 0.168 );
$blue = ( $col['red'] * 0.272 + $col['green'] * 0.534 + $col['blue'] * 0.131 );

Ostatní operace s obrázkem jsou již triviální záležitostí. Celý skript může vypadat zjednodušeně takto:

function MakeSepia( &$img ){
    
    //Prevedeme barevnĂ˝ obraz na barevnou paletu barev
    ImageTrueColorToPalette( $img, true, 255 );   
    
    //zjistime si pocet barev v patele barev obrazu
    $total = ImageColorsTotal( $img );
    
    //v cyklu projdeme celou paletu barev
    for ( $i = 0; $i < $total; $i++ ) {
        
        //postupne si vracime barvu z indexu
        $col = ImageColorsForIndex( $img, $i );
        
        //vypocitame si nove barvy
        $red = ( $col['red'] * 0.393 + $col['green'] * 0.769 + $col['blue'] * 0.189 );
        $green = ( $col['red'] * 0.349 + $col['green'] * 0.686 + $col['blue'] * 0.168 );
        $blue = ( $col['red'] * 0.272 + $col['green'] * 0.534 + $col['blue'] * 0.131 );
        
        //jednoducha kontrola, zda muzeme 
        $red = ( $red > 255 ? 255 : $red );
        $green = ( $green > 255 ? 255 : $green );
        $blue = ( $blue > 255 ? 255 : $blue );
        
        //ulozime barvu do obrazku
        ImageColorSet( $img, $i, $red, $green, $blue );
  }
}

Volání funkce provedeme například:

$img = imagecreatefromjpeg('img.jpg');
header('Content-type: image/jpeg');
MakeSepia($img);
imagejpeg($img);

Výsledný obrázek může vypadat takto:

sepia image

 

 


linkuj topclanky
Komentáře (1)

Autor: Zaachi
Publikováno: 29.11.2008 20:24:41
TOPLIST.cz

rss coments img img img