You are here

function image_gd_adjustlevels in ImageCache Actions 8

Same name and namespace in other branches
  1. 7 coloractions/imagecache_coloractions.module \image_gd_adjustlevels()

GD toolkit specific implementation of the adjust levels effect.

Parameters

stdClass $image:

array $data: The parameters for this effect.

Return value

bool true on success, false otherwise.

File

coloractions/imagecache_coloractions.module, line 1024

Code

function image_gd_adjustlevels(stdClass $image, array $data) {
  $width = $image->info['width'];
  $height = $image->info['height'];
  if ($data['independent_colors']) {
    $lower_r = $data['per_color']['low_red'] * 255;
    $factor_r = ($data['per_color']['high_red'] * 255 - $lower_r) / 255;
    $lower_g = $data['per_color']['low_green'] * 255;
    $factor_g = ($data['per_color']['high_green'] * 255 - $lower_g) / 255;
    $lower_b = $data['per_color']['low_blue'] * 255;
    $factor_b = ($data['per_color']['high_blue'] * 255 - $lower_b) / 255;
  }
  else {
    $lower_r = $lower_g = $lower_b = $data['all_colors']['low'] * 255;
    $factor_r = $factor_g = $factor_b = ($data['all_colors']['high'] * 255 - $lower_r) / 255;
  }
  for ($y = 0; $y < $height; $y++) {
    for ($x = 0; $x < $width; $x++) {
      $rgb = imagecolorat($image->resource, $x, $y);
      $source = imagecolorsforindex($image->resource, $rgb);
      $final_r = $lower_r + $factor_r * $source['red'];
      $final_g = $lower_g + $factor_g * $source['green'];
      $final_b = $lower_b + $factor_b * $source['blue'];
      $final_colour = imagecolorallocatealpha($image->resource, $final_r, $final_g, $final_b, $source['alpha']);
      imagesetpixel($image->resource, $x, $y, $final_colour);
    }
  }
  return TRUE;
}