php svg转png,用PHP将SVG图像转换为PNG

77c11dc35d8eeff1e0142fd3f917d196.png

qq_遁去的一_1

有趣的是,你问这个,我最近刚为我的工作网站做了这个,我想我应该写一个教程.下面是如何使用PHP/Imagick来实现它,它使用ImageMagick:$usmap = '/path/to/blank/us-map.svg';$im = new Imagick();$svg = file_get_contents($usmap);

/*loop to color each state as needed, something like*/ $idColorArray = array(

     "AL" => "339966"

    ,"AK" => "0099FF"

    ...

    ,"WI" => "FF4B00"

    ,"WY" => "A3609B");foreach($idColorArray as $state => $color){//Where $color is a RRGGBB hex value

    $svg = preg_replace(

         '/id="'.$state.'" style="fill:#([0-9a-f]{6})/'

        , 'id="'.$state.'" style="fill:#'.$color        , $svg    );

        }$im->readImageBlob($svg);/*png settings*/$im->setImageFormat("png24");

        $im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1);  /*Optional, if you need to resize*//*jpeg*/$im->setImageFormat("jpeg");

        $im->adaptiveResizeImage(720, 445); /*Optional, if you need to resize*/

        $im->writeImage('/path/to/colored/us-map.png');/*(or .jpg)*/$im->clear();$im->destroy();regex颜色替换的步骤可能会根据SVG路径XML和您的id&color值的存储方式而有所不同。如果不想在服务器上存储文件,可以将图像输出为base 64,如下所示<?php  echo '';?>(在使用清空/销毁之前),但ie与png作为base 64有问题,因此您可能必须以jpeg的形式输出base 64。您可以在这里看到我为前雇主的销售区域地图所做的一个例子:开始:https:/upad.wikimedia.org/Wikipedia/Commons1/1a/Blank_US_Map_(State_Only).svg编辑写完上面的文章之后,我想出了两种改进的技术:1)而不是使用regex循环来更改填充状态,而是使用css来创建样式规则,如

    fill:blue;}#Al, #NY, #NM{

    fill:#cc6699;}/*etc..*/然后,您可以执行一个文本替换,在执行Imagickjpeg/png创建之前,将CSS规则注入SVG。如果颜色没有改变,请检查以确保您的路径标记中没有任何内联填充样式覆盖CSS。2)如果您不必实际创建jpeg/png映像文件(并且不需要支持过时的浏览器),则可以使用jQuery直接操作SVG。在使用IMG或对象标记嵌入SVG时,无法访问SVG路径,因此必须将SVGXML直接包含在网页html中,如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值