2

i need to create a transparent image, then combine transparent pngs to it whilst maintaining image quality.

how can i do this?

imagecreatetruecolor(...);
//processing using imagecopymerge(..);
imagepng(...);

outputs a black background.

thanks :)

here's my actual code for reference...

        $d = getimagesize(TMP.$this->files[0]);
    $source_height = $d[0];
    $source_width = $d[1];

    $this->canvas = imagecreatetruecolor($source_width*count($this->files),$source_height);

    imagealphablending($this->canvas, false );

    $i=0;
    foreach($this->files as $f){
        $dst_x = $source_width*$i;
        $im = imagecreatefrompng(TMP.$f);
        imagecopyresampled  (  $this->canvas  , $im  ,
               $dst_x  ,
               $dst_y = 0 , 
               $src_x = 0 ,
               $src_y = 0 ,
               $source_width  ,
               $source_height  ,
               $source_width  ,
               $source_height);

        $i++;
        imagepng($im,TMP.$i.".png");
        if($i>3)break;
    }
    $fn = TMP."stiched_up_$i*$source_width.png";
    imagesavealpha($this->canvas,TRUE);
    imagepng($this->canvas,$fn);
significance
  • 4,797
  • 8
  • 38
  • 57
  • possible duplicate of [Combine 2-3 transparent PNG images on top of each other with PHP](http://stackoverflow.com/questions/1397377/combine-2-3-transparent-png-images-on-top-of-each-other-with-php) – Artefacto Jun 19 '10 at 14:59
  • almost, except that starts off with a png image and adds to it, wheras i need to create a png image, then add to it. – significance Jun 19 '10 at 15:05
  • Whether you're creating an image, or adding to an existing one, the answer is the same. +1 for duplicate. – Wrikken Jun 19 '10 at 16:03

2 Answers2

1
 $img = imagecreatetruecolor(...);
 imagealphablending($img,false);
 //rest of code.
Wrikken
  • 69,272
  • 8
  • 97
  • 136
0

final working code:

        $d = getimagesize(TMP.$this->files[0]);
    $source_height = $d[0];
    $source_width = $d[1];

    $this->canvas = imagecreatetruecolor($source_width*count($this->files),$source_height);
    imagesavealpha($this->canvas,TRUE);
    imagealphablending($this->canvas, false );

    $i=0;
    foreach($this->files as $f){
        $dst_x = $source_width*$i;
        $im = imagecreatefrompng(TMP.$f);
        imagecopy (  $this->canvas  , $im  ,
               $dst_x  ,
               $dst_y = 0 , 
               $src_x = 0 ,
               $src_y = 0 ,
               $source_width  ,
               $source_height);

        $i++;
        imagepng($im,TMP.$i.".png");
        // if($i>3)break;
    }
    $fn = TMP."stiched_up_$i*$source_width.png";
    imagepng($this->canvas,$fn);
    // create canvas correct size i.e. count(images)*width
    // add each picture in with correct offset i.e. picture_i*width,0

    echo basename($fn);
significance
  • 4,797
  • 8
  • 38
  • 57