thinkphp6实现图片转SVG代码
今天在做工具站的时候想到做一个图片转换SVG代码的功能,于是研究了一下写出来了,现在分享给大家
演示网址:https://ssl.goolibao.com/svg
前端大家可以使用 highlight.js 库来实现代码高亮显示
跟我演示站一样
喜欢thinkphp的朋友可以尝试研究一下
核心代码:
// 从PNG图片生成SVG代码
private function generateSvgFromPng($imageData, $width, $height)
{
$svg = '<svg width="' . $width . '" height="' . $height . '">';
$pathData = '';
for ($y = 0; $y < $height; $y++) {
for ($x = 0; $x < $width; $x++) {
$color = imagecolorat($imageData, $x, $y);
$rgba = imagecolorsforindex($imageData, $color);
$opacity = round($rgba['alpha'] / 127, 2);
if ($opacity == 0) {
continue;
}
$pathData .= 'M' . $x . ',' . $y . 'h1v1h-1z';
}
}
$svg .= '<path d="' . $pathData . '" style="fill:none;stroke:black;stroke-width:1px;" />';
$svg .= '</svg>';
return $svg;
}
// 从JPEG图片生成SVG代码
private function generateSvgFromJpeg($imageData, $width, $height)
{
$svg = '<svg width="' . $width . '" height="' . $height . '">';
$pathData = '';
for ($y = 0; $y < $height; $y++) {
for ($x = 0; $x < $width; $x++) {
$color = imagecolorat($imageData, $x, $y);
$rgb = imagecolorsforindex($imageData, $color);
$pathData .= 'M' . $x . ',' . $y . 'h1v1h-1z';
}
}
$svg .= '<path d="' . $pathData . '" style="fill:none;stroke:black;stroke-width:1px;" />';
$svg .= '</svg>';
return $svg;
}
// 从GIF图片生成SVG代码
private function generateSvgFromGif($imageData, $width, $height)
{
$svg = '<svg width="' . $width . '" height="' . $height . '">';
$pathData = '';
for ($y = 0; $y < $height; $y++) {
for ($x = 0; $x < $width; $x++) {
$color = imagecolorat($imageData, $x, $y);
$rgb = imagecolorsforindex($imageData, $color);
$pathData .= 'M' . $x . ',' . $y . 'h1v1h-1z';
}
}
$svg .= '<path d="' . $pathData . '" style="fill:none;stroke:black;stroke-width:1px;" />';
$svg .= '</svg>';
return $svg;
}
}
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!