我正在嘗試將黑色 SVG 影像轉換為彩色影像。即用給定的顏色替換黑色。我試過了:
convert -resize 256x256\> -fill 'red' original.svg -opaque black new.png
這種作品:

如您所見,它仍然有黑色邊框。我該如何擺脫它?
我試圖上傳原始 SVG,但它不會讓我(不接受格式)。但這就是我做直道時的樣子:
convert original.svg new.png

更新:我剛剛發現我可以在主 SVG 中設定填充和邊框:
<svg stroke="red" fill="red" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
但這并不理想,因為我需要打開 SVG,使用正則運算式編輯我想要的值,保存它,然后最后進行轉換 - 所以有點啰嗦:)
我正在測驗它的 SVG 是:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z"/></svg>
更新 2:
好的,一個非常骯臟的黑客 - 但似乎可以解決問題。在我的腳本中,我現在將 SVG 克隆到一個臨時檔案中,在其上運行sed以更改填充/描邊顏色,然后轉換為全尺寸的 PNG:
cp youtube-square.svg foo.svg
sed -i 's/<svg /<svg stroke="green" fill="green" /g' foo.svg
convert foo.svg foo.png
我喜歡有點笨重,但它似乎作業:)
uj5u.com熱心網友回復:
在 Imagemagick 中,您可以將黑色 SVG 更改為紅色 PNG,如下所示。在這里我使用你的 black.png,因為你沒有提供 black.svg 檔案。以下是 Imagemagick 的 Unix 語法。

convert black.png \
\( -clone 0 -fill red -colorize 100 \) \
\( -clone 0 -negate \) \
-compose over -composite \
black2red.png

uj5u.com熱心網友回復:
您可以在使用 ImageMagic 轉換之前對 SVG 進行 XSL 轉換。
給定 XML(original.svg):
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
<!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) -->
<path d="M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z"/>
</svg>
以及以下 XSL,我在其中向<svg>(convert.xsl) 添加了填充和描邊屬性:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
exclude-result-prefixes="svg">
<xsl:template match="svg:svg">
<svg>
<xsl:attribute name="fill">
<xsl:value-of select="'red'"/>
</xsl:attribute>
<xsl:attribute name="stroke">
<xsl:value-of select="'none'"/>
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:copy-of select="node()"/>
</svg>
</xsl:template>
</xsl:stylesheet>
這個命令:
xsltproc convert.xsl original.svg | convert - new.png
將轉換后的 SVG 匯入 ImageMagic 并生成 PNG。
您還可以在 XSL 中使用引數,因此這里是上述的變體:
向 XSL 添加了一個引數。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
exclude-result-prefixes="svg">
<xsl:param name="fill" select="'red'" />
<xsl:template match="svg:svg">
<svg>
<xsl:attribute name="fill">
<xsl:value-of select="$fill"/>
</xsl:attribute>
<xsl:attribute name="stroke">
<xsl:value-of select="'none'"/>
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:copy-of select="node()"/>
</svg>
</xsl:template>
</xsl:stylesheet>
并使用命令:
xsltproc --stringparam fill green convert.xsl original.svg | convert - new.png
可以將 PNG(和 SVG)的填充更改為綠色。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/484350.html
