【问题标题】:how do i create a transparent canvas, then add transparent pngs to it?如何创建透明画布,然后向其中添加透明 png?
【发布时间】:2011-03-05 18:57:12
【问题描述】:

我需要创建一个透明图像,然后在保持图像质量的同时将透明 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);

【问题讨论】:

标签: php png gd transparent


【解决方案1】:
 $img = imagecreatetruecolor(...);
 imagealphablending($img,false);
 //rest of code.

【讨论】:

    【解决方案2】:

    最终工作代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-08
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多