2

我需要替换 SVG 文件中的某些颜色

以下是我到目前为止所拥有的,但它并没有取代任何东西,也没有给出错误。

有人可以帮忙解决正则表达式部分吗?

// Define Default Color Name and Hexcode values
$colorsArray = array(
    'red' => 'FF0000',
    'orange' => 'FF5000',
    'yellow' => 'FFF200',
    // ...
);

$svgImageName = 'my-svg-file.svg';

$svgRawString = file_get_contents($svgImageName);

foreach ($colorsArray as $colorName => $colorCode) {

    $svgOutput = preg_replace(
         '/#([0-9a-f]{6})/',
        '#'.$colorsArray[$newColorName],
        $svgRawString
    );

}


echo '<textarea rows="20" cols="100">' .$svgOutput. '</textarea><hr>';

这是我的 SVG 文件的示例输出...

<path fill="#FFFFFF" d="M2129.319,78.436c-8.375,0-15.165,6.79-15.165,15.165v748.803c0,8.375,6.79,15.165,15.165,15.165
                s15.165-6.79,15.165-15.165V93.601C2144.484,85.225,2137.694,78.436,2129.319,78.436z"/>
            <path fill="#FF0000" d="M183.587,78.436c-8.375,0-15.165,6.79-15.165,15.165v748.803c0,8.375,6.79,15.165,15.165,15.165
                s15.165-6.79,15.165-15.165V93.601C198.752,85.225,191.963,78.436,183.587,78.436z"/>
4

1 回答 1

1

您的正则表达式仅匹配小写字符,添加i修饰符以匹配不区分大小写:

/#([0-9a-f]{6})/i

于 2013-08-02T02:31:21.473 回答