SVGã®æŠèŠãšäŸ-åã°ã©ã
SVG ïŒ ã¹ã±ãŒã©ãã«ãã¯ã¿ãŒã°ã©ãã£ãã¯ã¹ïŒã¯ãW3Cã§éçºãããEPSãã¢ãã¡ãŒã·ã§ã³ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«äŒŒããã¯ã¿ãŒã°ã©ãã£ãã¯ã¹åœ¢åŒã§ãã å
éšã§ã¯ããã¡ã€ã«ã¯ãã€ããªã§ã¯ãªãããªããžã§ã¯ãããã®å¹æãããã³åäœãèšè¿°ããéåžžã®XMLã§ãã å°å·ãªã©ã®å質ãæãªãããšãªãç»åã®ãµã€ãºã倿Žããå Žåãäžè¬çã«ãã¯ãã«ã°ã©ãã£ãã¯ãå¿
èŠã§ãã Webã§ã¯ããããã¯ãµã€ãºãïŒ
ã§ããã©ã³ããµã€ãºãemã§ãããŽãSVGã§èšå®ãããŠãããŽã 補ã®ãµã€ãã§ããã確èªããŠããŸãã ããè¯ãã¢ãã¿ãŒã«ç§»å-ãã¹ãŠãæ¯äŸããŠå€åããŸããã å®çšçãªäŸã¯ã ã¢ã€ã³ã³ãã°ã©ããå°å³ãããŽãã€ã³ã¿ãŒãã§ãŒã¹ã§ãã 以äžã«ããã®ãããªåã°ã©ãã®äŸã瀺ããŸãã
çµ±å
HTML-ã€ã³ã©ã€ã³
SVGã¯æ¬è³ªçã«XMLã§ãããããXHTMLæ§é ã§ã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã§ããã«èšè¿°ã§ããŸãã ãã ãããã§ã«èŠãããã«ãXHTML1.1 doctypeã¯ãããã¥ã¡ã³ãã®MIMEããã¯ãããã¹ããã¬ãŒã³ã§ã¯ãªãããšãæå³ããŸãã ãã ããIE6ããã¯ååãšããŠXHTMLãçè§£ããŸãããäžæ¹ãFirefoxã¯2ã€ã®ããŒãµãŒã䜿çšããŸããMIMEãapplication / xhtml + xmlã§ãªãå Žåãã€ã³ã©ã€ã³SVGã¯èªèãããŸããã ããã¯äž¡åã®å£-IEãšFFã§ãã
/>
2çªç®ã®æ¹æ³ã§æãå®çšçãªæ¹æ³ã¯ããªããžã§ã¯ãã¿ã°ã䜿çšããŠæ¢åã®ãã¡ã€ã«ãåç
§ããããšã§ãã ã®ããã«
ãã©ãã£ãã¯ã®åæžããã¡ã€ã«ãå§çž®ããSVGZã¢ãŒã«ã€ããååŸã§ããŸããCSSãšJavascipt
以äžã«ç€ºãããã«ãSVGã¯HTML / XMLãšéåžžã«å¯æ¥ã«é¢é£ããŠãããããCSSãªããžã§ã¯ããCSSã§èšè¿°ããã ãã§ãªããããããçš®é¡ã®onclickãªã©ã®Javascript颿°ãèšè¿°ããããšãã§ããŸãã ã€ãã³ãïŒãããã£ãŠãã€ã³ã¿ã©ã¯ãã£ãæ©èœïŒã />
倿ãšãšãã£ã¿ãŒ
SVGãpng / jpegã«å€æããããšãã§ããŸããããã®ããã«ã¯å®éã«ãã³ãã©ãŒã®äœæ¥ãè¡ãå¿
èŠããããŸãã PHPã§ã¯ã PEAR XML_svg2imageã©ã€ãã©ãªããããè¡ããŸãã ã©ã¹ã¿ãŒç»åããã¯ã¿ãŒç»åã«å€æãããµãŒãã¹ããããŸã ïŒEPSã¯ãããŸããïŒã ç·šéè
ãã-InkscapeãšAdobe IllustratorãCorel DrawããããŸãã
ã°ã©ãã£ãã¯ã¹
ããªããã£ã
æç»ã¯ã空éã®å®çŸ©ïŒ2次å
ïŒã座æšãžã®åé¢ïŒæµ®åå°æ°ç¹ãŸãã¯ããŒã»ã³ãã®åäœïŒãããã³ããªããã£ãæ§é ã®å°å
¥ããå§ãŸããŸãã- line-çŽç·ã x1ãy1ãx2ãy2-座æš
- ããªã©ã€ã³-ç Žç·ã points-ç¹ã®åº§æšã®åæ
- rectã¯é·æ¹åœ¢ã§ãã xãyãå¹
ãé«ããrxãry-å·Šäžé
ã寞æ³ãã³ãŒããŒååŸ
- polygoneã¯ããªãŽã³ã§ãã ããªã©ã€ã³ã®ããã«èŠããŸãã points-ãã€ã³ãã®åº§æš
- ãµãŒã¯ã«-ãµãŒã¯ã«ã cxãcyãr-äžå¿åº§æšãšååŸ
- æ¥åã cxãcyãrxãry-äžå¿åº§æšãšååŸ
- ããã¹ã-ããã¹ãã®ç¢æã æ¹è¡ããªãã絶察äœçœ®ãèšå®ãããŠãããããéåžžã«äžäŸ¿ã§ãã xãyãfont-familyãfont-size
- tspan-ããã¹ãèŠçŽ å
ã®åèªã説æã§ããŸãã ããšãã°ãã·ãããŸãã¯è²ä»ã
- tref-æå®ãããIDãæã€ããã¹ãèŠçŽ ã®åå©çš
<tref xlink:href="#myText" x="50" y="50">
textPath-ID />
<textPath xlink:href="#myPath" startOffset="50%"> Vinogradoff
ã«ãã£ãŠé¢é£ä»ãããããã¹æ²ç·äžã®ããã¹ã />
<textPath xlink:href="#myPath" startOffset="50%"> Vinogradoff
/>
<textPath xlink:href="#myPath" startOffset="50%"> Vinogradoff
ç»å-ãããããã
<image image-rendering="optimizeSpeed" xlink:href"background.jpg" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" filter="url(#blurpane)"/>
ãªãã·ã§ã³ãšã¹ã¿ã€ã«
htmlã®ããã«ãããã€ãã®è¡ãå¿
èŠãšãã人ã¯ã»ãšãã©ããŸãã-ãããã¯å¡ãã€ã¶ãããå¿
èŠããããè²ãæå®ããå¿
èŠããããããã¯ãã¹ãŠãã©ã¡ãŒã¿ãŒã«ãã£ãŠè¡ãããŸã- å¡ãã€ã¶ããå¡ãã€ã¶ãã«ãŒã« -å¡ãã€ã¶ãã ããšãã°ãããªãããéãèã
- strokeãstroke-linecapãstroke-linejoinãstroke-dasharrayãstroke-dashoffsetãstroke-width -borderãanalog of borderã äžç·ã«ã¹ãããŒã¯å¹
ã
- font-familyãfont-sizeãfont-styleãfont- weight-ããã¹ãèŠçŽ ã®ãã©ã³ã
- ããã¹ãã¢ã³ã«ãŒ
ã¿ã°ã¯å
å¡«ã«äœ¿çšãããŸãïŒ
- æš¡æ§
- linearGradient
- radialGradient
ãããã®ãã©ã¡ãŒã¿ãŒã¯ãã¹ãŠ1ã€ã®CSSã¢ããã°ã«çµåããã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã§èšè¿°ããããšãã§ããŸãã
style="stroke-width:1; stroke:blue; fill:none"
ããžã§ã°ã«ãŒããšæ²ç·
èŠçŽ ã¯äºãã«ã°ã«ãŒãåããããšãã§ããã°ã«ãŒãåããå¿
èŠããããŸãã ããã¹ãèŠçŽ å
ã«tspanãèšå®ãããŠãããšããäºå®ã«å ããŠãèŠçŽ ã«ãã£ãŠã°ã«ãŒãåãè¡ãããŸãããžãšæ²ç·ã¯ããã€ã³ãã«ãã£ãŠå®çŸ©ãããæ»ãããªé·ç§»ç·ã§ãã SVGã«ã¯ããã®ããã®ãã¹èŠçŽ ããããç Žç·ã®ããã«ã座æšã瀺ãããŸãã 座æšã®è¿ãã«ã¯ãç·ã®ããããã£ã瀺ãæåã䜿çšã§ããŸãã 倧ããªæåã¯çµ¶å¯Ÿäœçœ®ã瀺ããå°ããªæåã¯çžå¯Ÿçãªäœçœ®ã瀺ããŸã- Mã¯æ²ç·ã®å§ãŸãã§ãïŒxãyïŒ
- Z-æ²ç·ã®çµããïŒåº§æšãªãïŒ
- LçŽç·ïŒxãyïŒ
- H-æ°Žå¹³ç·
- V-瞊ç·
- Qã¯1ç¹ã§ã®2次æ²ç·ã§ã
- T-åã®ç¹ãåæ ããæ²ç·ã®ç¶ç¶-ç¹°ãè¿ãã®ãªãºã ã®æç»ãç°¡çŽ åããŸã
- C-2ç¹ã§ã®3次ã®å®éã®ããžã§æ²ç·
- Sã¯Cã®ç°¡æããŒãžã§ã³ã§ã
- A-æ¥åæ²ç·ïŒååŸãå転ïŒ
å€é©ãšæ©äŒ
SVGã®ãªããžã§ã¯ãã¯ããã©ã¡ãŒã¿ãŒãšããŠæå®ããããã£ã«ã¿ãŒã䜿çšããŠãæªããããããã£ãããç§»åãããã§ããŸãã- 翻蚳-ãªããžã§ã¯ã転é
- å転å転
- ã¹ã±ãŒã«-ã¹ã±ãŒãªã³ã°
- scewXãscewY-æªã¿
- ãããªãã¯ã¹-æ··å倿
SVGã¯ãç
§æå¹æã®ãããã£ã«ã¿ãŒããµããŒãããŠããŸãã ãŸãã鿢ç»åã«å ããŠãã¢ãã¡ãŒã·ã§ã³ããŠãŒã¶ãŒãšã®å¯Ÿè©±ã®å¯èœæ§ããããŸãã ããšãã°ã TetrisãŸãã¯é«ãè©äŸ¡ãããŠããMicrosoft TableãšSilverlightã¯SVGã§ããã°ã©ã ã«ãã£ãŠå®è£
ãããŠãããæ¬åœã«å¿
èŠãªå Žåã¯ãããªïŒ Ogg Theora = SVGT圢åŒïŒãæ©èœããŸãã ãã¡ããããã¹ãŠã®ãã©ãŠã¶ã«ææ°ã®æ©èœããŸã å®è£
ãããŠããããã§ã¯ãããŸããããOperaãªã©ã®å
é§è
ãå©çšã§ããŸãã
SVGããã³PHP / DBã®ã±ãŒãã°ã©ã
確ãã«ã Google APIã¯éåžžã«äŸ¿å©ãªãã®ã§ãã ãã ããä¿¡é Œã§ãããµãŒãã¹ã§ã¯ãããŸãããå€éšãµãŒãã¹ã§ããããšãå¿ããªãã§ãã ããã 忥éçºã¯ãªã¹ã¯ãåãããšã奜ãŸãªããããã°ã©ãã®çæã¯äŸç¶ãšããŠããŒã«ã«ã§ããå¿
èŠããããŸãïŒéçã§ãªãå ŽåïŒãããåä¿¡ããããŒã¿ã«åºã¥ããŠãphpã䜿çšããŠç»åãçæããŸã
調æ»ã®çµæã衚瀺ããããã®ããŒã¿ã®ããŒã¿ããŒã¹ïŒäžè«èª¿æ»ïŒã GDã©ã€ãã©ãªã¯SWFã®ãµã€ãºãèªèããŠããããã
ãã€ããªãã¡ã€ã«ã®ã¿ãçæããŸãã ãããã£ãŠãXMLãçæããå¿
èŠããããŸãïŒ header("Content-Type: image/svg+xml");
åªåãã¹ãããšãèŠãŠã¿ãŸãããïŒãããŸã§ã®ãšããã ã¯ãŒã«ãªã¢ãã¡ãŒã·ã§ã³ã¯ãããŸãã ïŒ...
2ã€ã®æ¥åã®ãŽã é
眮ããå§ããŸãããã ã»ã¯ã¿ãŒã¯ãå°ããªé åã®åŸé
ã®éãæžããããã«ãæããã«æèšåãã«æžå°ããé åºã§ç§»åããŸãã ã»ã¯ã¿ãŒã®è²ã¯ãæããã«ããŒã¹ã®æ°ã«æ¯äŸããŠèšç®ãããŸã-ãããåé¡ãçºçããå Žæã§ãã çµå±ã®ãšãããã»ã¯ã¿ãŒã2æ¬ã®ç·ãšæ¢åã®æ¥åã§åããããšã¯ã§ããŸãããå³ã®èŒªéãæ£ç¢ºã«ç€ºãå¿
èŠãããããã ãã¹ã䜿çšããŠãã¹ãŠãåå¥ã«æç»ããå¿
èŠããããŸãã ã æ¥åã¯å¿
èŠãããŸãããã«ã©ãŒäžè§æ³
ã«ãŒãå
ã®ãã¹èŠçŽ ãèšç®ããã«ã¯ãå°ãæ°åŠãèŠããŠããå¿
èŠããããŸãã åã¯æ¥åã®ç¹æ®ãªã±ãŒã¹ã§ãããã ãåŒã«ã¯å€ãã®å
±éç¹ããããããã¯éåžžã«äŸ¿å©ã§ãx=cos(angle)*radius; y=sin(angle)*radius; //circle
x=cos(angle)*rx; y=sin(angle)*ry; //ellipse
x=cos(angle)*radius; y=sin(angle)*radius; //circle
x=cos(angle)*rx; y=sin(angle)*ry; //ellipse
æ¥åã®å ŽåãååŸã¯ããããé·è»žãšç軞ã«çœ®ãæããããŸãã æ¬¡ã«ãããŒã¿ã®ããŒã»ã³ããŒãžååžã pathãæã€ã»ã¯ã¿ãŒã®åºŠæ°ãèšç®ãããµã€ã¯ã«ãäœæããŸã ã ã¢ãŒãã®åº§æšãèšç®ããããããã¹ãŠã®ã»ã¯ã¿ãŒã®æç»ã坿¥ã«ãªãããã«ã次æ°ã·ãããã䜿çšããŸãRGBãã¥ãŒãã¯ãããŸããŸãªæ¹æ³ã§ã«ããããæåœ±ããã·ã¹ãã ã«å
¥ãããšãã§ããŸã
CMYKãHSLã®ãããªåº§æšã éžæãããããè²ãšçœãé ç¹ïŒ255,255,255ïŒã®éã§ã»ã°ã¡ã³ããåå²ãããšãéžæãããªã¬ã³ãžè²ã®å¡ãã€ã¶ãã®ããŸããŸãªè²åããåŸãããŸãã if ($intTotalValue) //
foreach((array) $Data as $key=>$recEntry){
$Data[$key]->percent=$recEntry->value/$intTotalValue;
$Data[$key]->color[0]=round($graph->fill[0]+($key/count($Data)*(255-$graph->fill[0])));
$Data[$key]->color[1]=round($graph->fill[1]+($key/count($Data)*(255-$graph->fill[1])));
$Data[$key]->color[2]=round($graph->fill[2]+($key/count($Data)*(255-$graph->fill[2])));
$Data[$key]->degree=360*$Data[$key]->percent;
$Data[$key]->start['x']=$graph->cx+round(cos(deg2rad($intDegreeShift)) * $graph->rx,3);
$Data[$key]->start['y']=$graph->cy+round(sin(deg2rad($intDegreeShift)) * $graph->ry,3);
$Data[$key]->end['x']=$graph->cx+round(cos(deg2rad($intDegreeShift+$Data[$key]->degree)) * $graph->rx,3);
$Data[$key]->end['y']=$graph->cy+round(sin(deg2rad($intDegreeShift+$Data[$key]->degree)) * $graph->ry,3);
$intDegreeShift+=$Data[$key]->degree; //increase degree shift
$boolIsLargeArc=$Data[$key]->degrees>180? 1 : 0;
echo "\n".'/>';
}
ã°ã©ããæ³šææ·±ãèŠããšããã«ã¯ãå®äºããŠããããšãããããŸã
SVGã§æåã«èæ¯ãšããŠå
¥åããã°ã©ããŒã·ã§ã³ã䜿çšããŠã
ããã«ãç¹å®ã®ã»ã¯ã¿ãŒã®è²ãéæåºŠã§ãªãŒããŒã¬ã€ããŸãã
/>
/>
/>
äž»ãªåé¡
ãã ããå¢çã»ã¯ã¿ãŒã®ãã€ã³ãã«ã¯åé¡ãæ®ã£ãŠããŸããã±ãŒãã®ååã«éããé åã®ã¿ããã°ã©ããŒã·ã§ã³ã®åé¢é åã«ãã€ã³ãããå¿
èŠããããŸãã ãã®æ®µéã§ã¯ãç»åã¯æ¬¡ã®ããã«ãªããŸãã 
絶察ããã¹ã
ããã«ãã»ã¯ã¿ãŒã®ããã¹ãèšè¿°ãã©ã®ããã«æŽçããããšããçåãçããŸããïŒ Googleã¯ãããã¹ãã1è¡ã«åãŸããªãå Žåã§ããåã«ã»ã¯ã¿ãŒã®äžå€®ããç·ãåŒããŸãã SVGã§ã¯ãå·Šäžé
ããããã¹ããé
眮ããå¿
èŠããããŸã-å¹
ãããããªããããããã¯ãã§ã«åé¡ã§ãã 2ã€ã®æ¹æ³ããããŸããããã¹ãã®çžå¯Ÿçãªé
çœ®ãæŸæ£ããŠã³ãŒã«ã¢ãŠãã«ã©ãŒãäœæããããåºå®å¹
ïŒã¢ãã¹ããŒã¹ãã¯ãŒãªãšïŒã®ããã¹ãã䜿çšããŠãããã«åºã¥ããŠãã¯ã»ã«åäœã®é·ããšãªã³ã¶ãã©ã€ã§ã®äœçœ®ãèšç®ããŸãã 幞ããªããšã«ã text-anchorïŒendãã©ã¡ãŒã¿ãŒã«ééããŸãããããã¯å¥åŠãªæ¹æ³ã§ãå¿
èŠã«å¿ããŠããã¹ããæ¡åŒµããŸãããåæ¹åæ§ãšæªæ¥
JavaScriptãšã®çµ±åã®ãããã§ãAJAXã䜿çšããŠãªã¢ã«ã¿ã€ã ã§ããã«å¿ããŠç»åãæŽæ°ã§ããŸãã ç§ã®å Žåãããã¯ãŠãŒã¶ãŒãæç¥šãããšãã«å¿
èŠã§ããããã£ãŒãäžã®æç¥šã®ååžãæŽæ°ããå¿
èŠããããŸãã
ãŸãèªãïŒ
ã€ã©ã¹ããšäœ¿çšäŸã®ãã å
ã®èšäº Source: https://habr.com/ru/post/J23724/
All Articles