【问题标题】:Convert vector to raster in php在php中将矢量转换为栅格
【发布时间】:2014-05-13 16:08:56
【问题描述】:

我正在尝试将矢量图像格式 .emf,.wmf 转换为高分辨率清晰的光栅图像 .gif,jpg。 (通常这可以在 Illustrator 中轻松完成)。但我无法在 PHP 中做到这一点。我正在尝试以下代码,但结果要么模糊要么扭曲,甚至全黑。

<?php

$image = new Imagick("1.emf"); 

$image->resizeImage(1500,0,Imagick::FILTER_LANCZOS,1);

$image->setImageFormat('gif');

$image->setresolution(900, 900);

$image->writeImage("2.gif");

?>

【问题讨论】:

  • 考虑 PNG。 JPEG 用于照片,GIF 仅限于 8 位调色板,仅支持 1 位 alpha。
  • 是的,这两个我都试过了。它给出了相同的结果。 gif 比其他两个要好得多。寻找一些尖锐的东西,比如我们在 Illustrator 中导出到 jpg 功能。
  • 我可以向您保证,PNG 将为您提供最好的质量。如果不是,那么您在其他地方做错了什么。 PNG 是无损的。
  • 格式 EMF 和 WMF 有时不能可靠地转换为位图 - 与许多矢量格式一样,它取决于转换软件。您可能需要上传一些关于您遇到的问题的小插图。另外,请研究一下 ImageMagick 是否存在与您正在转换的图像中的对象类型相关的任何实现问题。
  • 你能发一个示例文件吗?

标签: php vector imagick raster


【解决方案1】:

我们只需要在加载图像之前设置分辨率。

$image = new Imagick();

$image->setresolution(300, 300);

$image->readimage($filename);

$image->resizeImage(1500,0,Imagick::FILTER_LANCZOS,1);

$image->setImageFormat('jpg');

$image->writeImage("1.jpg");

此代码会将矢量转换为清晰明快的光栅图像。它适用于所有矢量格式(svg、ai、emf、wmf 等)。如果 jpg 结果意外是黑色图像,则需要将图像透明度更改为白色(check this link)。解决透明度问题的另一种方法是将您的 PHP 更新到 5.5 并为该版本安装 Imagick。这样做不会对透明图像造成任何问题,上面的代码也可以正常工作。

出于测试目的,您可以将 jpg 更改为 png,因为它支持透明度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2013-09-05
    • 2011-03-08
    相关资源
    最近更新 更多