PHP Imagick 转换SVG到PNG

CentonOS 7 X64 + PHP 7.2
ImageMagick-7.0.9-27.zip
imagick-3.4.4.tgz

需求

接口请求到的图片返回是一个 image/svg+xml ,导致不支持SVG图片的应用无法正常显示,要转换为常规图片格式

解决

ImageMagick 是一套软件系列,专门用来处理图片的CRUD,PHP可以通过扩展 [Imagick] 来调用其相应的API,来实现图片的处理工作。
ImageMagick 支持的图片格式很多,参考地址:
https://www.imagemagick.org/script/formats.php
要使用时,要先安装 ImageMagick ,软件包可以从 github 下载,或者镜像地址
其支持的应用程序接口列表
https://imagemagick.org/script/develop.php#php

操作步骤

ImageMagick 下载: 【ImageMagick-7.0.9-27.zip】
https://imagemagick.org/script/mirror.php

源码安装参考地址:
https://imagemagick.org/script/install-source.php

# unzip ImageMagick-7.0.9-27.zip
# cd ImageMagick-7.0.9-27
# ./configure --help
# cd /data/server/
# mkdir ImageMagick-7.0.9-27
# ln -s /data/server/ImageMagick-7.0.9-27 ImageMagick
# cd /data/source/ImageMagick-7.0.9-27
# ./configure --prefix=/data/server/ImageMagick \
--with-modules --enable-share --enable-static --with-perl
# make && make install

Tips: 安装路径,默认是 /usr/local/bin /usr/local/lib
可能还需要动态加载lib: ldconfig /usr/local/lib

Imagick 下载:
https://pecl.php.net/get/imagick-3.4.4.tgz

安装

# tar -zxvf imagick-3.4.4.tgz
# cd imagick-3.4.4
# phpize
# ./configure --with-imagick=/data/server/ImageMagick
# make && make install
# cd /data/server/php/lib/php/extensions/no-debug-non-zts-20170718
# php --ini
# vim /data/server/php/lib/php.ini # 添加配置文件的扩展
# php -m

报错信息

libltdl is required for modules and OpenCL builds

解决: yum -y install libtool-ltdl-devel

转换样例

$im = new Imagick();
$im->readImageBlob(file_get_contents("1.svg"));
// png settings
$im->setImageFormat("png24");
$srcImage = $im->getImageGeometry(); //获取源图片宽和高
$im->resizeImage($srcImage['width'], $srcImage['height'], imagick::FILTER_LANCZOS, 1, false);

$im->writeImage('2.png');
$im->clear();
# $im->destroy(); # 此方法已经废弃

扩展支持的方法参考官方文档:
https://www.php.net/manual/zh/book.imagick.php