我正在尝试使用SVG动态生成PNG文件。
所以可以说我有一个SVG文件http://domain.tld/lib/img/svg/12345.svg
,但我想调用http://domain.tld/png/12345/5000/
,这将导致我的SVG文件的宽度为5000px的PNG图像。
我有两个问题:
- 调整大小不起作用,因为PNG首先会获得SVG的尺寸,然后再进行大规模升级,这会导致PNG看起来很难看。但是我不知道如何告诉脚本:“从SVG中以x / y尺寸创建PNG”?
- 目前,我需要创建一个临时的PNG文件,而不是完全动态创建的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,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);