Sunday, March 29, 2009

PHP Image Resize Transparency

I've made a very simple script that will retain transparency of images especially when resizing.

NOTE: Transparency is only supported on GIF and PNG files.

Parameters:

$new_image = image resource identifier such as returned by imagecreatetruecolor(). must be passed by reference


$image_source = image resource identifier returned by imagecreatefromjpeg, imagecreatefromgif and imagecreatefrompng. must be passed by reference

function setTransparency($new_image,$image_source)
{
      $transparencyIndex = imagecolortransparent($image_source);
       $transparencyColor = array('red' => 255, 'green' => 255, 'blue' => 255);

      if ($transparencyIndex >= 0) {
          $transparencyColor = imagecolorsforindex($image_source, $transparencyIndex);
      }

      $transparencyIndex = imagecolorallocate($new_image, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
      imagefill($new_image, 0, 0, $transparencyIndex);
      imagecolortransparent($new_image, $transparencyIndex);
}


Sample Usage: (resizing)

$image_source = imagecreatefrompng('test.png');
$new_image = imagecreatetruecolor($new_width, $new_height);
setTransparency($new_image,$image_source);
imagecopyresampled($new_image, $image_source, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);
imagepng($new_image,'resizetest.png');

No comments: