使用 PHP Imagick 从 SVG 创建 PNG 时如何设置高度和宽度?



我正在尝试从SVG动态生成PNG文件。

因此,假设我有一个 SVG 文件http://domain.tld/lib/img/svg/12345.svg但我想调用http://domain.tld/png/12345/5000/它会导致我的 SVG 文件的 5000px 宽 PNG 图像。

我有两个问题:

  1. 调整大小不起作用,因为我提到的,因为 PNG 首先获取 SVG 的尺寸,然后放大,这会导致一些看起来很丑的 PNG,正如您可以想象的那样。但是我想知道如何告诉脚本:"从 x/y 尺寸的 SVG 创建 PNG"??
  2. 目前,我需要创建一个打印出来的临时PNG文件,而不是完全动态创建的文件。(否则我总是被告知图像包含错误。但是如果我保存它并再次加载它,它可以工作。但它很糟糕...

这是我的代码:

$file = 'lib/img/svg/12345.svg';
$size = 5000;
$temp = 'lib/img/png/temp/12345.png';
$img = new Imagick();
$img->setBackgroundColor(new ImagickPixel('transparent'));
$svg = file_get_contents($file);
$img->readImageBlob($svg);
$img->setImageFormat('png24');
$img->resizeImage($size, 0, imagick::FILTER_LANCZOS, 1);
$img->writeImage($temp);
$img->clear();
$img = imagecreatefrompng($temp);
header('Content-Type: image/png');
imagealphablending($img,false);
imagesavealpha($img,true);
imagepng($img);
imagedestroy($img);

如果要调整 JPEG 图像的大小,请使用自适应调整大小图像功能:

// jpeg
$im->adaptiveResizeImage(512, 512); // width and height

或者,如果要调整 PNG 图像的大小,请使用带有筛选器的调整大小图像函数:

// png
$im->resizeImage(512, 512, imagick::FILTER_LANCZOS, 1); // width and height

最新更新