Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- function Lum($colour) {
- return ($colour['r'] * 0.3) + ($colour['g'] * 0.59) + ($colour['b'] * 0.11);
- }
- function ClipColour($colour) {
- $result = $colour;
- $luminance = Lum($colour);
- $cMin = min($colour['r'], $colour['g'], $colour['b']);
- $cMax = max($colour['r'], $colour['g'], $colour['b']);
- if ($cMin < 0.0) {
- $result['r'] = $luminance + ((($colour['r'] - $luminance) * $luminance) / ($luminance - $cMin));
- $result['g'] = $luminance + ((($colour['g'] - $luminance) * $luminance) / ($luminance - $cMin));
- $result['b'] = $luminance + ((($colour['b'] - $luminance) * $luminance) / ($luminance - $cMin));
- }
- if ($cMax > 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;
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement