问题描述
我正在运行symfony开发服务器的Windows 10 pc上开发PHP7.1应用程序,但是每次我运行脚本将svg转换为png时,都会收到此错误。
WriteBlob失败`/tmp/5f49ac095abe6.png'@ error / png.c / MagickPNGErrorHandler / 1630
我刚刚购买了这台计算机,该脚本可在旧的Windows笔记本电脑上使用。我做了研究,怀疑这是一个权限问题,但是我用尽了所有更改PHP和imagick tmp存储位置的方法。
如果确实是权限问题,那么我如何更新PHP / imagick保存tmp文件的位置。
这是我的全部参考方法:
private function createImageFromSVG(Configlogo $logoConfig)
{
$svg = $logoConfig->getDefaultimage()->getContent();
$idColorArray = [
'first' => $logoConfig->getFirstColor(),'second' => $logoConfig->getSecondColor(),'third' => $logoConfig->getThirdColor(),];
foreach ($idColorArray as $state => $color) {
if ($color != 'FFFFFF') {
$svg = preg_replace(
'/class="' . $state . '" style="fill:#([0-9a-fA-F]{6})/','class="' . $state . '" style="fill:#' . $color,$svg
);
}
}
$fileName = sprintf('%s.png',uniqid());
$filePath = sprintf('/tmp/%s',$fileName);
$this->filePath = $filePath;
$im = new \Imagick();
$im->setBackgroundColor(new \ImagickPixel('transparent'));
$im->readImageBlob($svg);
$im->setimageFormat("png24");
$im->writeImage($filePath); //error !
$file = new UploadedFile($filePath,$fileName .'.png');
$im->clear();
$im->destroy();
$oldImages = $logoConfig->getRenderedlogoImages();
foreach ($oldImages as $image) {
if ($image->getimageName() !== 'default_logo.png') {
$this->uploadHandler->remove($image,'imageFile');
}
$logoConfig->removeRenderedlogoImage($image);
}
$renderedImage = new ConfiglogoDefaultimage();
$renderedImage->setimageFile($file);
$renderedImage->setimageName($fileName);
$logoConfig->addRenderedlogoImage($renderedImage);
$this->operateImage($logoConfig,'Renderedlogo');
}
错误发生在第$im->writeImage($filePath)
行;
在此先感谢您的帮助。
解决方法
无论谁面对此问题,我在C:/ tmp创建tmp目录后都已解决。显然imagick没有使用在系统属性或php.ini中设置的系统tmp目录。