php如何实现png转svg矢量图png2svg.php

随然 2024-10-21 331 0

现在大模型比如flux的能力已经足够惊艳,所以随便练的lora比如logo和插画都有着不错的表现,但是生成出来的都是png图片,如果用到自己的设计或者网页中还是svg好点,下面简单做个png转黑白svg的效果,svg粘贴进figma、mastergo、即时设计这类设计软件或者自己代码中都很方便


准备工作

  1. Linux服务器比如CentOS 安装 Potrace:运行 sudo apt-get install potrace

  2. php安装 ImageMagick:运行 sudo apt-get install imagemagick

  3. 放开php函数exec()

下面直接贴png2svg.php代码

<?php

// 检查是否有文件上传
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK && $_FILES['file']['type'] == 'image/png') {
    $pngFile = $_FILES['file']['tmp_name'];
    $svgFile = tempnam(sys_get_temp_dir(), 'svg');

    // 使用 ImageMagick 将 PNG 直接转换为 SVG
    exec("convert $pngFile -format svg $svgFile", $output, $return_var);

    // 检查 ImageMagick 命令是否成功
    if ($return_var !== 0) {
        echo "ImageMagick 命令执行失败。";
        exit;
    }

    // 检查 SVG 文件是否存在且不为空
    if (file_exists($svgFile) && filesize($svgFile) > 0) {
        // 读取 SVG 文件内容
        $svgContent = file_get_contents($svgFile);

        // 提供 SVG 文件下载
        header('Content-Type: image/svg+xml');
        header('Content-Disposition: attachment; filename="converted.svg"');
        echo $svgContent;

        // 删除临时文件
        unlink($svgFile);

        // 终止脚本执行,防止输出 HTML 内容
        exit;
    } else {
        echo "SVG 文件生成失败或为空。";
    }
} else {
    echo "请上传一个 PNG 文件。";
}

?>

<!DOCTYPE html>
<html>
<head>
    <title>PNG 转 SVG</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data">
        <input type="file" name="file" accept="image/png">
        <input type="submit" value="转换">
    </form>
</body>
</html>