我使用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>
为什么会这样?
答案 0 :(得分:1)
SVG
图片与JPG
或PNG
的图像相同。
在大多数情况下,它只是xml
的绘图点,通常没有尺寸和分辨率。
width
的{{1}}和height
只是200
中保存的大小。因此,您永远不需要调整大小&#39; svg,因为它会无限扩展。
如果您将px
放在SVG
代码中并定义尺寸,例如:
img
即使它在<img src="myawesome.svg" width="500" height="500" />
中定义为尺寸为SVG
,它也应该扩大或缩小,而不会改变外观质量。
由于结构的这种完全不同,在某些情况下,200
或jpg
将不会遵循相同的规则,因为它们是渲染图像。
如果在Drupal中进行此操作;对png
例外,只保存文件而不调整大小,并为所有图像添加打印尺寸。它不会伤害渲染的图像,它应该显示SVG
与它们相同的大小。
TL; DR SVG
是一个SVG
文件,不是真正的图像,调整大小是没有意义的,因为它没有真正的分辨率或大小,可以无限扩展。它们看起来很相似,因为它们都是视觉元素。为xml
设置例外,以便它只存储文件,当打印渲染的图像或SVG
时,将调整后的尺寸添加到SVG
输出。