我目前正在使用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时,当前运行测试。 任何人都可以解释这个问题吗? 提前致谢
答案 0 :(得分:1)
您需要使用imagecolortransparent
才能拥有透明功能。
NB JPG
没有透明属性,只有PNG
和GIF
个文件(以及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);