日々適当

hibitekitou

IllustarotのSVGインポートで読み込めるポイント数

cg |2020-03-10

SVGのパスデータにおいて、一つのパスオブジェクトは何個の点まで持てるかの確認です。ググると32000ってことらしいのですが、その検証です。

import svgwrite
import math

pointNum = 100
p = ""
for i in range( pointNum ):
	x = 100.0  * math.cos( math.radians( 360.0/float( pointNum ) * i ) ) + 105.0
	y = 100.0  * math.sin( math.radians( 360.0/float( pointNum ) * i ) ) + 105.0
	if i == 0:
		p += " M " + str( x ) + " " + str( y )
	elif i == pointNum -1:
		p += " L " + str( x ) + " " + str( y ) + "Z"
	else:
		p += " L " + str( x ) + " " + str( y ) 
dwg = svgwrite.drawing.Drawing(  'test_path.svg'  , size=( 210, 210), profile='full' )
path = dwg.path( p ).stroke( color="red" , width=0.5 ).fill( "none" )
dwg.add( path )
dwg.save()

こんな感じのスクリプトで指定したポイント数の円を描いたsvgファイルをIllustratorに読み込みます。この場合、pointNumの値が100なので100ポイントで構成された円が出力されます。
このpointNumの値を32000にしたものはちゃんとIllustratorに読み込めました。しかして、これを32001にするとダメです。上限は32000ということみたいです。

ちなみにですが、先のスクリプトのfor文部分をもう一個追加して、その中の円の半径の指定部分を小さくし、つまり二重の円を描いた時、pointNumが32000でも読み込まれます。ポイント数自体は64000になりますが、一つ一つの円は32000なのでOKってことですね。。

svg経由でこの制限を突破するのは難しいですかねー?

<追記>そもそも、Illustratorの仕様としてパス一個につき32000ポイントしか許容していない疑惑。であるならポイント数を削減する作業が必要になるのだろうけど、隣接する区域のパスとズレが生じそうで嫌やんだよなぁ…。ちなみに先のエントリで話題にした佐渡市の佐渡島本島部分のポイント数は37662でございました。</追記>

コメント ( 0 )|Trackback ( )
  ・