Image Filter vs Blend Multiply no PHP

On 9 de outubro de 2014, in Sem categoria, by andersonstraube

Precisei criar um filtro para uma imagem, porém a função nativa da GD Lib não nos permite fazer um blend multiply onde o efeito é bem mais interessante e agradável.

Lendo mais sobre o algoritmo do blend multiply e “googlando” percebi que a fórmula utilizada é subtraindo o RGB pelo valor máximo (255), ou seja, valores opostos.

Com base nisso o código de exemplo ficou da seguinte forma:



function filterColor( $fileName, $red, $green, $blue, $alpha ) {
    $img = imagecreatefromjpeg($fileName);
    imagefilter($img, IMG_FILTER_GRAYSCALE);
    imagefilter($img, IMG_FILTER_COLORIZE, $red, $green, $blue, $alpha);
    imagejpeg($img, 'image_filter.jpg',100);
    imagedestroy($img);
}

function multiplyColor( $fileName, $red, $green, $blue, $alpha ) {
    $img = imagecreatefromjpeg($fileName);
    imagefilter($img, IMG_FILTER_GRAYSCALE);

    $opposite = array(255 - $red, 255 - $green, 255 - $blue);
    imagefilter($img, IMG_FILTER_COLORIZE, -$opposite[0], -$opposite[1], -$opposite[2], $alpha);

    imagejpeg($img, 'image_multiply.jpg',100);
    imagedestroy($img);     
}

$red = 250;
$green = 5;
$blue = 75;
$alpha = 20;
$file = "image.jpg";

filterColor( $file, $red, $green, $blue, $alpha );
multiplyColor( $file, $red, $green, $blue, $alpha );

echo '<img src="image.jpg"> &amp;amp;amp;nbsp;';
echo '<img src="image_filter.jpg"> &amp;amp;amp;nbsp;';
echo '<img src="image_multiply.jpg"> &amp;amp;amp;nbsp;';

Com isso temos as imagens geradas respectivamente: Original > Filter > Multiply:

filter_vs_multiply

* Agradeço ao Luis Paulo pela colaboração para chegar a este resultado.

Até a próxima, abraço.

Tagged with:  

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *