2017-10-04 19 views
0

現在、SVG path with a gradient(さまざまな幅と色の同じパスの複数のパスを持つことによってエミュレートされる)を生成できるスクリプト(through .py plug-ins in GIMP)があります。勾配付きSVGパス

enter image description here

しかし、私は複数のパスを定義する必要なしに似た何かを生成する構文があるかどうかを知りたいのです。

グラデーションと単一パスを定義するのと同様です。

私はsvgのパスグラデーションのようなキーワードを検索しましたが、これまでに見つかったのは、パスに沿って変化するグラデーションです。上の図と似ていないので、正しいキーワードを探していないのでしょうか?またはそのようなものが存在する場合。

答えて

3

これは完全に不可能ではありませんが、かなり初歩的なケースに限られており、かなり複雑なフープを飛ばしなければなりません。

SVGには、線形と放射状の2種類のグラデーションしかありません。線形グラデーションを直線で、放射状グラデーションを円または円弧で等軸に整列させることができます。

各パスを個々のセグメントに分割する必要があります。直線を接続する必要がある場合は、ラインをポリゴンに変換してコーナーを作成します。

<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" width="300" height="200" > 
 
    <defs> 
 
    <linearGradient id="rainbow"> 
 
     <stop stop-color="rgb(255,0,0)" offset="0.8" /> 
 
     <stop stop-color="rgb(255,128,0)" offset="0.825" /> 
 
     <stop stop-color="rgb(255,255,0)" offset="0.85" /> 
 
     <stop stop-color="rgb(128,255,0)" offset="0.875" /> 
 
     <stop stop-color="rgb(0,255,0)" offset="0.9" /> 
 
     <stop stop-color="rgb(0,240,68)" offset="0.925" /> 
 
     <stop stop-color="rgb(0,160,168)" offset="0.95" /> 
 
     <stop stop-color="rgb(0,0,255)" offset="0.975" /> 
 
     <stop stop-color="rgb(255,0,255)" offset="1" /> 
 
    </linearGradient> 
 
    <radialGradient xlink:href="#rainbow" gradientUnits="userSpaceOnUse" cx="60" cy="100" r="50" fx="60" fy="100" id="rg1" /> 
 
    <radialGradient xlink:href="#rainbow" gradientUnits="userSpaceOnUse" cx="140" cy="100" r="50" fx="140" fy="100" id="rg2" /> 
 
    <linearGradient xlink:href="#rainbow" gradientUnits="userSpaceOnUse" x1="100" y1="100" x2="100" y2="50" id="lg1" /> 
 
    <linearGradient xlink:href="#rainbow" gradientUnits="userSpaceOnUse" x1="100" y1="100" x2="100" y2="150" id="lg2" /> 
 
    <linearGradient xlink:href="#rainbow" gradientUnits="userSpaceOnUse" x1="50" y1="100" x2="100" y2="100" id="lg3" /> 
 
    </defs> 
 
    <path fill="none" stroke="url(#rg1)" stroke-width="10" d="M 60 55 A 45 45 0 0 0 60 145" /> 
 
    <path fill="none" stroke="url(#rg2)" stroke-width="10" d="M 140 55 A 45 45 0 0 1 140 145" /> 
 
    <path fill="none" stroke="url(#lg1)" stroke-width="10" d="M 60 55 140 55" /> 
 
    <path fill="none" stroke="url(#lg2)" stroke-width="10" d="M 60 145 100 145" /> 
 
    <polygon fill="url(#lg3)" points="90 80 100 80 100 150 90 140" /> 
 
</svg>