记录下magick转svg渲染失败
magick
支持上百种格式转换,下面是png
转svg
$ magick hj.png hj.svg
magick: delegate failed `'potrace' --svg --output '%o' '%i'' @ error/delegate.c/InvokeDelegate/1911.
错误描述:需要提供外部的委托
potrace
, 这里表示需要安装此插件
下面首先安装potrace
# for mac
brew install potrace
# for alpine
apk add potrace
当前的系统版本是
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.15.0
PRETTY_NAME="Alpine Linux v3.15"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
当前的magick
版本是
Version: ImageMagick 7.1.0-58 (Beta) Q16-HDRI aarch64 1590c22ec:20221230 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): bzlib fontconfig freetype jng jp2 jpeg lcms lzma pangocairo png raw tiff webp x xml zip zlib
Compiler: gcc (10.3)
安装potrace
后,需要再源码编译magick
$ cd ImageMagick-7 && \
configure \
make -j $(nproc) \
make install
编译完成后,执行转换命令
$ magick hj.png hj.svg
查看hj.svg
渲染的背景是黑色,所以此次转换效果不佳。
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1258.000000pt" height="1140.000000pt" viewBox="0 0 1258.000000 1140.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.16, written by Peter Selinger 2001-2019
</metadata>
<g transform="translate(0.000000,1140.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 8114 l0 -3286 50 -64 ..... />
</g>
</svg>
上面xml
文件就是hj.svg
文件内容, 通过potrace
转换出来的。 fill
填充的颜色是黑色,所以导致结果不佳。
询问magick
作者得出,需要取消外部potrace
提供转换,使用默认的内部支持。所以这里需要到配置文件中注释掉一行代码
$ grep -i svg /usr/local/etc/ImageMagick-7/delegates.xml | grep -i potrace
<!--<delegate decode="pnm" encode="trace" command=""potrace" \-\-svg \-\-output "%o" "%i""/> -->
再次执行转换命令,结果与原图的色彩一致
本作品采用《CC 协议》,转载必须注明作者和本文链接
$svgName = $i.''.$svgName; $fname = $i.''.$fname; $svgfile = $svg_upload_dir . $svgName; $success = file_put_contents($svgfile, $c_s_str); $im = new Imagick(); $svg = '<?xml version="1.0" encoding="UTF-8" standalone="no" ? >'.file_get_contents($svgfile); $im->setBackgroundColor(new ImagickPixel('transparent'));// $im->readImageBlob($svg); $im->setImageFormat("png24"); $im->resizeImage(500, 500, imagick::FILTER_LANCZOS, 1);//Resize $im->writeImage(Mage::getBaseDir('media').'/tmp/tmp/'.$fname); 必须添加“<?xml version="1.0"”头且版本必须为1.0否则无法转换 看看你有没有安装安装inkscape扩展