Imagick jpg 背景在旋转时不透明


Imagick jpg background isn't transparent on rotate

我目前正在使用图像魔术版本 图像魔术 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 时运行测试。谁能阐明这个问题?提前致谢

您需要

使用imagecolortransparent才能具有透明度功能。

:注: JPG没有透明属性,只有PNGGIF文件(和TIFF),但浏览器不支持这种格式。

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

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

重新保存为JPG后,您将失去透明度

我通过谷歌遇到了这个问题,这是其他人可能会找到的正确答案。你需要使用 setImageMatte(1) 来启用透明度,例如

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

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

$src->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);