function _fivestar_color_render in Fivestar 5
Same name and namespace in other branches
- 6.2 includes/fivestar.color.inc \_fivestar_color_render()
- 6 fivestar_color.inc \_fivestar_color_render()
Render images that match a given palette.
Parameters
$source: The original image source (star-template.png or cancel-template.png).
$palette: The colors to be used in the generation of this image.
$type: The type of color to be rendered: solid or gradient.
2 calls to _fivestar_color_render()
- fivestar_color_form_submit in ./
fivestar_color.inc - Submit handler for color change form.
- fivestar_preview_color in ./
fivestar.module - Callback function for fivestar/preview/color.
File
- ./
fivestar_color.inc, line 237 - File containing functions relating to the color widget.
Code
function _fivestar_color_render($source, $palette, $type) {
// Pull in the template image.
$template = imagecreatefrompng($source);
imagealphablending($template, TRUE);
$width = imagesx($template) / 2;
$height = imagesy($template);
// Create a true color mask image from the left side of the template.
$mask = imagecreatetruecolor($width, $height);
$transparent = imagecolorallocatealpha($mask, 0, 0, 0, 127);
imagefill($mask, 0, 0, $transparent);
imagecopy($mask, $template, 0, 0, 0, 0, $width, $height);
// Create a true color overlay image from the right side of the template.
$overlay = imagecreatetruecolor($width, $height);
$transparent = imagecolorallocatealpha($overlay, 0, 0, 0, 127);
imagefill($overlay, 0, 0, $transparent);
imagecopy($overlay, $template, 0, 0, $width, 0, $width, $height);
// No need for the template image any more.
imagedestroy($template);
// Apply the selected colors to the mask.
$slices = basename($source) == 'star-template.png' ? 3 : 2;
$slice_height = floor($height / $slices);
foreach ($slices == 2 ? array(
'off',
'hover',
) : array(
'off',
'on',
'hover',
) as $slice => $key) {
$slice_y = $slice_height * $slice;
if ($type == 'gradient') {
_fivestar_color_mask_linear_gradient($mask, $palette[$key . '1'], $palette[$key . '2'], $palette['matte'], 0, $slice_y, $width, $slice_height);
}
else {
_fivestar_color_mask($mask, $palette[$key . '1'], $palette['matte'], 0, $slice_y, $width, $slice_height);
}
}
// Apply the overlay on top of the mask.
imagealphablending($mask, TRUE);
imagecopy($mask, $overlay, 0, 0, 0, 0, $width, $height);
imagedestroy($overlay);
// Set the background color.
if ($palette['matte'] == 'transparent') {
// A simple case, just make this save as a 24-bit PNG.
imagesavealpha($mask, TRUE);
$return = $mask;
}
else {
// If there is a matte, create a new 8-bit image, fill with the matte,
// apply the star over the top, then set the matte to transparent.
$return = imagecreatetruecolor($width, $height);
$matte_rgb = _fivestar_color_unpack($palette['matte']);
$transparent = imagecolorallocate($return, $matte_rgb[0], $matte_rgb[1], $matte_rgb[2]);
imagefill($return, 0, 0, $transparent);
imagealphablending($return, TRUE);
imagecopy($return, $mask, 0, 0, 0, 0, $width, $height);
imagecolortransparent($return, $transparent);
imagetruecolortopalette($return, TRUE, 255);
}
return $return;
}