统计
  • 建站日期:2021-03-10
  • 文章总数:386 篇
  • 评论总数:421 条
  • 分类总数:9 个
  • 最后更新:10月20日
文章 未分类

thinkphp6实现图片转SVG代码

创新博客
首页 未分类 正文

thinkphp6实现图片转SVG代码
今天在做工具站的时候想到做一个图片转换SVG代码的功能,于是研究了一下写出来了,现在分享给大家
演示网址:https://ssl.goolibao.com/svg
前端大家可以使用 highlight.js 库来实现代码高亮显示
跟我演示站一样
喜欢thinkphp的朋友可以尝试研究一下


thinkphp6实现图片转SVG代码
-创新博客-专注于资源分享的blog
-第1
张图片

核心代码:

// 从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)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

这篇文章最后更新于2023-6-4,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
用thinkphp6对接Openai实现ai聊天功能
« 上一篇
基本的无缝滚动特效,当页面加载完成后,内容块会不断向左滚动
下一篇 »
为了防止灌水评论,登录后即可评论!

HI ! 请登录
注册会员,享受下载全站资源特权。

最新文章

热门文章