如何在PHP中使用ImageMagick将SVG转换为PNG?

I want to convert SVG into PNG using ImageMagick using PHP. I have installed ImageMagick on XAMPP and verified it using phpinfo(), but still can't generate images. Here is my code:

$svg = file_get_contents($svg_file);
//echo $svg;
$im = new Imagick();    
//$im->setBackgroundColor(new ImagickPixel('transparent'));  
// $svg = str_replace(array("color1","color2"),array("red","lightblue"),$svg);
$im->readImageBlob($svg);
//$im->setImageFormat("png32");
$im->setImageFormat("png24");
// $im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1);  
// $im->adaptiveResizeImage(720, 445);    
$im->writeImage($png_file);
header('Content-type: image/png');
echo $im;
$im->clear();
$im->destroy();
doupingzhi9674
doupingzhi9674 首先它需要太长时间,然后它会创建一个空白页面。
5 年多之前 回复
doubao12345
doubao12345 有错误信息吗?
5 年多之前 回复

3个回答

Read this Imagick on Windows 8 xampp

I make this example and works for me, just download the blank-us-map.svg

<?php

$usmap = 'blank-us-map.svg';
$im = new Imagick();
$svg = file_get_contents($usmap);

$im->readImageBlob($svg);

$im->setImageFormat("png24");
$im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1);  /*Optional, if you need to resize*/

$im->writeImage('blank-us-map.png');

header('Content-type: image/png');
echo $im;

$im->clear();
$im->destroy();

?>
drix47193
drix47193 好,我会的。 顺便感谢您的帮助。
5 年多之前 回复
douxianxing5712
douxianxing5712 似乎这是问题,但我不使用Windows,我无法测试场景,祝你的问题好运,如果你解决了问题的答案
5 年多之前 回复
dq1230123
dq1230123 我现在无法访问Linux服务器。 我认为我唯一的问题是在ext文件夹中安装imagemagick dll。 因为Imagick类无法识别。
5 年多之前 回复
dongliulu1122
dongliulu1122 你可以在linux服务器上测试代码吗?
5 年多之前 回复
duangua6912
duangua6912 我按照你的链接,但仍然不能使XAMPP识别想象力。 仍有致命错误:$ Imagick = new Imagick()中找不到类'Imagick';
5 年多之前 回复
duanjing2013
duanjing2013 我按照你的指示,但仍然无法使php识别imagemagick安装在ext文件夹中。
5 年多之前 回复
duandi1919
duandi1919 尝试在你的xampp文件夹中找到你的php5-imagick.dll并复制到system32,我读到有时候这个工作,在我的情况下我在phpinfo()的输出中看到了imaick而不是ImageMagick的名字,请看看这个
5 年多之前 回复
dongyue1988
dongyue1988 php.ini显示安装了ImageMagick,但是当我加载任何页面时,它显示“致命错误:类'Imagick'在C:\ dev \ xampp \ htdocs \ polygon.php中找不到行$ Imagick = new Imagick();”。
5 年多之前 回复
douzhangbao2187
douzhangbao2187 我不知道,尝试在谷歌搜索一些关于此的信息,我有点累在我的国家是凌晨3点42分,我在几分钟后去睡觉
5 年多之前 回复
doudi1449
doudi1449 啊,我正在使用Xampp在Windows 8上工作。 随后在网上安装了imagemagick,但不知道为什么会这样。
5 年多之前 回复
douhan4243
douhan4243 我使用linux而我只是在shell中写sudo apt-get install php5-imagick和sudo service apache2 restart
5 年多之前 回复
douhuan1950
douhuan1950 我已经在文件夹/ p​​hp / ext / imagick中安装了ImageMagick lib扩展,并在php.ini中设置了它,但仍然出错。 如果你有一个平滑而简单的方法来安装ext,请指出我。 谢谢
5 年多之前 回复
dongmu3457
dongmu3457 然后你没有安装扩展,安装php5-imagick扩展
5 年多之前 回复
doudou6719
doudou6719 致命错误:未找到“Imagick”类。
5 年多之前 回复



它可能与您的问题无关,但您是否曾尝试使用“\”调用Imagick类? 喜欢:
$ newImage = new \ Imagick(); </ p>

我知道我和你有同样的错误,就是找不到类,直到我添加了这个前缀命名空间。 我认为它与命名空间以及如何使用web-app的classLoader加载类文件有关。</ p>
</ div>

展开原文

原文

It may not be related to your problem, but have you tried to call the Imagick class with a "\" before ? Like : $newImage = new \Imagick();

I know that I had the same error as you, that is the class couldnt be found, until I added this prefix namespace. I think its related to namespace and how you load your class files with the classLoader of your web-app.

If you get blank png images even though you are following all the advice here, you may want to check that any text within your svg is suitably escaped. I spent an hour or two scratching my head as to why I wasn't getting any output, until I discovered that I had an ampersand in my text. The fix was to pass the text through htmlspecialchars() first, i.e.

$annotation = htmlspecialchars($this->sequence . ' : ' . $this->name);
$svg .= "<text id=\"annotation-{$this->index}\" x=\"{$this->xText}\" y=\"{$this->yText}\" font-size=\"12\" style=\"fill: #000000\" onclick=\"passClickToTask(evt)\"> $annotation</text>";

Hope this helps anyone else facing similar problems.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐