php imagick 滤镜,php – 如何使用Imagick / ImageMagick调整SVG大小

我正在向服务器发送一个SVG文件的字符串表示,并使用Imagick将其转换成jpeg,方式如下:

$image = stripslashes($_POST['json']);

$filename = $_POST['filename'];

$unique = time();

$im = new Imagick();

$im->readImageBlob($image);

$im->setImageFormat("jpeg");

$im->writeImage('../photos/' . $type . '/humourised_' . $unique . $filename);

$im->clear();

$im->destroy();

但是,我希望在光栅化SVG之前调整SVG的大小,以便生成的映像大于SVG文件中指定的维度.

我修改了我的代码如下:

$image = stripslashes($_POST['json']);

$filename = $_POST['filename'];

$unique = time();

$im = new Imagick();

$im->readImageBlob($image);

$res = $im->getImageResolution();

$x_ratio = $res['x'] / $im->getImageWidth();

$y_ratio = $res['y'] / $im->getImageHeight();

$im->removeImage();

$im->setResolution($width_in_pixels * $x_ratio,$height_in_pixels * $y_ratio);

$im->readImageBlob($image);

$im->setImageFormat("jpeg");

$im->writeImage('../photos/' . $type . '/humourised_' . $unique . $filename);

$im->clear();

$im->destroy();

该代码应该解决分辨率并相应地调整SVG的大小.如果SVG画布及其元素具有基于“百分比”的宽度,则它可以很好地工作,但是它似乎不适用于在“px”中定义的元素.不幸的是一个要求.

将发送到服务器的典型SVG字符串如下所示:

正如您可以看到构成该SVG的元素具有像素定义宽度和高度(使用百分比不幸不是此应用程序的选项)

有没有办法解决?或将SVG转换为png并将其呈现给定尺寸而不损失质量的任何其他方法.

谢谢.

编辑:虽然我从来没有设法找到一个完美的解决方案.相反,我结束发送SVG数据作为json,循环通过它的服务器端,并将像素缩放到预期的高度.

然后,经过多次尝试和错误,我意识到imagemagick在标准的SVG转换/旋转命令中出现问题,抛出任何操纵的元素.我结束了切换“inkscape”,将生成的SVG渲染为光栅图像.一切都很好.我还在挖掘一个潜在的配方解决方案,以抵消imagemagick造成的差异.如果我有成功,我会再次更新这个问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值