Imagick jpg背景在旋转时不透明

时间:2013-09-13 14:02:29

标签: php imagemagick imagick

我目前正在使用imagemagick版本ImageMagick 6.8.4-6 2013-04-04 Q16 使用Imagick扩展版本1620

我正在尝试旋转jpg图像并将其合并到另一个jpg图像中,但是当我合并图像时,我会在图像周围找到一个黑框。

请参阅我在下面使用的代码:

public function image($images,$x,$y,$angle){

        if($images != "" && $images != NULL){
         $base = $this->instance;
         $layer = new Imagick($images);

         //resize image

         if($this->id == 45){
             $layer->scaleImage(329,0);
         }
         if($this->id == 44){
            $layer->scaleImage(280,0);
         }
         if($this->id == 42){
            $layer->scaleImage(350,0);
         }

         //rotate image

         $layer->rotateImage(new ImagickPixel("none"), $angle);

         //Merge Image
         if($this->id == 44){
          $base->compositeImage($layer, imagick::COMPOSITE_OVER, $x, $y);
         }else{
          $base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, $x, $y);
         }

         $this->image = $base;
        }


    }

当$ this-> id使用44时,当前运行测试。 任何人都可以解释这个问题吗? 提前致谢

2 个答案:

答案 0 :(得分:1)

您需要使用imagecolortransparent才能拥有透明功能。

NB JPG没有透明属性,只有PNGGIF个文件(以及TIFF),但浏览器不支持该格式。

您的输出文件需要转换为其中一种格式,最好是PNG,然后设置所需颜色的透明度。

“那么你会建议转换为PNG然后旋转吗?然后将PNG图像合并到JPG中(如果可能的话),因为图像输出需要是jpg”

重新保存为JPG

后,您将失去透明度

答案 1 :(得分:0)

我通过Google看到了这个,这是正确的答案,因为其他人可能会找到它。您需要使用setImageMatte(1)来启用透明度,例如

$src->setImageMatte(1); 
$mask->rotateImage(new ImagickPixel('#00000000'), 10); 

您也可以使用图像蒙版,其中黑色将使用

变为透明
$src->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);