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é.
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:
Objective-C
1 2 3 |
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:
Objective-C
1 2 3 4 5 6 7 8 9 10 |
//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:
Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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:
Objective-C
1 2 3 4 |
$img = imagecreatefromjpeg('img.jpg'); header('Content-type: image/jpeg'); MakeSepia($img); imagejpeg($img); |
Výsledný obrázek může vypadat takto:
Posted on 29 November 2008
Viz také http://php.vrana.cz/zazloutle-obrazky.php