255) { $result['r'] = $luminance + ((($colour['r'] - $luminance) * (255 - $luminance)) / ($cMax - $luminance)); $result['g'] = $luminance + ((($colour['g'] - $luminance) * (255 - $luminance)) / ($cMax - $luminance)); $result['b'] = $luminance + ((($colour['b'] - $luminance) * (255 - $luminance)) / ($cMax - $luminance)); } return $result; } function SetLum($colour, $luminance) { $result = array(); $diff = $luminance - Lum($colour); $result['r'] = $colour['r'] + $diff; $result['g'] = $colour['g'] + $diff; $result['b'] = $colour['b'] + $diff; return ClipColour($result); } function normalizeColor( $color ) { $color['r'] = $color['r'] / 255; $color['g'] = $color['g'] / 255; $color['b'] = $color['b'] / 255; return $color; } function denormalizeColor( $color ) { $color['r'] = round($color['r'] * 255); $color['g'] = round($color['g'] * 255); $color['b'] = round($color['b'] * 255); return $color; } $overlay_color = array('r'=>180,'g'=>22,'b'=>1, 'a' => 0.35); $img = new Imagick(); if( !isset($_GET['case']) ) { $_GET['case'] = ''; } //unmodified version $original = new Imagick('girl.jpg'); //photoshop image to compare $ps = new Imagick('original.jpg'); $img->addImage($original); $it = $original->getPixelIterator(); foreach( $it as $row => $pixels ) { foreach ( $pixels as $column => $pixel ) { $rgbIni = $pixel->getColor(); $rgb = SetLum($overlay_color, Lum($rgbIni)); $overlay_color = normalizeColor($overlay_color); $rgb = normalizeColor($rgb); $rgbIni = normalizeColor($rgbIni); $rgb['r'] = ((1 - $overlay_color['a']) * $rgbIni['r']) + ($overlay_color['a'] * $rgb['r']); $rgb['g'] = ((1 - $overlay_color['a']) * $rgbIni['g']) + ($overlay_color['a'] * $rgb['g']); $rgb['b'] = ((1 - $overlay_color['a']) * $rgbIni['b']) + ($overlay_color['a'] * $rgb['b']); $test = denormalizeColor($test); $rgb = denormalizeColor($rgb); $overlay_color = denormalizeColor($overlay_color); $pixel->setColor('rgb('.round($rgb['r']).','. round($rgb['g']).','.round($rgb['b']).')'); } $it->syncIterator(); } //add modified version $img->addImage($original); $img->addImage($ps); $img->resetIterator(); $combined = $img->appendImages(true); //stack images header('content-type: image/jpeg'); $combined->setImageFormat("jpeg"); echo $combined; ?>