function image_gd_create_tmp

Create a truecolor image preserving transparency from a provided image.

Parameters

$image: An image object.

$width: The new width of the new image, in pixels.

$height: The new height of the new image, in pixels.

Return value

A GD image handle.

Related topics

3 calls to image_gd_create_tmp()
image_gd_crop in modules/system/image.gd.inc
Crop an image using the GD toolkit.
image_gd_load in modules/system/image.gd.inc
GD helper function to create an image resource from a file.
image_gd_resize in modules/system/image.gd.inc
Scale an image to the specified size using GD.

File

modules/system/image.gd.inc, line 339

Code

function image_gd_create_tmp(stdClass $image, $width, $height) {
    $res = imagecreatetruecolor($width, $height);
    if ($image->info['extension'] == 'gif') {
        // Find out if a transparent color is set, will return -1 if no
        // transparent color has been defined in the image.
        $transparent = imagecolortransparent($image->resource);
        if ($transparent >= 0) {
            // Find out the number of colors in the image palette. It will be 0 for
            // truecolor images.
            $palette_size = imagecolorstotal($image->resource);
            if ($palette_size == 0 || $transparent < $palette_size) {
                // Set the transparent color in the new resource, either if it is a
                // truecolor image or if the transparent color is part of the palette.
                // Since the index of the transparency color is a property of the
                // image rather than of the palette, it is possible that an image
                // could be created with this index set outside the palette size (see
                // http://stackoverflow.com/a/3898007).
                $transparent_color = imagecolorsforindex($image->resource, $transparent);
                $transparent = imagecolorallocate($res, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
                // Flood with our new transparent color.
                imagefill($res, 0, 0, $transparent);
                imagecolortransparent($res, $transparent);
            }
            else {
                imagefill($res, 0, 0, imagecolorallocate($res, 255, 255, 255));
            }
        }
    }
    elseif ($image->info['extension'] == 'png') {
        imagealphablending($res, FALSE);
        $transparency = imagecolorallocatealpha($res, 0, 0, 0, 127);
        imagefill($res, 0, 0, $transparency);
        imagealphablending($res, TRUE);
        imagesavealpha($res, TRUE);
    }
    else {
        imagefill($res, 0, 0, imagecolorallocate($res, 255, 255, 255));
    }
    return $res;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.