【问题标题】:Imagick can't write SVG filesimagick 不能写 svg 文件
【发布时间】:2015-01-17 17:29:46
【问题描述】:

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

ImagickException: 无法写入文件:C:\Sites\devdesktop\test\sites\default\files\tempimages\abstract-spiral-striped-background-100.svg in Imagick->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]);

这段代码 sn-p 可以完美地与 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> 

为什么会这样?

【问题讨论】:

    标签: php image-processing svg imagemagick imagick


    【解决方案1】:

    SVGJPGPNG 的方式不同。

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

    200widthheight 只是 px 中保存它的大小。因此,您永远不需要“调整” svg 的大小,因为它会无限缩放。

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

    &lt;img src="myawesome.svg" width="500" height="500" /&gt;

    即使它在SVG 中定义为具有200 的尺寸,它也应该在不改变外观质量的情况下放大或缩小。

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-11
      • 1970-01-01
      • 2012-07-09
      • 2022-01-24
      • 2017-05-17
      • 2022-01-13
      • 2014-06-06
      • 1970-01-01
      • 2012-09-29
      相关资源
      最近更新 更多