Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Imagick can';无法写入SVG文件_Php_Image Processing_Svg_Imagemagick_Imagick - Fatal编程技术网

Php Imagick can';无法写入SVG文件

Php Imagick can';无法写入SVG文件,php,image-processing,svg,imagemagick,imagick,Php,Image Processing,Svg,Imagemagick,Imagick,我使用Imagick打开图像,调整其大小,设置图像格式(如果需要),然后将结果写入另一个文件夹。它可以与ICO和PNG一起工作,但是不能编写SVG文件 ImagickException:无法在Imagick->writeimage()中写入文件:C:\Sites\devdesktop\test\Sites\default\files\tempimages\abstract-spiral-striped-background-100.svg(C:\Sites\devdesktop\test\Sit

我使用Imagick打开图像,调整其大小,设置图像格式(如果需要),然后将结果写入另一个文件夹。它可以与ICO和PNG一起工作,但是不能编写SVG文件

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

这是来自Drupal7的错误消息

这是我的密码:

$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]);
$file=文件加载($form_state['values']['fid']);
$image=newimagick(drupal_realpath($file->uri));
$image->setImageFormat($type[$type_num]);
$image->resizeImage($size[$size\u num],$size[$size\u num],Imagick::FILTER\u未定义,1);
$destination=public://tempimages/“.substr($file->filename,0,-4)。”-“$size[$size\u num]。$type[$type\u num];
$image->writeImage(drupal_realpath($destination))//文件名,0,-4)。'-'.$size[$size\u num].$type[$type\u 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> 


SVG
JPG
PNG
的图像不同。

在大多数情况下,它只是一个带有打印点的
xml
,通常没有维度和分辨率

200
width
height
正好是它在
px
中保存时的大小。因此,您永远不需要“调整”svg的大小,因为它将无限扩展

如果在
img
标记中放置
SVG
,并定义尺寸,如:

尽管它在SVG中被定义为具有
200
的维度,但它应该在不改变外观质量的情况下放大或缩小

由于结构上的这种完全不同,在某些情况下,它不会遵循与渲染图像时的
jpg
png
相同的规则

如果这是在Drupal中完成的;对只存储文件而不调整大小的
SVG
做一个例外,并在打印所有图像时添加尺寸。它不会损坏渲染的图像,并且应该显示与它们相同大小的
SVG

TL;DR
SVG
是一个
xml
文件,不是真正的图像,调整它的大小是毫无意义的,因为它没有实际的分辨率或大小,并且可以无限扩展。它们看起来很相似,因为它们都是视觉元素。将
SVG
作为例外,使其仅存储文件,并且在打印渲染图像或
SVG
时,将调整大小的尺寸添加到
img
输出中