2010-06-19 1 views
2

Мне нужно создать прозрачное изображение, а затем объединить в него прозрачные png, сохраняя при этом качество изображения.Как создать прозрачный холст, а затем добавить к нему прозрачные png?

как я могу это сделать?

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

выдает черный фон.

спасибо :)

вот мой фактический код для справки ...

 $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); 
+0

возможно дубликат [Объединить 2-3 прозрачный PNG изображения поверх друг друга с помощью PHP] (http://stackoverflow.com/questions/1397377/combine-2-3-transparent-png-images-on-top-of-each-other-with-php) – Artefacto

+0

почти, за исключением того, что начинается с png-изображения и добавляет к нему, если мне нужно создать png-изображение, а затем добавить к нему. – significance

+0

Независимо от того, создаете ли вы изображение или добавляете его в существующий, ответ один и тот же. +1 для дубликатов. – Wrikken

ответ

1
$img = imagecreatetruecolor(...); 
imagealphablending($img,false); 
//rest of code. 
0

окончательный рабочий код:

 $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); 
Смежные вопросы