thinkPHP实现使用Imagick将svg字符串转为base64的png格式
ThinkPHP
2024-10-30 08:57:55
网站开发中关于图片的格式转换、剪切等操作是常见的需求点,常见的如图片为主的网站中,经常会需要先展示一个小图,再来获取高清图。
那么关于图片的处理,也就需要我们基于高清图片生成一个体积更小的图片能够快速展示。
本篇文中内容就来介绍在php开发中,如何使用Imagick插件来实现对将一个svg字符串格式的图片转换为base64格式的png图片数据。
一、引入Imagick插件
use Imagick;
二、创建方法将svg字符串转为base64格式的png数据
public function test(){
$jsonData = array("M 518 382 Q 572 385 623 389 Q 758 399 900 383 Q 928 379 935 390 Q 944 405 930 419 Q 896 452 845 475 Q 829 482 798 473 Q 723 460 480 434 Q 180 409 137 408 Q 130 408 124 408 Q 108 408 106 395 Q 105 380 127 363 Q 146 348 183 334 Q 195 330 216 338 Q 232 344 306 354 Q 400 373 518 382 Z");
$pathData = $jsonData;
$imagick = new Imagick();
$svg = '<svg width="89" height="80" version="1.1" xmlns="http://www.w3.org/2000/svg"><g transform="scale(0.058, -0.058) translate(-50, -850)">';
foreach ($pathData as $value) {
$svg = $svg.'<path d="'.$value.'" style="fill:#f00;stroke:#f00;" stroke-width="0"></path>';
}
$svg = $svg.'</g> </svg>';
$imagick->readImageBlob($svg, 'SVG');
$imagick->setImageFormat('png');
$base64Png = $imagick->getImageBlob();
$base64Png = base64_encode($base64Png);
$imagick->clear();
$imagick->destroy();
echo $base64Png;
}
注意项:
php对于颜色的处理不是很理想,若你的图片有丰富的色彩不建议你使用php进行转换。(本人亲测,红色经过转换后,变成了紫色)
该方法不支持svg动画效果,仅支持简单的单图效果。
六月初字帖坊小程序
你想要的字帖模板及工具,这里都有!
881篇文章
509人已阅读