我目前正在使用图像魔术版本 图像魔术 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
没有透明属性,只有PNG
和GIF
文件(和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);