phpfiltergdphotoshop

Multiply filter with PHP's GD library


I've tried experimenting with the GD library to simulate Photoshop's muliply effect, but I haven't found a working solution yet.

According to Wikipedia, the multiply blend mode:

[...] multiplies the numbers for each pixel of the top layer with the corresponding pixel for the bottom layer. The result is a darker picture.

Does anyone know of a way to achieve this using PHP? Any help would be much appreciated.


Solution

  • You need to take every pixel of your image, then multiply each RGB value with your background color / 255 (it's the Photoshop formula). For example, a JPG file with a red background color multiply filter, saved as a PNG file for better results:

    <?php 
    $filter_r=216;
    $filter_g=0;
    $filter_b=26;
    $suffixe="_red";
    $path=YOURPATHFILE;
    
    if(is_file($path)){
        $image=@imagecreatefromjpeg($path);
        $new_path=substr($path,0,strlen($path)-4).$suffixe.".png";
    
        $imagex = imagesx($image);
        $imagey = imagesy($image);
        for ($x = 0; $x <$imagex; ++$x) {
            for ($y = 0; $y <$imagey; ++$y) {
                $rgb = imagecolorat($image, $x, $y);
                $TabColors=imagecolorsforindex ( $image , $rgb );
                $color_r=floor($TabColors['red']*$filter_r/255);
                $color_g=floor($TabColors['green']*$filter_g/255);
                $color_b=floor($TabColors['blue']*$filter_b/255);
                $newcol = imagecolorallocate($image, $color_r,$color_g,$color_b);
                imagesetpixel($image, $x, $y, $newcol);
            }
        }
    
        imagepng($image,$new_path);
    }
    ?>