2015-05-01 8 views
3

Я хочу преобразовать SVG в PNG, используя ImageMagick, используя PHP. Я установил ImageMagick на XAMPP и проверил его с помощью phpinfo(), но по-прежнему не может создавать изображения. Вот мой код:Как преобразовать SVG в PNG с помощью ImageMagick в PHP?

$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(); 
+0

Любые сообщения об ошибках? – emcconville

+0

Сначала это занимает слишком много времени, а затем создает пустую страницу. – Badar

ответ

2

Читать эту Imagick on Windows 8 xampp

я сделать этот пример и работает для меня, просто скачать 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(); 

?> 
+0

Неустранимая ошибка: класс «Imagick» не найден. – Badar

+0

@Badar, тогда у вас нет установленного расширения, установите расширение php5-imagick –

+0

Я установил ImageMagick lib расширение в папку/php/ext/imagick, а также установил его в php.ini, но все еще получаю ошибку. Если у вас есть гладкий и простой способ установки ext, пожалуйста, укажите мне его. Спасибо – Badar

1

Это не может быть связано с вашей проблемой, но есть вы пытались вызвать класс Imagick с «\» раньше? Например: $ newImage = new \ Imagick();

Я знаю, что у меня была такая же ошибка, как и вы, то есть не удалось найти класс, пока я не добавлю это пространство имен префиксов. Я думаю, что это связано с пространством имен и как вы загружаете свои файлы классов с помощью classLoader вашего веб-приложения.

0

Если вы получаете пустые изображения png, даже если вы следуете всем советам здесь, вы можете проверить, что любой текст в вашем svg соответствующим образом экранирован. Я потратил час или два, почесывая голову о том, почему я не получал никакого результата, пока не обнаружил, что у меня в тексте есть амперсанд. Исправление было передать текст через htmlspecialchars() первый, т.е.

$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>"; 

Надеется, что это помогает кто-то сталкивается с подобными проблемами.

Смежные вопросы