function image_gd_adjustlevels in ImageCache Actions 8
Same name and namespace in other branches
- 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;
}