我有一个PHP Imagine的实例:
$imagine = new 'Imagine'Imagick'Imagine();
有没有办法获取包装的 Imagick 实例?我需要这个来删除图像中的透明度。如果无法获取实例,如何使用 PHP 想象从图像中删除透明度?
我明白了。Imagine 的文档太差了,太荒谬了......我必须进入Imagine的源代码才能找到我需要的东西:
$imagine = new 'Imagine'Imagick'Imagine();
$image = $imagine->open($this->getFile()->getRealPath());
$imagick = $image->getImagick();
使用imagick实例是否可以保存?
这是工作代码:
$imagine = new 'Imagine'Imagick'Imagine();
$image = $imagine->open($source);
$imagick = $image->getImagick();
if($imagick->getImageAlphaChannel()) { #only if it has transparency
$imagick->setImageBackgroundColor("white");
$imagick = $imagick->flattenImages();
$imagick->writeImage();
$image = $imagine->open($source);
}
$image->strip(); //remove GPS, EXIF, comments, ....
$image->interlace('Imagine'Image'ImageInterface::INTERLACE_LINE);
$image->save($dest);
我认为这不是最佳解决方案。我需要一种方法来替换 Imagine 的 imagick 实例,但没有这样的方法。所以我正在使用一种解决方法:
$imagick->writeImage();
$image = $imagine->open($source);
删除透明度后,我覆盖了原始文件。然后我用 imagine 重新打开同一个文件,这意味着 Imagine 正在使用正确的图像(没有透明度的图像)
我测试了它,它可以工作。但我认为这不是最好的解决方案。
如何在不获取新的 imagick 实例的情况下删除 Imagick 中的透明度?我想,这样就可以了。