Imagick无法编写SVG文件

时间:2014-11-20 00:31:57

标签: php image-processing svg imagemagick imagick

我使用Imagick打开图像,调整大小,设置图像格式(如果需要)并在另一个文件夹中写入结果。它适用于ICO和PNG,但无法编写SVG 文件,说

ImagickException:无法写入文件:Imagick中的C:\ Sites \ devdesktop \ test \ sites \ default \ files \ tempimages \ abstract-spiral-striped-background-100.svg-> writeimage() (C:\ Sites \ devdesktop \ test \ sites \ all \ modules \ testmodule \ testmodule.module)第44行。

这是来自Drupal 7的错误消息。

这是我的代码:

$file = file_load($form_state['values']['fid']);
$image = new Imagick(drupal_realpath($file->uri));
$image->setImageFormat($type[$type_num]);
$image->resizeImage($size[$size_num], $size[$size_num], Imagick::FILTER_UNDEFINED, 1);
$destination = 'public://tempimages/'.substr($file->filename, 0, -4).'-'.$size[$size_num].'.'.$type[$type_num];
$image->writeImage(drupal_realpath($destination));    //<---problem
drupal_goto(base_path().'/sites/default/files/tempimages/'.substr($file->filename, 0, -4).'-'.$size[$size_num].'.'.$type[$type_num]);

此代码段与ICO和PNG完美配合,但不要以SVG格式编写文件,除了代码安静之外

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="200" height="200">
<g style="</svg> 

为什么会这样?

1 个答案:

答案 0 :(得分:1)

SVG图片与JPGPNG的图像相同。

在大多数情况下,它只是xml的绘图点,通常没有尺寸和分辨率。

width的{​​{1}}和height只是200中保存的大小。因此,您永远不需要调整大小&#39; svg,因为它会无限扩展。

如果您将px放在SVG代码中并定义尺寸,例如:

img

即使它在<img src="myawesome.svg" width="500" height="500" />中定义为尺寸为SVG,它也应该扩大或缩小,而不会改变外观质量。

由于结构的这种完全不同,在某些情况下,200jpg将不会遵循相同的规则,因为它们是渲染图像。

如果在Drupal中进行此操作;对png例外,只保存文件而不调整大小,并为所有图像添加打印尺寸。它不会伤害渲染的图像,它应该显示SVG与它们相同的大小。

TL; DR SVG是一个SVG文件,不是真正的图像,调整大小是没有意义的,因为它没有真正的分辨率或大小,可以无限扩展。它们看起来很相似,因为它们都是视觉元素。为xml设置例外,以便它只存储文件,当打印渲染的图像或SVG时,将调整后的尺寸添加到SVG输出。