在 ImageMagick v7 上使用 clipPath 后创建透明图像
Create transparent image after using clipPath on ImageMagick v7
在 ImageMagick v6 上,我使用以下代码创建了一个带有剪辑路径的透明图像:
try {
$im = new Imagick($image);
$tmpOut = $im->identifyImage(TRUE);
if(isset($tmpOut["rawOutput"]) AND strpos($tmpOut["rawOutput"], "Clipping path:") !== FALSE) {
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_TRANSPARENT);
$im->clipImage();
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE);
}
$im->writeImage($pathSave . $filename);
$im->destroy();
} catch (ImagickException $e) {
var_dump($e);
}
从版本 7 开始出现以下错误:
Undefined class constant 'ALPHACHANNEL_OPAQUE'
我已经搜索过了,对应的应该是:
Imagick::ALPHACHANNEL_OFF
但是当我使用它时,背景是白色的,不像以前使用 ImageMagick 版本 6 时那样透明。
也许你们中的一些人 运行 遇到过这种情况并且知道解决这个问题的方法。
我用 shell_exec
修复了它,并添加了一个检查变量是否存在于我的 linux 系统中,其中 imagemagick 版本 6 处于活动状态。并将 $im->destroy()
更改为 $im->clear()
因为 destroy 已被弃用
我的新代码如下:
try {
$im = new Imagick($image);
$tmpOut = $im->identifyImage(TRUE);
if(isset($tmpOut["rawOutput"]) AND strpos($tmpOut["rawOutput"], "Clipping path:") !== FALSE) {
if(defined('Imagick::ALPHACHANNEL_OPAQUE')) {
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_TRANSPARENT);
$im->clipImage();
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE);
} else {
$im->clear();
$im = null;
shell_exec("magick {$image} -alpha opaque -clip -alpha transparent +clip {$pathSave}{$filename}");
}
}
if($im !== null) {
$im->writeImage($pathSave . $filename);
$im->clear();
$im = null;
}
} catch (ImagickException $e) {
var_dump($e);
}
在 ImageMagick v6 上,我使用以下代码创建了一个带有剪辑路径的透明图像:
try {
$im = new Imagick($image);
$tmpOut = $im->identifyImage(TRUE);
if(isset($tmpOut["rawOutput"]) AND strpos($tmpOut["rawOutput"], "Clipping path:") !== FALSE) {
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_TRANSPARENT);
$im->clipImage();
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE);
}
$im->writeImage($pathSave . $filename);
$im->destroy();
} catch (ImagickException $e) {
var_dump($e);
}
从版本 7 开始出现以下错误:
Undefined class constant 'ALPHACHANNEL_OPAQUE'
我已经搜索过了,对应的应该是:
Imagick::ALPHACHANNEL_OFF
但是当我使用它时,背景是白色的,不像以前使用 ImageMagick 版本 6 时那样透明。
也许你们中的一些人 运行 遇到过这种情况并且知道解决这个问题的方法。
我用 shell_exec
修复了它,并添加了一个检查变量是否存在于我的 linux 系统中,其中 imagemagick 版本 6 处于活动状态。并将 $im->destroy()
更改为 $im->clear()
因为 destroy 已被弃用
我的新代码如下:
try {
$im = new Imagick($image);
$tmpOut = $im->identifyImage(TRUE);
if(isset($tmpOut["rawOutput"]) AND strpos($tmpOut["rawOutput"], "Clipping path:") !== FALSE) {
if(defined('Imagick::ALPHACHANNEL_OPAQUE')) {
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_TRANSPARENT);
$im->clipImage();
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE);
} else {
$im->clear();
$im = null;
shell_exec("magick {$image} -alpha opaque -clip -alpha transparent +clip {$pathSave}{$filename}");
}
}
if($im !== null) {
$im->writeImage($pathSave . $filename);
$im->clear();
$im = null;
}
} catch (ImagickException $e) {
var_dump($e);
}