PHP IMagick:无法保存图像


PHP IMagick: cannot save image

我想将SVG转换为JPG,根据用PHP将SVG图像转换为PNG,我创建了转换方法

public static function createJpgFromSvg($src, $dst, $w = 320, $h = 240) {
  $im = new 'Imagick();
  $svg = file_get_contents($src);
  $im->readImageBlob($svg);  
  $im->setImageFormat("jpeg");
  $im->adaptiveResizeImage($w, $h);
  $im->writeImage($dst);
  $im->clear();
  $im->destroy();   
}

问题是我总是收到一个异常:

ImagickException #1
unable to open image `<path>': No such file or directory @ error/blob.c/OpenBlob/2675

对于线路:

$im->writeImage($dst);

我已经检查了目标文件夹的写入权限,我有777。你能帮我吗?

您很可能正在尝试读取ImageMagick认为无效的SVG。

下面是一个应该有效的例子:

function svgExample() {   
    $svg = '<!--?xml version="1.0"?-->
    <svg width="120" height="120" viewport="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg">
        <defs>
            <clipPath id="myClip">
                <circle cx="30" cy="30" r="20"></circle>
                <circle cx="70" cy="70" r="20"></circle>
            </clipPath>
        </defs>
        <rect x="10" y="10" width="100" height="100" clip-path="url(#myClip)"></rect>
    </svg>';
    $image = new 'Imagick();
    $image->readImageBlob($svg);
    $image->setImageFormat("jpg");
    header("Content-Type: image/jpg");
    echo $image;
}

您可以通过将SVG文本与现有文本进行比较来找出问题所在。如果你做不到,你需要把你的SVG文件发布到某个地方,让其他人看到它。