円をパスに変換する方法は?


8

たとえば、IllustratorからSVGを保存してコードを表示すると、次のような<circle>要素が表示されます。

<circle cx="131.6" cy="292.3" r="311.7" />

しかし、私はそれが<path>要素ではなく、<circle>要素であって欲しいのです。

どうすればパス要素に変更できますか?


1
理由は何ですか?
Joonas

回答:


7

一つの解決策:ではイラストレーター、あなたのサークルを選択し、選択Object> Compound Path> Make

これは、複製されたIllustratorの円形状を使用した簡単なテストです。1つ目は変更なし、2つ目は複合パスを適用したものです。

<circle class="cls-1" cx="466.5" cy="184.5" r="117.5"/>
<path class="cls-1" d="M320,190.5A121.5,121.5,0,1,1,198.5,69,121.5,121.5,0,0,1,320,190.5Z" transform="translate(-77 -69)"/>

注:あなたが選択することで、基本的な形状に戻すことができますObject> Compound Path> Release


テストケース:

複合パスを適用する前に:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 612 157.41935">
  <defs>
    <style>
      .a {
        fill: #ed2024;
      }

      .b {
        fill: none;
        stroke: #ed2024;
        stroke-miterlimit: 10;
        stroke-width: 40px;
      }
    </style>
  </defs>
  <title>before</title>
  <rect class="a" width="100" height="100"/>
  <rect class="a" x="127.54853" width="100" height="100" rx="12" ry="12"/>
  <circle class="a" cx="305.09706" cy="50" r="50"/>
  <polygon class="a" points="482.646 50 457.646 93.301 407.646 93.301 382.646 50 407.646 6.699 457.646 6.699 482.646 50"/>
  <polygon class="a" points="560.194 12.169 592.212 0.8 591.278 34.721 612 61.615 579.405 71.209 560.194 99.2 540.983 71.209 508.388 61.615 529.111 34.721 528.176 0.8 560.194 12.169"/>
  <line class="b" y1="137.41935" x2="612" y2="137.41935"/>
</svg>

個々の形状に複合パスを適用した後:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 612 157.41935">
  <defs>
    <style>
      .a {
        fill: #ed2024;
      }

      .b {
        fill: none;
        stroke: #ed2024;
        stroke-miterlimit: 10;
        stroke-width: 40px;
      }
    </style>
  </defs>
  <title>after</title>
  <path class="a" d="M100,100H0V0H100Z"/>
  <path class="a" d="M215.54853,100h-76a12.03528,12.03528,0,0,1-12-12V12a12.03528,12.03528,0,0,1,12-12h76a12.03528,12.03528,0,0,1,12,12V88A12.03528,12.03528,0,0,1,215.54853,100Z"/>
  <path class="a" d="M355.09706,50a50,50,0,1,1-50-50A50,50,0,0,1,355.09706,50Z"/>
  <path class="a" d="M482.6456,50l-25,43.30127h-50L382.6456,50l25-43.30127h50Z"/>
  <path class="a" d="M560.19413,12.16931,592.21192.8l-.93427,33.92058L612,61.61455l-32.5952,9.59476L560.19413,99.2,540.98346,71.20931l-32.5952-9.59476,20.72235-26.894L528.17634.8Z"/>
  <path class="b" d="M0,137.41935H612"/>
</svg>

上記のレンダリングされたsvgファイルはここにあります

リンク:


ええ、そうですが、アニメーション化が簡単なのは、本質的に火ではありません。とにかくSVGは完全に頭がおかしい。
joojaa 2017年

@joojaa実際にはOPの質問のポイントではなかったので、SVGの基本的な形状に関するメモを削除しました。あなたのコメントが私をやる気にさせて、私はそのビットを捨て、私の回答をより合理化しました。ありがとう!:)
mhulse 2017年

1
涼しい!彼女が尋ねた理由は、SVG-Morpheus(alexk111.github.io/SVG-Morpheus)でアイコンをモーフィングしているときに、オブジェクトがすべての<path>要素ではないときにグリッチが発生することがあるからです。すべてが<path>要素であるときに完璧に機能するため、すべてをパスに変換することは、SVG-Morpheusで使用するための最良のソリューションのようです。
trusktr 2017年

これはすべてのもので機能しますか?あると仮定し<rect><polygon>、および<line>など、要素:すべてのそれらのこのメイクはなり<path>すぎてね?
trusktr 2017年

1
@trusktrいい質問ですね。より堅牢なテストケースを表示するように、回答を更新しました。
mhulse 2017年

-1

var circle = doc.getElementsByTagName('circle');

 var convertSvgCircleToPath = function(cx, cy, r, deg) {

      var theta = deg * Math.PI / 180,
      dx = r * Math.cos(theta),
      dy = -r * Math.sin(theta);

      return "M " + cx + " " + cy + "m " + dx + "," + dy + "a " + r + "," + r + " 0 1,0 " + -2 * dx + "," + -2 * dy + "a " + r + "," + r + " 0 1,0 " + 2 * dx + "," + 2 * dy;

 }

 convertSvgCircleToPath(circle.getAttribute('cx'), circle.getAttribute('cy'), circle.getAttribute('r'), 180);

cx = x軸の位置cy = y軸の位置r =円の半径deg = 180/360


1
こんにちはカルマルートです。GDSEへようこそ。このコードは機能する可能性がありますが、適切にフォーマットすることを検討し、それが何であり、どのように使用するかを説明するために少し時間を費やす必要があります。OPの視点から見てみてください。彼らはIllustratorからsvgファイルをエクスポートし、代わりにパス要素から円を作成したいと考えています。OPはこのコードをどのように使用してファイルを変更しますか?彼らはそのままブラウザで実行できますか?変更したファイルを保存する方法は?
Wolff
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.