https://wiki.synfig.org/api.php?action=feedcontributions&user=Bazza&feedformat=atom
Synfig Studio :: Documentation - User contributions [en]
2024-03-28T08:22:46Z
User contributions
MediaWiki 1.26.3
https://wiki.synfig.org/index.php?title=Sif2svg.xsl&diff=23306
Sif2svg.xsl
2018-12-30T16:43:22Z
<p>Bazza: Created page with "<pre> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://exslt.org/math" xmlns:str="http:..."</p>
<hr />
<div><pre><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://exslt.org/math" xmlns:str="http://exslt.org/strings" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="canvas"><br />
<svg version="1.1" width="{@width}" height="{@height}" filter="url(#gamma)"><br />
<xsl:attribute name="viewBox"><br />
<xsl:variable name="view-box" select="str:split(@view-box)"/><br />
<xsl:value-of select="0+$view-box[1]"/><br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="-$view-box[2]"/><br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="-$view-box[1]+$view-box[3]"/><br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="$view-box[2]-$view-box[4]"/><br />
</xsl:attribute><br />
<xsl:if test="@antialias=0"><br />
<xsl:attribute name="shape-rendering">optimizeSpeed</xsl:attribute><br />
</xsl:if><br />
<defs><br />
<filter id="gamma"><br />
<feComponentTransfer><br />
<feFuncR type="gamma" exponent="0.45"/><br />
<feFuncG type="gamma" exponent="0.45"/><br />
<feFuncB type="gamma" exponent="0.45"/><br />
</feComponentTransfer><br />
</filter><br />
</defs><br />
<xsl:apply-templates select="layer|name|desc"/><br />
</svg><br />
</xsl:template><br />
<br />
<xsl:template match="name"><br />
<title><xsl:value-of select="."/></title><br />
</xsl:template><br />
<br />
<xsl:template match="desc"><br />
<desc><xsl:value-of select="."/></desc><br />
</xsl:template><br />
<br />
<xsl:template match="layer"><br />
<error type="{@type}"/><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='PasteCanvas']"><br />
<g transform="translate({param/vector/x}, {-param/vector/y})"><br />
<xsl:apply-templates select="param[@name='canvas']/canvas/layer"/><br />
</g><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='rectangle']"><br />
<rect id="{@desc}" x="{math:min(param/vector/x)}" y="{-math:max(param/vector/y)}" width="{math:abs(param[@name='point2']/vector/x - param[@name='point1']/vector/x)}" height="{math:abs(param[@name='point2']/vector/y - param[@name='point1']/vector/y)}" fill-opacity="{param[@name='amount']/real/@value * param/color/a}"><br />
<xsl:attribute name="fill"><br />
<xsl:apply-templates select="param/color"/><br />
</xsl:attribute><br />
</rect><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='import']"><br />
<image id="{@desc}" xlink:href="{param[@name='filename']/string}" x="{math:min(param/vector/x)}" y="{-math:max(param/vector/y)}" width="{math:abs(param[@name='br']/vector/x - param[@name='tl']/vector/x)}" height="{math:abs(param[@name='br']/vector/y - param[@name='tl']/vector/y)}"><br />
<xsl:if test="param[@name='br']/vector/x &lt; param[@name='tl']/vector/x"><br />
<xsl:attribute name="transform"><br />
<xsl:text>scale(</xsl:text><br />
<xsl:choose><br />
<xsl:when test="param[@name='br']/vector/x &lt; param[@name='tl']/vector/x"><br />
<xsl:text>-1</xsl:text><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:text>1</xsl:text><br />
</xsl:otherwise><br />
</xsl:choose><br />
<xsl:text>,</xsl:text><br />
<xsl:text>1</xsl:text><br />
<xsl:text>)</xsl:text><br />
</xsl:attribute><br />
</xsl:if><br />
</image><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='star']"><br />
<circle id="{@desc}" cx="{param[@name='origin']/vector/x}" cy="{-param[@name='origin']/vector/y}" r="{param[@name='radius1']/real/@value}" r2="{param[@name='radius1']/real/@value}" points="5"><br />
<xsl:attribute name="fill"><br />
<xsl:apply-templates select="param/color"/><br />
</xsl:attribute><br />
</circle><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='circle']"><br />
<circle id="{@desc}" r="{param[@name='radius']/real/@value}" fill-opacity="{param[@name='amount']/real/@value * param/color/a}"><br />
<xsl:attribute name="cx"><br />
<xsl:choose><br />
<xsl:when test="param[@name='origin']/vector"><br />
<xsl:value-of select="param[@name='origin']/vector/x"/><br />
</xsl:when><br />
<xsl:when test="param[@name='pos']/vector"><br />
<xsl:value-of select="param[@name='pos']/vector/x"/><br />
</xsl:when><br />
<xsl:when test="param[@name='origin']/animated[@type='vector']"><br />
<xsl:value-of select="param[@name='origin']/animated[@type='vector']/waypoint/vector/x"/><br />
</xsl:when><br />
</xsl:choose><br />
</xsl:attribute><br />
<xsl:attribute name="cy"><br />
<xsl:choose><br />
<xsl:when test="param[@name='origin']/vector"><br />
<xsl:value-of select="-param[@name='origin']/vector/y"/><br />
</xsl:when><br />
<xsl:when test="param[@name='pos']/vector"><br />
<xsl:value-of select="-param[@name='pos']/vector/y"/><br />
</xsl:when><br />
<xsl:when test="param[@name='origin']/animated[@type='vector']"><br />
<xsl:value-of select="-param[@name='origin']/animated[@type='vector']/waypoint/vector/y"/><br />
</xsl:when><br />
</xsl:choose><br />
</xsl:attribute><br />
<xsl:attribute name="fill"><br />
<xsl:apply-templates select="param/color"/><br />
</xsl:attribute><br />
<xsl:if test="param[@name='origin']/animated[@type='vector']"><br />
<xsl:call-template name="smilTransform"><br />
<xsl:with-param name="type" select="'translate'"/><br />
<xsl:with-param name="time" select="param[@name='origin']/animated[@type='vector']/waypoint"/><br />
<xsl:with-param name="animate" select="param[@name='origin']/animated[@type='vector']/waypoint/vector"/><br />
</xsl:call-template><br />
<!--<xsl:call-template name="smilXML"><br />
<xsl:with-param name="attribute" select="'cx'"/><br />
<xsl:with-param name="time" select="param[@name='origin']/animated[@type='vector']/waypoint/@time"/><br />
<xsl:with-param name="animate" select="param[@name='origin']/animated[@type='vector']/waypoint/vector/x"/><br />
</xsl:call-template><br />
<xsl:call-template name="smilXML"><br />
<xsl:with-param name="attribute" select="'cy'"/><br />
<xsl:with-param name="time" select="param[@name='origin']/animated[@type='vector']/waypoint/@time"/><br />
<xsl:with-param name="animate" select="param[@name='origin']/animated[@type='vector']/waypoint/vector/y"/><br />
</xsl:call-template>--><br />
</xsl:if><br />
</circle><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='text']"><br />
<xsl:variable name="text" select="str:split(param[@name='text']/string, '&#xA;')"/><br />
<xsl:variable name="x"><br />
<xsl:if test="param[@name='origin']/vector/x"><br />
<xsl:value-of select="param[@name='origin']/vector/x"/><br />
</xsl:if><br />
<xsl:if test="param[@name='pos']/vector/x"><br />
<xsl:value-of select="param[@name='pos']/vector/x"/><br />
</xsl:if><br />
</xsl:variable><br />
<text id="{@desc}" x="{$x}" font-weight="{param[@name='weight']/integer/@value}" font-family="{param[@name='family']/string}" text-anchor="middle" fill-opacity="{param[@name='amount']/real/@value * param/color/a}"><br />
<xsl:attribute name="y"><br />
<xsl:if test="param[@name='origin']/vector/y"><br />
<xsl:value-of select="-param[@name='origin']/vector/y - count($text) div 8.75"/><br />
</xsl:if><br />
<xsl:if test="param[@name='pos']/vector/y"><br />
<xsl:value-of select="-param[@name='pos']/vector/y - count($text) div 8.75"/><br />
</xsl:if><br />
</xsl:attribute><br />
<xsl:attribute name="font-size"><br />
<xsl:value-of select="param[@name='size']/vector/x * 1"/><br />
</xsl:attribute><br />
<xsl:attribute name="fill"><br />
<xsl:apply-templates select="param/color"/><br />
</xsl:attribute><br />
<xsl:for-each select="$text"><br />
<xsl:choose><br />
<xsl:when test="1 = position()"><br />
<xsl:value-of select="."/><br />
</xsl:when><br />
<xsl:otherwise><br />
<tspan x="{$x}" dy="1em"><xsl:value-of select="."/></tspan><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:for-each><br />
</text><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='polygon']"><br />
<xsl:variable name="origin" select="param[@name='origin']/vector"/><br />
<polygon id="{@desc}" fill-opacity="{param[@name='amount']/real/@value * param/color/a}"><br />
<xsl:attribute name="points"><br />
<xsl:for-each select="param[@name='vector_list']/dynamic_list[@type='vector']/entry/vector"><br />
<xsl:value-of select="$origin/x + x"/><xsl:text>,</xsl:text><br />
<xsl:value-of select="-$origin/y - y"/><xsl:text> </xsl:text><br />
</xsl:for-each><br />
</xsl:attribute><br />
<xsl:attribute name="fill"><br />
<xsl:apply-templates select="param/color"/><br />
</xsl:attribute><br />
</polygon><br />
</xsl:template><br />
<br />
<xsl:template match="layer[@type='region'] | layer[@type='outline']"><br />
<xsl:variable name="x" select="param[@name='origin']/vector/x"/><br />
<xsl:variable name="y" select="-param[@name='origin']/vector/y"/><br />
<xsl:variable name="points"><br />
<xsl:for-each select="param[@name='bline']/bline[@type='bline_point']/entry/composite[@type='bline_point']"><br />
<xsl:choose><br />
<xsl:when test="position() = 1"><br />
<xsl:text>M </xsl:text><xsl:value-of select="$x + point/vector/x"/>,<xsl:value-of select="$y - point/vector/y"/><br />
<xsl:text> C </xsl:text><xsl:value-of select="$x + point/vector/x + t2/radial_composite[@type='vector']/radius/real/@value * -math:cos(t2/radial_composite[@type='vector']/theta/angle/@value) div 3"/>,<xsl:value-of select="$y - point/vector/y + t2/radial_composite[@type='vector']/radius/real/@value * math:sin(t2/radial_composite[@type='vector']/theta/angle/@value) div 3"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:text> </xsl:text><xsl:value-of select="$x + point/vector/x + t1/radial_composite[@type='vector']/radius/real/@value * -math:cos(3.14159 * t1/radial_composite[@type='vector']/theta/angle/@value div 180) div 3"/>,<xsl:value-of select="$y - point/vector/y + t1/radial_composite[@type='vector']/radius/real/@value * math:sin(3.14159 * t1/radial_composite[@type='vector']/theta/angle/@value div 180) div 3"/><br />
<xsl:text> </xsl:text><xsl:value-of select="$x + point/vector/x"/>,<xsl:value-of select="$y - point/vector/y"/><br />
<xsl:text> C </xsl:text><xsl:value-of select="$x + point/vector/x + t2/radial_composite[@type='vector']/radius/real/@value * math:cos(3.14159 * t2/radial_composite[@type='vector']/theta/angle/@value div 180) div 3"/>,<xsl:value-of select="$y - point/vector/y + t2/radial_composite[@type='vector']/radius/real/@value * -math:sin(3.14159 * t2/radial_composite[@type='vector']/theta/angle/@value div 180) div 3"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:for-each><br />
<xsl:if test="param[@name='bline']/bline[@loop] = 'true'"> <!-- FIXME: reprendre ici demain. --><br />
<xsl:text> </xsl:text><xsl:value-of select="$x + param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/point/vector/x + param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/t1/radial_composite[@type='vector']/radius/real/@value * -math:cos(3.14159 * param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/t1/radial_composite[@type='vector']/theta/angle/@value div 180) div 3"/>,<xsl:value-of select="$y - param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/point/vector/y + param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/t1/radial_composite[@type='vector']/radius/real/@value * math:sin(3.14159 * param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/t1/radial_composite[@type='vector']/theta/angle/@value div 180) div 3"/><br />
<xsl:text> </xsl:text><xsl:value-of select="$x + param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/point/vector/x"/>,<xsl:value-of select="$y - param[@name='bline']/bline[@type='bline_point']/entry[1]/composite[@type='bline_point']/point/vector/y"/><br />
</xsl:if><br />
</xsl:variable><br />
<path id="{@desc}" d="{$points}"><br />
<xsl:choose><br />
<xsl:when test="@type='region'"><br />
<xsl:attribute name="fill"><br />
<xsl:apply-templates select="param/color"/><br />
</xsl:attribute><br />
<xsl:attribute name="stroke">none</xsl:attribute><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:attribute name="stroke"><br />
<xsl:apply-templates select="param/color"/><br />
</xsl:attribute><br />
<xsl:attribute name="stroke-width"><xsl:value-of select="param[@name='width']/real/@value"/></xsl:attribute><br />
<xsl:attribute name="fill">none</xsl:attribute><br />
</xsl:otherwise><br />
</xsl:choose><br />
<xsl:if test="param[@name='origin']/animated[@type='vector']"><br />
<xsl:call-template name="smilTransform"><br />
<xsl:with-param name="attribute" select="'translate'"/><br />
<xsl:with-param name="time" select="param[@name='origin']/animated[@type='vector']/waypoint"/><br />
<xsl:with-param name="animate" select="param[@name='origin']/animated[@type='vector']/waypoint/vector"/><br />
</xsl:call-template><br />
</xsl:if><br />
</path><br />
</xsl:template><br />
<br />
<!--<xsl:template match="layer[@type='linear_gradient']"><br />
<defs><br />
<linearGradient id="{@desc}"<br />
x1="0"<br />
y1="0"<br />
x2="{math:min(param[@name='p2']/vector/x)}"<br />
y2="{-math:max(param[@name='p2']/vector/y)}"><br />
<xsl:for-each select="param[@name='gradient']/gradient/color"><br />
<stop offset="{100*@pos}%"<br />
stop-color="rgb({str:split(255*r, '.')[1]},{str:split(255*g, '.')[1]},{str:split(255*b, '.')[1]})"/><br />
</xsl:for-each><br />
</linearGradient><br />
</defs><br />
<rect fill="url(#{@desc})"><br />
<xsl:variable name="view-box" select="str:split(/canvas/@view-box)"/><br />
<xsl:attribute name="x"><xsl:value-of select="0+$view-box[1]"/></xsl:attribute><br />
<xsl:attribute name="y"><xsl:value-of select="-$view-box[2]"/></xsl:attribute><br />
<xsl:attribute name="width"><xsl:value-of select="-$view-box[1]+$view-box[3]"/></xsl:attribute><br />
<xsl:attribute name="height"><xsl:value-of select="$view-box[2]-$view-box[4]"/></xsl:attribute><br />
</rect><br />
</xsl:template>--><br />
<br />
<xsl:template match="color"><br />
<xsl:text>rgb(</xsl:text><br />
<xsl:value-of select="str:split(r * 255, '.')[1]"/><xsl:text>,</xsl:text><br />
<xsl:value-of select="str:split(g * 255, '.')[1]"/><xsl:text>,</xsl:text><br />
<xsl:value-of select="str:split(b * 255, '.')[1]"/><xsl:text>)</xsl:text><br />
</xsl:template><br />
<br />
<xsl:template match="d"><br />
<xsl:param name="vector"/><br />
</xsl:template><br />
<br />
<xsl:template name="keyTimes"><br />
<xsl:param name="time"/><br />
<xsl:value-of select="$time/@time"/><br />
<!--<xsl:for-each select="$time"><br />
<xsl:value-of select="str:replace(@time, 's', '') div str:replace(/canvas/@end-time, 's', '')"/><br />
<xsl:if test="not(position()=last())"><br />
<xsl:text>; </xsl:text><br />
</xsl:if><br />
</xsl:for-each>--><br />
</xsl:template><br />
<br />
<xsl:template name="smilXML"><br />
<xsl:param name="attribute"/><br />
<xsl:param name="time"/><br />
<xsl:param name="animate"/><br />
<animate attributeName="{$attribute}" dur="{/canvas/@end-time}" fill="freeze" repeatCount="indefinite"><br />
<!--<xsl:attribute name="keyTimes"><br />
<xsl:call-template name="keyTimes"><br />
<xsl:with-param name="time" select="$time" /><br />
</xsl:call-template><br />
</xsl:attribute>--><br />
<xsl:attribute name="values"><br />
<xsl:for-each select="$animate"><br />
<xsl:value-of select="."/><br />
<xsl:if test="not(position()=last())"><br />
<xsl:text>; </xsl:text><br />
</xsl:if><br />
</xsl:for-each><br />
</xsl:attribute><br />
</animate><br />
</xsl:template><br />
<br />
<xsl:template name="smilTransform"><br />
<xsl:param name="type"/><br />
<xsl:param name="time"/><br />
<xsl:param name="animate"/><br />
<animateTransform attributeName="transform" type="{$type}" dur="{/canvas/@end-time}" fill="freeze" repeatCount="indefinite"><br />
<!--<xsl:attribute name="keyTimes"><br />
<xsl:call-template name="keyTimes"><br />
<xsl:with-param name="vector" select="$time" /><br />
</xsl:call-template><br />
</xsl:attribute>--><br />
<xsl:attribute name="values"><br />
<xsl:for-each select="$animate"><br />
<xsl:value-of select="-str:split(/canvas/@view-box)[1] + x"/>,<xsl:value-of select="y"/><br />
<xsl:if test="not(position()=last())"><br />
<xsl:text>; </xsl:text><br />
</xsl:if><br />
</xsl:for-each><br />
</xsl:attribute><br />
</animateTransform><br />
</xsl:template><br />
</xsl:stylesheet><br />
</pre></div>
Bazza
https://wiki.synfig.org/index.php?title=Sif2svg&diff=23305
Sif2svg
2018-12-30T16:42:07Z
<p>Bazza: /* Prerequisites */</p>
<hr />
<div><!-- Page info --><br />
{{Title|Sif2svg}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
This project is abandoned, but feel free to get in contact if you want to restart it. :)<br />
== What is it? ==<br />
This uses an XSLT 2.0 stylesheet to transform Synfig XML to SVG XML.<br />
<br />
=== Objective === <br />
Turn an Synfig animation into a SVG file for export.<br />
<br />
=== Prerequisites === <br />
# Be sure that you have an XSLT processor (xsltproc, Firefox, etc.)<br />
# Download [[sif2svg.xsl]]<br />
<br />
=== Transforming a Synfig file into a SVG === <br />
Enter the following command (replace your_output.svg by the path of the SVG file):<br />
xsltproc sif2svg.xsl your_input.sif > your_output.svg<br />
<br />
=== Result === <br />
If the conversion has been successful, the result will be written to the file your_input.svg, in the current folder.<br />
You can open this file in Inkscape, or Firefox, or Whatever.<br />
<br />
=== Limitations === <br />
* Compressed Synfig files (sifz) must be gunzipped first.<br />
* All sif elements aren’t supported, so it may have a lot of glitchs.</div>
Bazza
https://wiki.synfig.org/index.php?title=Sif2svg&diff=23304
Sif2svg
2018-12-30T16:41:54Z
<p>Bazza: link</p>
<hr />
<div><!-- Page info --><br />
{{Title|Sif2svg}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
This project is abandoned, but feel free to get in contact if you want to restart it. :)<br />
== What is it? ==<br />
This uses an XSLT 2.0 stylesheet to transform Synfig XML to SVG XML.<br />
<br />
=== Objective === <br />
Turn an Synfig animation into a SVG file for export.<br />
<br />
=== Prerequisites === <br />
# Be sure that you have an XSLT processor (xsltproc, Firefox, etc.)<br />
# Download [sif2svg.xsl]<br />
<br />
=== Transforming a Synfig file into a SVG === <br />
Enter the following command (replace your_output.svg by the path of the SVG file):<br />
xsltproc sif2svg.xsl your_input.sif > your_output.svg<br />
<br />
=== Result === <br />
If the conversion has been successful, the result will be written to the file your_input.svg, in the current folder.<br />
You can open this file in Inkscape, or Firefox, or Whatever.<br />
<br />
=== Limitations === <br />
* Compressed Synfig files (sifz) must be gunzipped first.<br />
* All sif elements aren’t supported, so it may have a lot of glitchs.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=23285
Doc:Quinema/es
2018-10-03T15:43:55Z
<p>Bazza: /* Tutoriales */</p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
* [https://4232.cf/es/tag/quinema/ Más información]<br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
== Tutoriales ==<br />
<br />
* [https://4232.cf/es/category/tutorial/ Tutoriales]<br />
<br />
== Licencia ==<br />
<br />
Autor: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Liberado bajo AGPLV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=23284
Doc:Quinema/es
2018-10-03T15:43:06Z
<p>Bazza: /* Armar un Projecto Synfig Studio */</p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
* [https://4232.cf/es/tag/quinema/ Más información]<br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
== Tutoriales ==<br />
<br />
* [https://archive.org/search.php?query=subject%3A%22synfig%22&and%5B%5D=subject%3A%22quinema%22 video tutoriales]<br />
<br />
== Licencia ==<br />
<br />
Autor: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Liberado bajo AGPLV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=23283
Doc:Quinema/es
2018-10-03T15:41:59Z
<p>Bazza: nueva URL</p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
* [https://4232.cf/es/tag/quinema/ Más información]<br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
Descargar [https://github.com/4232/quinema Toma del 4232] de ejemplo<br />
<br />
== Tutoriales ==<br />
<br />
* [https://archive.org/search.php?query=subject%3A%22synfig%22&and%5B%5D=subject%3A%22quinema%22 video tutoriales]<br />
<br />
== Licencia ==<br />
<br />
Autor: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Liberado bajo AGPLV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema&diff=23282
Doc:Quinema
2018-10-03T15:41:25Z
<p>Bazza: new url</p>
<hr />
<div>{{Title|Quinema: pixelar animation tools}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
It is a group of applications that allows to clean, compose and paint images pixelares to matter them in Synfig Studio.<br />
<br />
Work with images pixelares in animation is a task complicated the images has to be cleaned so that they do not have "noise", afterwards be painted and have bottoms with transparency, all this does easier using quinema, a group applications for linea of commando that helps us to edit the images to matter them in Synfig Studio. <br />
<br />
<br />
* [https://4232.cf/tag/quinema/ More info]<br />
<br />
== Add Shadown ==<br />
<br />
It adds shadows and generates a xcf editable in layers.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Build a Project Synfig Studio ==<br />
<br />
make a project<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directory<br />
quinema-synfig . > toma.sif</pre><br />
<br />
<br />
== License ==<br />
<br />
Author: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Release AGPLV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Related_Projects&diff=23278
Related Projects
2018-05-01T16:25:27Z
<p>Bazza: /* Video Players */</p>
<hr />
<div>This page is for FOSS (free software and open source software) related to synfig or art in some way.<br />
<br />
== 2D Animation ==<br />
<br />
* [http://synfig.org/ Synfig] - vector based 2D animation (this project!)<br />
* [http://ktoon.toonka.com/ KToon] - Pixel-based 2D animation, similar layout to ToonBoom Studio<br />
* [http://www.les-stooges.org/pascal/pencil/ pencil] - software for traditional hand-drawn animation (both vector & raster)<br />
* [http://www.uira.org/ Uira] - Flash clone, sourceforge project closed 2008-01-13<br />
* [http://f4l.sf.net F4L] - Flash for Linux, a Flash clone.<br />
* [http://animata.kibu.hu/index.html Animata] - Still images bone rigged for 2D and 3D animation.<br />
* [http://processing.org/ Processing] - Programming language (based on Java) and enviroment for images, animation and interactions. (2D and 3D).<br />
<br />
== 3D Animation ==<br />
<br />
* [http://www.blender3d.org/ blender] - 3D modelling and animation<br />
* [http://www.aqsis.org/ aqsis] - 3D renderer, Renderman compatible<br />
* [http://www.k-3d.org/ k-3d] - 3D modelling, animation, rendering<br />
* [http://sharp3d.sourceforge.net sharp3d] - Opensource version of Zbrush, integrated onto Blender<br />
* [http://severnclaystudio.wordpress.com/bluebeard/ Pantograph] Vector renderer<br />
<br />
== Motion Capture ==<br />
<br />
* [http://www.tabinda.net/mocapsim/ mocapsim]<br />
* [http://www.avimator.com/ avimator]<br />
* And many on sf.net (search for bvh)<br />
<br />
== Raster Image Manipulation ==<br />
<br />
* [http://www.gimp.org/ GIMP] - GNU image manipulation program<br />
** the iwrap deformation tool can create (crude) animations<br />
** layers can be saved as animated .gif<br />
* [http://www.gimp.org/tutorials/Using_GAP/ GAP] - GIMP Animation Plugin<br />
* [http://www.cinepaint.org/ cinepaint] - a GIMP fork used for motion picture frame-by-frame retouching<br />
* [http://en.flossmanuals.net/alchemy Alchemy] - software for sketching or drawing using a computer<br />
<br />
== Vector Image Manipulation ==<br />
<br />
* [http://www.inkscape.org/ inkscape] - SVG-based vector graphics, animation capability scheduled for Milestone 20 - Inkscape 0.54<br />
* [http://www.xaraxtreme.org/about/ xaralx] - vector graphic program<br />
<br />
== Video editing ==<br />
<br />
* [http://freshmeat.net/browse/256/ Freshmeat Category: Non-Linear Video Editor]<br />
* [http://cvs.cinelerra.org/ Cinelerra] - Video editor and compositor<br />
* [http://www.jahshaka.org/ jahshaka] - Video and film compositing, editing and special fx system<br />
* [http://www.kdenlive.org/ Kdenlive] - Free and open-source video editor for GNU/Linux and FreeBSD <br />
* [http://developer.skolelinux.no/info/studentgrupper/2005-hig-stopmotion/ stopmotion] - create stop-motion movies<br />
* [http://frameworks.polycrystal.org/ frameworks] - Stop-motion frame capture<br />
* [http://www.diva-project.org/wiki/Main_Page DIVA] - Defunct linux video editor<br />
* [http://natron.inria.fr/ Natron] - Free open-source, cross-platform compositing software. It aims to produce visual effects.<br />
* [http://www.pitivi.org pitivi] - Open source video editor.<br />
* [http://positron.sourceforge.net positron] - Windows based NLE, last release 2006<br />
* [http://cuisine.bigasterisk.com cuisine] - NLE, last updated 2004ish.<br />
* [http://www.kinodv.org/ Kino] - Linux NLE<br />
* [http://users.pandora.be/acp/kino/kinoplus.html Kino plus]- Plugins for Kino<br />
* [http://lives.sourceforge.net Lives] - Linux NLE video editing software<br />
* [http://avisynth3.unite-video.com/ AviSynth 3.0] - Windows and Linux video post-production, a powerful frameserver<br />
<br />
== Lipsyncing ==<br />
<br />
* [http://jlipsync.sourceforge.net/ jlipsync] - Java based Lip sync program. Allows users to align phoneme key frame shapes to an audio track. Output to a shot sheet or AVI file (convert the AVI to a series of PNG files and import them into Synfig for added fun!)<br />
* [http://www.lostmarble.com/papagayo/index.shtml papagayo] python based lipsync program. Allows export to Anime studio, or contact genete to import into Synfig ;)<br />
<br />
== Programming/API's ==<br />
<br />
* [http://www.amanith.org amanith] - An OpenSource C++ CrossPlatform framework designed for 2d & 3d vector graphics.<br />
<br />
== Realtime/VJ tools ==<br />
<br />
* [http://effectv.sourceforge.net/ effectv] - Real-time video effector<br />
* [http://freej.dyne.org/ freej] - Real-time video manipulation, available on the Dynebolic distribution.<br />
* [http://veejayhq.net veejay] - Visual instrument and realtime video sampler.<br />
<br />
== Utilities ==<br />
<br />
* [http://dvbackup.sourceforge.net/ Dv backup]- Utility to back up data to DV tape.<br />
* [http://ronald.bitfreak.net/lvs/ LVS] - Video capture software for Linux, last updated 2002<br />
* [http://mjpeg.sourceforge.net/ mjpegtools] - Tools for video capture and editing under linux<br />
* [http://www.theora.org/ theora] - Video compression format<br />
* [http://dvr.sourceforge.net DVR] - Digital video recorder, last updated 2007.<br />
<br />
== Subtitle editors ==<br />
<br />
* [http://www.allusion.net/bakasub/ bakasub] - Subtitling software for Linux, last updated in 1999<br />
* [http://gsubedit.sourceforge.net/ gsubedit] - Subtitle Editor (Gnome)<br />
* [http://sourceforge.net/projects/ksubeditor/ ksubeditor] - Subtitle Editor (KDE)<br />
<br />
== Video Players ==<br />
<br />
* [http://mpv.io/ mpv] - A free, open source, and cross-platform media player<br />
* [http://freshmeat.net/browse/128/ freshmeat] - Freshmeat video player category<br />
* [http://www.MPlayerHQ.hu/ mplayer] - Multi platform video player (windows/linux/mac)<br />
* [http://www.xinehq.de/ xine] - Linux video player<br />
* [http://www.videolan.org/vlc/ vlc] - Multi platform video player (windows/linux/mac)<br />
<br />
== Sound Editing/Recording ==<br />
<br />
* [http://freshmeat.net/browse/113/ Freshmeat Sound/Audio category]<br />
* [http://ardour.org/download Ardour] - Audio editing software, runs on Linux and MacOsX. Friendly Gui.<br />
* [http://audacity.sourceforge.net/ Audacity] - Cross platform audio editing software (windows/linux) Also exports MP3's.<br />
<br />
== Sound libraries ==<br />
<br />
* [http://gstreamer.freedesktop.org/ gstreamer]<br />
<br />
== Script writing software ==<br />
<br />
* [http://www.trelby.org/ Trelby] - A free, multiplatform, feature-rich screenwriting program<br />
* [http://celtx.com/ CeltX] - Cross platform, multilanguaje software for the entire pre-production process (non free)<br />
* [http://freshmeat.net/projects/scriptwriter/ Scriptwriter] - Cross platform software for writing scripts for movies/tv.<br />
* [http://www.oskusoft.com/blyte.shtml Blyte] - Open source software (abandonware, really) script writing software.<br />
<br />
== Other sources of software ==<br />
<br />
* www.freshmeat.net - Open source software repository <br />
* www.sourceforge.net - Open source software repository <br />
* packages.debian.org - Packages for debian<br />
* packages.ubuntu.com - packages for ubuntu<br />
* www.rpmfind.net - packages for Redhat<br />
<br />
== Live Distro's with Synfig ==<br />
<br />
* [http://www.artistx.org/site2/ artistx]<br />
* [http://ubuntustudio.org/ ubuntustudio] - releases and support like Ubuntu, compatible with the ubuntu software repositories, but geared to more creative types.<br />
<br />
Please note, old software is perfectly fine to use :) It may not support newer hardware though.<br />
<br />
== Information ==<br />
<br />
* http://www.robfisher.net/video/ - Linux video information</div>
Bazza
https://wiki.synfig.org/index.php?title=Related_Projects&diff=23277
Related Projects
2018-05-01T16:20:12Z
<p>Bazza: /* Script writing software */</p>
<hr />
<div>This page is for FOSS (free software and open source software) related to synfig or art in some way.<br />
<br />
== 2D Animation ==<br />
<br />
* [http://synfig.org/ Synfig] - vector based 2D animation (this project!)<br />
* [http://ktoon.toonka.com/ KToon] - Pixel-based 2D animation, similar layout to ToonBoom Studio<br />
* [http://www.les-stooges.org/pascal/pencil/ pencil] - software for traditional hand-drawn animation (both vector & raster)<br />
* [http://www.uira.org/ Uira] - Flash clone, sourceforge project closed 2008-01-13<br />
* [http://f4l.sf.net F4L] - Flash for Linux, a Flash clone.<br />
* [http://animata.kibu.hu/index.html Animata] - Still images bone rigged for 2D and 3D animation.<br />
* [http://processing.org/ Processing] - Programming language (based on Java) and enviroment for images, animation and interactions. (2D and 3D).<br />
<br />
== 3D Animation ==<br />
<br />
* [http://www.blender3d.org/ blender] - 3D modelling and animation<br />
* [http://www.aqsis.org/ aqsis] - 3D renderer, Renderman compatible<br />
* [http://www.k-3d.org/ k-3d] - 3D modelling, animation, rendering<br />
* [http://sharp3d.sourceforge.net sharp3d] - Opensource version of Zbrush, integrated onto Blender<br />
* [http://severnclaystudio.wordpress.com/bluebeard/ Pantograph] Vector renderer<br />
<br />
== Motion Capture ==<br />
<br />
* [http://www.tabinda.net/mocapsim/ mocapsim]<br />
* [http://www.avimator.com/ avimator]<br />
* And many on sf.net (search for bvh)<br />
<br />
== Raster Image Manipulation ==<br />
<br />
* [http://www.gimp.org/ GIMP] - GNU image manipulation program<br />
** the iwrap deformation tool can create (crude) animations<br />
** layers can be saved as animated .gif<br />
* [http://www.gimp.org/tutorials/Using_GAP/ GAP] - GIMP Animation Plugin<br />
* [http://www.cinepaint.org/ cinepaint] - a GIMP fork used for motion picture frame-by-frame retouching<br />
* [http://en.flossmanuals.net/alchemy Alchemy] - software for sketching or drawing using a computer<br />
<br />
== Vector Image Manipulation ==<br />
<br />
* [http://www.inkscape.org/ inkscape] - SVG-based vector graphics, animation capability scheduled for Milestone 20 - Inkscape 0.54<br />
* [http://www.xaraxtreme.org/about/ xaralx] - vector graphic program<br />
<br />
== Video editing ==<br />
<br />
* [http://freshmeat.net/browse/256/ Freshmeat Category: Non-Linear Video Editor]<br />
* [http://cvs.cinelerra.org/ Cinelerra] - Video editor and compositor<br />
* [http://www.jahshaka.org/ jahshaka] - Video and film compositing, editing and special fx system<br />
* [http://www.kdenlive.org/ Kdenlive] - Free and open-source video editor for GNU/Linux and FreeBSD <br />
* [http://developer.skolelinux.no/info/studentgrupper/2005-hig-stopmotion/ stopmotion] - create stop-motion movies<br />
* [http://frameworks.polycrystal.org/ frameworks] - Stop-motion frame capture<br />
* [http://www.diva-project.org/wiki/Main_Page DIVA] - Defunct linux video editor<br />
* [http://natron.inria.fr/ Natron] - Free open-source, cross-platform compositing software. It aims to produce visual effects.<br />
* [http://www.pitivi.org pitivi] - Open source video editor.<br />
* [http://positron.sourceforge.net positron] - Windows based NLE, last release 2006<br />
* [http://cuisine.bigasterisk.com cuisine] - NLE, last updated 2004ish.<br />
* [http://www.kinodv.org/ Kino] - Linux NLE<br />
* [http://users.pandora.be/acp/kino/kinoplus.html Kino plus]- Plugins for Kino<br />
* [http://lives.sourceforge.net Lives] - Linux NLE video editing software<br />
* [http://avisynth3.unite-video.com/ AviSynth 3.0] - Windows and Linux video post-production, a powerful frameserver<br />
<br />
== Lipsyncing ==<br />
<br />
* [http://jlipsync.sourceforge.net/ jlipsync] - Java based Lip sync program. Allows users to align phoneme key frame shapes to an audio track. Output to a shot sheet or AVI file (convert the AVI to a series of PNG files and import them into Synfig for added fun!)<br />
* [http://www.lostmarble.com/papagayo/index.shtml papagayo] python based lipsync program. Allows export to Anime studio, or contact genete to import into Synfig ;)<br />
<br />
== Programming/API's ==<br />
<br />
* [http://www.amanith.org amanith] - An OpenSource C++ CrossPlatform framework designed for 2d & 3d vector graphics.<br />
<br />
== Realtime/VJ tools ==<br />
<br />
* [http://effectv.sourceforge.net/ effectv] - Real-time video effector<br />
* [http://freej.dyne.org/ freej] - Real-time video manipulation, available on the Dynebolic distribution.<br />
* [http://veejayhq.net veejay] - Visual instrument and realtime video sampler.<br />
<br />
== Utilities ==<br />
<br />
* [http://dvbackup.sourceforge.net/ Dv backup]- Utility to back up data to DV tape.<br />
* [http://ronald.bitfreak.net/lvs/ LVS] - Video capture software for Linux, last updated 2002<br />
* [http://mjpeg.sourceforge.net/ mjpegtools] - Tools for video capture and editing under linux<br />
* [http://www.theora.org/ theora] - Video compression format<br />
* [http://dvr.sourceforge.net DVR] - Digital video recorder, last updated 2007.<br />
<br />
== Subtitle editors ==<br />
<br />
* [http://www.allusion.net/bakasub/ bakasub] - Subtitling software for Linux, last updated in 1999<br />
* [http://gsubedit.sourceforge.net/ gsubedit] - Subtitle Editor (Gnome)<br />
* [http://sourceforge.net/projects/ksubeditor/ ksubeditor] - Subtitle Editor (KDE)<br />
<br />
== Video Players ==<br />
<br />
* [http://freshmeat.net/browse/128/ freshmeat] - Freshmeat video player category<br />
* [http://www.MPlayerHQ.hu/ mplayer] - Multi platform video player (windows/linux/mac)<br />
* [http://www.xinehq.de/ xine] - Linux video player<br />
* [http://www.videolan.org/vlc/ vlc] - Multi platform video player (windows/linux/mac)<br />
<br />
== Sound Editing/Recording ==<br />
<br />
* [http://freshmeat.net/browse/113/ Freshmeat Sound/Audio category]<br />
* [http://ardour.org/download Ardour] - Audio editing software, runs on Linux and MacOsX. Friendly Gui.<br />
* [http://audacity.sourceforge.net/ Audacity] - Cross platform audio editing software (windows/linux) Also exports MP3's.<br />
<br />
== Sound libraries ==<br />
<br />
* [http://gstreamer.freedesktop.org/ gstreamer]<br />
<br />
== Script writing software ==<br />
<br />
* [http://www.trelby.org/ Trelby] - A free, multiplatform, feature-rich screenwriting program<br />
* [http://celtx.com/ CeltX] - Cross platform, multilanguaje software for the entire pre-production process (non free)<br />
* [http://freshmeat.net/projects/scriptwriter/ Scriptwriter] - Cross platform software for writing scripts for movies/tv.<br />
* [http://www.oskusoft.com/blyte.shtml Blyte] - Open source software (abandonware, really) script writing software.<br />
<br />
== Other sources of software ==<br />
<br />
* www.freshmeat.net - Open source software repository <br />
* www.sourceforge.net - Open source software repository <br />
* packages.debian.org - Packages for debian<br />
* packages.ubuntu.com - packages for ubuntu<br />
* www.rpmfind.net - packages for Redhat<br />
<br />
== Live Distro's with Synfig ==<br />
<br />
* [http://www.artistx.org/site2/ artistx]<br />
* [http://ubuntustudio.org/ ubuntustudio] - releases and support like Ubuntu, compatible with the ubuntu software repositories, but geared to more creative types.<br />
<br />
Please note, old software is perfectly fine to use :) It may not support newer hardware though.<br />
<br />
== Information ==<br />
<br />
* http://www.robfisher.net/video/ - Linux video information</div>
Bazza
https://wiki.synfig.org/index.php?title=Related_Projects&diff=23276
Related Projects
2018-05-01T16:19:50Z
<p>Bazza: /* Script writing software */</p>
<hr />
<div>This page is for FOSS (free software and open source software) related to synfig or art in some way.<br />
<br />
== 2D Animation ==<br />
<br />
* [http://synfig.org/ Synfig] - vector based 2D animation (this project!)<br />
* [http://ktoon.toonka.com/ KToon] - Pixel-based 2D animation, similar layout to ToonBoom Studio<br />
* [http://www.les-stooges.org/pascal/pencil/ pencil] - software for traditional hand-drawn animation (both vector & raster)<br />
* [http://www.uira.org/ Uira] - Flash clone, sourceforge project closed 2008-01-13<br />
* [http://f4l.sf.net F4L] - Flash for Linux, a Flash clone.<br />
* [http://animata.kibu.hu/index.html Animata] - Still images bone rigged for 2D and 3D animation.<br />
* [http://processing.org/ Processing] - Programming language (based on Java) and enviroment for images, animation and interactions. (2D and 3D).<br />
<br />
== 3D Animation ==<br />
<br />
* [http://www.blender3d.org/ blender] - 3D modelling and animation<br />
* [http://www.aqsis.org/ aqsis] - 3D renderer, Renderman compatible<br />
* [http://www.k-3d.org/ k-3d] - 3D modelling, animation, rendering<br />
* [http://sharp3d.sourceforge.net sharp3d] - Opensource version of Zbrush, integrated onto Blender<br />
* [http://severnclaystudio.wordpress.com/bluebeard/ Pantograph] Vector renderer<br />
<br />
== Motion Capture ==<br />
<br />
* [http://www.tabinda.net/mocapsim/ mocapsim]<br />
* [http://www.avimator.com/ avimator]<br />
* And many on sf.net (search for bvh)<br />
<br />
== Raster Image Manipulation ==<br />
<br />
* [http://www.gimp.org/ GIMP] - GNU image manipulation program<br />
** the iwrap deformation tool can create (crude) animations<br />
** layers can be saved as animated .gif<br />
* [http://www.gimp.org/tutorials/Using_GAP/ GAP] - GIMP Animation Plugin<br />
* [http://www.cinepaint.org/ cinepaint] - a GIMP fork used for motion picture frame-by-frame retouching<br />
* [http://en.flossmanuals.net/alchemy Alchemy] - software for sketching or drawing using a computer<br />
<br />
== Vector Image Manipulation ==<br />
<br />
* [http://www.inkscape.org/ inkscape] - SVG-based vector graphics, animation capability scheduled for Milestone 20 - Inkscape 0.54<br />
* [http://www.xaraxtreme.org/about/ xaralx] - vector graphic program<br />
<br />
== Video editing ==<br />
<br />
* [http://freshmeat.net/browse/256/ Freshmeat Category: Non-Linear Video Editor]<br />
* [http://cvs.cinelerra.org/ Cinelerra] - Video editor and compositor<br />
* [http://www.jahshaka.org/ jahshaka] - Video and film compositing, editing and special fx system<br />
* [http://www.kdenlive.org/ Kdenlive] - Free and open-source video editor for GNU/Linux and FreeBSD <br />
* [http://developer.skolelinux.no/info/studentgrupper/2005-hig-stopmotion/ stopmotion] - create stop-motion movies<br />
* [http://frameworks.polycrystal.org/ frameworks] - Stop-motion frame capture<br />
* [http://www.diva-project.org/wiki/Main_Page DIVA] - Defunct linux video editor<br />
* [http://natron.inria.fr/ Natron] - Free open-source, cross-platform compositing software. It aims to produce visual effects.<br />
* [http://www.pitivi.org pitivi] - Open source video editor.<br />
* [http://positron.sourceforge.net positron] - Windows based NLE, last release 2006<br />
* [http://cuisine.bigasterisk.com cuisine] - NLE, last updated 2004ish.<br />
* [http://www.kinodv.org/ Kino] - Linux NLE<br />
* [http://users.pandora.be/acp/kino/kinoplus.html Kino plus]- Plugins for Kino<br />
* [http://lives.sourceforge.net Lives] - Linux NLE video editing software<br />
* [http://avisynth3.unite-video.com/ AviSynth 3.0] - Windows and Linux video post-production, a powerful frameserver<br />
<br />
== Lipsyncing ==<br />
<br />
* [http://jlipsync.sourceforge.net/ jlipsync] - Java based Lip sync program. Allows users to align phoneme key frame shapes to an audio track. Output to a shot sheet or AVI file (convert the AVI to a series of PNG files and import them into Synfig for added fun!)<br />
* [http://www.lostmarble.com/papagayo/index.shtml papagayo] python based lipsync program. Allows export to Anime studio, or contact genete to import into Synfig ;)<br />
<br />
== Programming/API's ==<br />
<br />
* [http://www.amanith.org amanith] - An OpenSource C++ CrossPlatform framework designed for 2d & 3d vector graphics.<br />
<br />
== Realtime/VJ tools ==<br />
<br />
* [http://effectv.sourceforge.net/ effectv] - Real-time video effector<br />
* [http://freej.dyne.org/ freej] - Real-time video manipulation, available on the Dynebolic distribution.<br />
* [http://veejayhq.net veejay] - Visual instrument and realtime video sampler.<br />
<br />
== Utilities ==<br />
<br />
* [http://dvbackup.sourceforge.net/ Dv backup]- Utility to back up data to DV tape.<br />
* [http://ronald.bitfreak.net/lvs/ LVS] - Video capture software for Linux, last updated 2002<br />
* [http://mjpeg.sourceforge.net/ mjpegtools] - Tools for video capture and editing under linux<br />
* [http://www.theora.org/ theora] - Video compression format<br />
* [http://dvr.sourceforge.net DVR] - Digital video recorder, last updated 2007.<br />
<br />
== Subtitle editors ==<br />
<br />
* [http://www.allusion.net/bakasub/ bakasub] - Subtitling software for Linux, last updated in 1999<br />
* [http://gsubedit.sourceforge.net/ gsubedit] - Subtitle Editor (Gnome)<br />
* [http://sourceforge.net/projects/ksubeditor/ ksubeditor] - Subtitle Editor (KDE)<br />
<br />
== Video Players ==<br />
<br />
* [http://freshmeat.net/browse/128/ freshmeat] - Freshmeat video player category<br />
* [http://www.MPlayerHQ.hu/ mplayer] - Multi platform video player (windows/linux/mac)<br />
* [http://www.xinehq.de/ xine] - Linux video player<br />
* [http://www.videolan.org/vlc/ vlc] - Multi platform video player (windows/linux/mac)<br />
<br />
== Sound Editing/Recording ==<br />
<br />
* [http://freshmeat.net/browse/113/ Freshmeat Sound/Audio category]<br />
* [http://ardour.org/download Ardour] - Audio editing software, runs on Linux and MacOsX. Friendly Gui.<br />
* [http://audacity.sourceforge.net/ Audacity] - Cross platform audio editing software (windows/linux) Also exports MP3's.<br />
<br />
== Sound libraries ==<br />
<br />
* [http://gstreamer.freedesktop.org/ gstreamer]<br />
<br />
== Script writing software ==<br />
<br />
* [http://www.trelby.org/] - A free, multiplatform, feature-rich screenwriting program<br />
* [http://celtx.com/ CeltX] - Cross platform, multilanguaje software for the entire pre-production process (non free)<br />
* [http://freshmeat.net/projects/scriptwriter/ Scriptwriter] - Cross platform software for writing scripts for movies/tv.<br />
* [http://www.oskusoft.com/blyte.shtml Blyte] - Open source software (abandonware, really) script writing software.<br />
<br />
== Other sources of software ==<br />
<br />
* www.freshmeat.net - Open source software repository <br />
* www.sourceforge.net - Open source software repository <br />
* packages.debian.org - Packages for debian<br />
* packages.ubuntu.com - packages for ubuntu<br />
* www.rpmfind.net - packages for Redhat<br />
<br />
== Live Distro's with Synfig ==<br />
<br />
* [http://www.artistx.org/site2/ artistx]<br />
* [http://ubuntustudio.org/ ubuntustudio] - releases and support like Ubuntu, compatible with the ubuntu software repositories, but geared to more creative types.<br />
<br />
Please note, old software is perfectly fine to use :) It may not support newer hardware though.<br />
<br />
== Information ==<br />
<br />
* http://www.robfisher.net/video/ - Linux video information</div>
Bazza
https://wiki.synfig.org/index.php?title=User:Bazza&diff=22079
User:Bazza
2016-07-08T04:25:02Z
<p>Bazza: </p>
<hr />
<div>My name is Ernesto Bazzano (Bazza) and I’m an Argentinian artist. I’m making a short animated film called “4232”, using libre software with GNU/linux. That is software made and supported by communities of programmers and developers who care about freedom.<br />
<br />
<br />
* Working progress of [http://4232.cf/ sort film 4232 libre animation]<br />
<br />
----<br />
<br />
Mi nombre es Ernesto Bazzano (Bazza), soy artista plástico. Actualmente estoy realizando un cortometraje de animación llamado 4232. Para realizar este corto de animación utilizo, en todas las etapas, software libre sobre GNU/Linux. O sea, lo realizo íntegramente con software que no fue armado por grandes empresas, sino por comunidades de programadores preocupados por su libertad.<br />
<br />
<br />
[http://4232.cf/ http://4232.cf/]</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=22078
Doc:Quinema/es
2016-07-07T23:43:17Z
<p>Bazza: /* Licencia */</p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
* [https://github.com/4232/quinema/wiki/README.es Más información]<br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
Descargar [https://github.com/4232/quinema Toma del 4232] de ejemplo<br />
<br />
== Tutoriales ==<br />
<br />
* [https://archive.org/search.php?query=subject%3A%22synfig%22&and%5B%5D=subject%3A%22quinema%22 video tutoriales]<br />
<br />
== Licencia ==<br />
<br />
Autor: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Liberado bajo AGPLV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema&diff=22077
Doc:Quinema
2016-07-07T23:42:59Z
<p>Bazza: /* License */</p>
<hr />
<div>{{Title|Quinema: pixelar animation tools}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
It is a group of applications that allows to clean, compose and paint images pixelares to matter them in Synfig Studio.<br />
<br />
Work with images pixelares in animation is a task complicated the images has to be cleaned so that they do not have "noise", afterwards be painted and have bottoms with transparency, all this does easier using quinema, a group applications for linea of commando that helps us to edit the images to matter them in Synfig Studio. <br />
<br />
<br />
* [https://github.com/4232/quinema/wiki/README.en More info]<br />
<br />
== Add Shadown ==<br />
<br />
It adds shadows and generates a xcf editable in layers.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Build a Project Synfig Studio ==<br />
<br />
make a project<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directory<br />
quinema-synfig . > toma.sif</pre><br />
<br />
<br />
== License ==<br />
<br />
Author: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Release AGPLV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=22076
Doc:Quinema/es
2016-07-07T23:34:30Z
<p>Bazza: </p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
* [https://github.com/4232/quinema/wiki/README.es Más información]<br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
Descargar [https://github.com/4232/quinema Toma del 4232] de ejemplo<br />
<br />
== Tutoriales ==<br />
<br />
* [https://archive.org/search.php?query=subject%3A%22synfig%22&and%5B%5D=subject%3A%22quinema%22 video tutoriales]<br />
<br />
== Licencia ==<br />
<br />
Autor: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Liberado bajo AGPV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema&diff=22075
Doc:Quinema
2016-07-07T23:33:23Z
<p>Bazza: </p>
<hr />
<div>{{Title|Quinema: pixelar animation tools}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
It is a group of applications that allows to clean, compose and paint images pixelares to matter them in Synfig Studio.<br />
<br />
Work with images pixelares in animation is a task complicated the images has to be cleaned so that they do not have "noise", afterwards be painted and have bottoms with transparency, all this does easier using quinema, a group applications for linea of commando that helps us to edit the images to matter them in Synfig Studio. <br />
<br />
<br />
* [https://github.com/4232/quinema/wiki/README.en More info]<br />
<br />
== Add Shadown ==<br />
<br />
It adds shadows and generates a xcf editable in layers.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Build a Project Synfig Studio ==<br />
<br />
make a project<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directory<br />
quinema-synfig . > toma.sif</pre><br />
<br />
<br />
== License ==<br />
<br />
Author: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Release AGPV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg&diff=22073
Swf2svg
2016-07-07T03:38:20Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Convert '''SWF''' in '''SVG''' and can edit in inkscape with [[svg2sif]]<br />
<br />
== Example ==<br />
<br />
<br />
Animation reproduced in gnash:<br />
<br />
[[File:Swf_play_gnash.png||swf reproducido en gnash]]<br />
<br />
Mattered in Inkscape afterwards to export it with [https://github.com/mgatelabs/swftools-core SWFTools]<br />
<br />
<br />
[[File:Swf_import_inkscape.png]]<br />
<br />
Yes it degrade them export in first black export in PDF, matter the PDF and afterwards go back to export in SIF<br />
<br />
<br />
== License ==<br />
<br />
Author: Michael Fuller<br />
<br />
License MIT</div>
Bazza
https://wiki.synfig.org/index.php?title=User:Bazza/es&diff=22072
User:Bazza/es
2016-07-06T06:42:42Z
<p>Bazza: Blanked the page</p>
<hr />
<div></div>
Bazza
https://wiki.synfig.org/index.php?title=User:Bazza/es&diff=22071
User:Bazza/es
2016-07-06T06:42:20Z
<p>Bazza: Created page with "prueba"</p>
<hr />
<div>prueba</div>
Bazza
https://wiki.synfig.org/index.php?title=User:Bazza&diff=22070
User:Bazza
2016-07-06T06:41:26Z
<p>Bazza: Created page with "My name is Ernesto Bazzano (Bazza) and I’m an Argentinian artist. I’m making a short animated film called “4232”, using libre software with GNU/linux. That is software..."</p>
<hr />
<div>My name is Ernesto Bazzano (Bazza) and I’m an Argentinian artist. I’m making a short animated film called “4232”, using libre software with GNU/linux. That is software made and supported by communities of programmers and developers who care about freedom.<br />
<br />
<br />
[http://4232.cf/ http://4232.cf/]<br />
<br />
----<br />
<br />
Mi nombre es Ernesto Bazzano (Bazza), soy artista plástico. Actualmente estoy realizando un cortometraje de animación llamado 4232. Para realizar este corto de animación utilizo, en todas las etapas, software libre sobre GNU/Linux. O sea, lo realizo íntegramente con software que no fue armado por grandes empresas, sino por comunidades de programadores preocupados por su libertad.<br />
<br />
<br />
[http://4232.cf/ http://4232.cf/]</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22064
Doc:Svg2synfig/es
2016-07-05T00:57:21Z
<p>Bazza: /* Extensión para Inkscape */</p>
<hr />
<div><!-- Page info --><br />
{{Title|Importar SVG}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
<br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de '''Inkscape 0.91''' esta extensión vienen en la versión oficial de Inkscape {{c|<Archivo>|<Salvar Como>|Animation synfig (.sif)}}. Cuidado al salvar por que Inkscape exporta pero no abre archivos .sif.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.<br />
<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 ([http://prdownloads.sourceforge.net/saxon/saxonb9-0-0-2j.zip saxonsa9-0-0-2j.zip]).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con ls nuevas versiones de Saxon<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre></div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22063
Doc:Svg2synfig/es
2016-07-04T20:06:19Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
{{Title|Importar SVG}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
<br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de Ikscape 0.91 la extensión vienen en la versión oficial de Inkscape {{c|<Archivo>|<Salvar Como>|Animation synfig (.sif)}}. Esta es la mejor opción por que Inkscape exporta pero no abre archivos .sif.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.<br />
<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 ([http://prdownloads.sourceforge.net/saxon/saxonb9-0-0-2j.zip saxonsa9-0-0-2j.zip]).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con ls nuevas versiones de Saxon<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre></div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22062
Doc:Svg2synfig/es
2016-07-04T20:05:26Z
<p>Bazza: /* Limitaciones */</p>
<hr />
<div><!-- Page info --><br />
{{Title|Importar SVG}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
<br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de Ikscape 0.91 la extensión vienen en la versión oficial de Inkscape {{c|<Archivo>|<Salvar Como>|Animation synfig (.sif)}}. Esta es la mejor opción por que Inkscape exporta pero no abre archivos .sif.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 ([http://prdownloads.sourceforge.net/saxon/saxonb9-0-0-2j.zip saxonsa9-0-0-2j.zip]).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con ls nuevas versiones de Saxon<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22061
Doc:Svg2synfig/es
2016-07-04T19:52:20Z
<p>Bazza: /* Prerrequisitos */</p>
<hr />
<div><!-- Page info --><br />
{{Title|Importar SVG}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
<br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de Ikscape 0.91 la extensión vienen en la versión oficial de Inkscape {{c|<Archivo>|<Salvar Como>|Animation synfig (.sif)}}. Esta es la mejor opción por que Inkscape exporta pero no abre archivos .sif.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 ([http://prdownloads.sourceforge.net/saxon/saxonb9-0-0-2j.zip saxonsa9-0-0-2j.zip]).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22060
Doc:Svg2synfig/es
2016-07-04T19:42:46Z
<p>Bazza: mas wiki</p>
<hr />
<div><!-- Page info --><br />
{{Title|Importar SVG}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
<br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de Ikscape 0.91 la extensión vienen en la versión oficial de Inkscape {{c|<Archivo>|<Salvar Como>|Animation synfig (.sif)}}. Esta es la mejor opción por que Inkscape exporta pero no abre archivos .sif.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22058
Doc:Svg2synfig/es
2016-07-04T19:36:58Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
{{Title|Importar SVG}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
<br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de Ikscape 0.91 la extensión vienen en la versión oficial de Inkscape {{c|<Archivo>|<Salvar Como>|Animation synfig (.sif)}}. Esta es la mejor opción por que Inkscape exporta pero no abre archivos .sif.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
<br />
----<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
----<br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22057
Doc:Svg2synfig/es
2016-07-04T19:35:23Z
<p>Bazza: /* Extensión para Inkscape */</p>
<hr />
<div><!-- Page info --><br />
{{Title|SVG Import}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<!-- Page info end --><br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de Ikscape 0.91 la extensión vienen en la versión oficial de Inkscape {{c|<Archivo>|<Salvar Como>|Animation synfig (.sif)}}. Esta es la mejor opción por que Inkscape exporta pero no abre archivos .sif.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
<br />
----<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
----<br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22056
Doc:Svg2synfig/es
2016-07-04T19:33:49Z
<p>Bazza: /* Inkscape Extension */</p>
<hr />
<div><!-- Page info --><br />
{{Title|SVG Import}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<!-- Page info end --><br />
Editar los dibujos de las animaciones previamente en un editor de vectores suele ser una muy buena idea, por que no perdemos resolución y con editores como [https://inkscape.org Inkscape] este trabajo resulta mucho más practico que hacerlo directamente en Synfig Studio.<br />
<br />
==Extensión para Inkscape==<br />
<br />
La Extensión de [https://inkscape.org Inkscape] que convierte SVG en Synfig Studio (.sif) es la herramienta más recomendada para este trabajo.<br />
<br />
Desde la versión de Ikscape 0.91 la extensión vienen en la versión oficial de Inkscape {{c|<File>|<Save as>|Animation synfig (.sif)}}.<br />
<br />
Sí deseas instalarla manualmente puedes buscarla en sección de descargas de [http://www.synfig.org/cms/en/download/tools/ Herramientas y Script]<br />
<br />
<br />
----<br />
<br />
<br />
== Saxon ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
----<br />
<br />
== Svgtosif ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=File:Svgtosif.zip&diff=22055
File:Svgtosif.zip
2016-07-04T19:23:54Z
<p>Bazza: Copia para el wiki de http://none.carlos.googlepages.com/svgtosif.zip</p>
<hr />
<div>Copia para el wiki de http://none.carlos.googlepages.com/svgtosif.zip</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22054
Doc:Svg2synfig/es
2016-07-04T19:22:32Z
<p>Bazza: /* Opción 2 */</p>
<hr />
<div><!-- Page info --><br />
{{Title|SVG Import}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<!-- Page info end --><br />
=Inkscape Extension=<br />
'''Menu --> Save as --> synfig .sif'''<br />
<br />
== Opción 1 ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
----<br />
<br />
== Opción 2 ==<br />
<br />
Esta es un programa en C realizado por [http://www.synfig.org/forums/memberlist.php?mode=viewprofile&u=103 akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
Descargar del [http://none.carlos.googlepages.com/svgtosif.zip Sitio web] o el wiki [[File:svgtosif.zip]]<br />
<br />
=== Instalación ===<br />
<br />
En GNU/Linux:<br />
<br />
wget http://none.carlos.googlepages.com/svgtosif.zip<br />
unzip svgtosif.zip<br />
cd svgtosif<br />
./autogen.sh<br />
./configure<br />
make && sudo make install<br />
<br />
En nuevas versiones de gcc puede falla la compilación esto se arregla con:<br />
<br />
gcc svgtosif-list.o svgtosif-reader1.o svgtosif-strext.o `xml2-config --cflags` -g -O2 -lm `xml2-config --libs` -o svgtosif<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22053
Doc:Svg2synfig/es
2016-07-04T19:12:03Z
<p>Bazza: /* Opción 2 */</p>
<hr />
<div><!-- Page info --><br />
{{Title|SVG Import}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<!-- Page info end --><br />
=Inkscape Extension=<br />
'''Menu --> Save as --> synfig .sif'''<br />
<br />
== Opción 1 ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
----<br />
<br />
== Opción 2 ==<br />
<br />
Esta es un programa en C realizado por [http://none.carlos.googlepages.com/ akagogo] que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
http://none.carlos.googlepages.com/svgtosif.zip<br />
<br />
=== Instalación ===<br />
<br />
Simplemente efectue los habituales '''./configure && make && sudo make install'''<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene crear una carpeta llamada "data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg'''<br />
<br />
=== Más practico ===<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
mv "data/${1%%.*}.sif" .<br />
rm -r data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22052
Doc:Svg2synfig/es
2016-07-04T19:02:49Z
<p>Bazza: /* Opción 1 */</p>
<hr />
<div><!-- Page info --><br />
{{Title|SVG Import}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<!-- Page info end --><br />
=Inkscape Extension=<br />
'''Menu --> Save as --> synfig .sif'''<br />
<br />
== Opción 1 ==<br />
<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
<br />
=== Objetivo ===<br />
<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
=== Línea de comandos ===<br />
<br />
# Entrar al directorio SAXON.<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
==== Archivo de proceso por lotes de Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes svg2synfig.bat, en el mismo directorio de SAXON, con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
''Simplemente suelte el archivo SVG sobre svg2synfig.bat.''<br />
<br />
==== Resultado ====<br />
<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo synfig.sif, en la misma carpeta.<br />
Puede abrir este archivo en Synfig.<br />
<br />
=== Limitaciones ===<br />
<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
<br />
=== svg2synfig.xsl ===<br />
<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
----<br />
<br />
== Opción 2 ==<br />
<br />
Esta es un programa en C realizado por akagogo que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
http://none.carlos.googlepages.com/svgtosif.zip<br />
<br />
=== Instalación ===<br />
<br />
Simplemente efectue los habituales '''./configure && make && sudo make install'''<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene una carpeta "/ejemplo" debe crear una carpeta llamada "/ejemplo/data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg''' siendo "/ejemplo" su actual directorio de trabajo.<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
NAME=`echo "$1" | cut -d "." -f 1`<br />
cp "data/$NAME.sif" .<br />
rm data/*<br />
rmdir data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22051
Doc:Svg2synfig/es
2016-07-04T18:57:00Z
<p>Bazza: /* Prerrequisitos */</p>
<hr />
<div><!-- Page info --><br />
{{Title|SVG Import}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<!-- Page info end --><br />
=Inkscape Extension=<br />
'''Menu --> Save as --> synfig .sif'''<br />
<br />
== Opción 1 ==<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
=== Objetivo ===<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
=== Prerrequisitos ===<br />
<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección, la carpeta contendrá varios archivos JAR.<br />
# Copiar el archivo [[#svg2synfig.xsl]] en el mismo directorio de SAXON<br />
<br />
==== Prerrequisitos opcionales para Windows ====<br />
<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes d:\saxon\svg2synfig.bat con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
<br />
=== Transformación de un SVG en un archivo Synfig ===<br />
==== Archivo de proceso por lotes de Windows ====<br />
# Simplemente suelte el archivo SVG sobre svg2synfig.bat.<br />
==== Línea de comandos ====<br />
# Entrar al directorio "saxon".<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
=== Resultado ===<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo d:\saxon\synfig.sif.<br />
Puede abrir este archivo en Synfig.<br />
=== Limitaciones ===<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
=== svg2synfig.xsl ===<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
== Opción 2 ==<br />
<br />
Esta es un programa en C realizado por akagogo que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
http://none.carlos.googlepages.com/svgtosif.zip<br />
<br />
=== Instalación ===<br />
<br />
Simplemente efectue los habituales '''./configure && make && sudo make install'''<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene una carpeta "/ejemplo" debe crear una carpeta llamada "/ejemplo/data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg''' siendo "/ejemplo" su actual directorio de trabajo.<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
NAME=`echo "$1" | cut -d "." -f 1`<br />
cp "data/$NAME.sif" .<br />
rm data/*<br />
rmdir data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Svg2synfig/es&diff=22050
Doc:Svg2synfig/es
2016-07-04T18:48:54Z
<p>Bazza: /* Línea de comandos */</p>
<hr />
<div><!-- Page info --><br />
{{Title|SVG Import}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<!-- Page info end --><br />
=Inkscape Extension=<br />
'''Menu --> Save as --> synfig .sif'''<br />
<br />
== Opción 1 ==<br />
Esta opción utiliza una hoja de estilo XSLT 2.0 para transformar el XML de SVG a XML de Synfig.<br />
=== Objetivo ===<br />
Convertir una imagen SVG en un archivo Synfig para importarlo. Publicado por primera vez en el foro: http://synfig.org/forums/viewtopic.php?t=30<br />
=== Prerrequisitos ===<br />
# Asegúrese de tener instalado un entorno de ejecución Java (JRE).<br />
# Obtenga una versión reciente del procesador de XSLT SAXON para Java de http://saxon.sourceforge.net/. Versión recomendada: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).<br />
# Extraiga el paquete SAXON a una carpeta de su elección. Como ejemplo vamos a utilizar d:\saxon en lo sucesivo. La carpeta contendrá varios archivos JAR.<br />
# Cree el archivo d:\saxon\svg2synfig.xsl con el contenido proporcionado al final de este documento ({{l|#svg2synfig.xsl}}).<br />
==== Prerrequisitos opcionales para Windows ====<br />
Si no desea utilizar la línea de comandos, cree un archivo de procesamiento por lotes d:\saxon\svg2synfig.bat con este contenido:<br />
@java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 > %0\..\synfig.sif<br />
@pause<br />
=== Transformación de un SVG en un archivo Synfig ===<br />
==== Archivo de proceso por lotes de Windows ====<br />
# Simplemente suelte el archivo SVG sobre svg2synfig.bat.<br />
==== Línea de comandos ====<br />
# Entrar al directorio "saxon".<br />
# Introduzca el siguiente comando (sustituya your_input.svg por la ruta a su archivo SVG):<br />
java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg > synfig.sif<br />
<br />
=== Resultado ===<br />
Si la conversión ha tenido éxito, el resultado se escribirá en el archivo d:\saxon\synfig.sif.<br />
Puede abrir este archivo en Synfig.<br />
=== Limitaciones ===<br />
* No parece funcionar con SaxonB (la versión FOSS)<br />
* Los SVG comprimidos (svgz) deben ser descomprimidos primero.<br />
* Únicamente los trayectos de objetos SVG están soportados. Intente convertir todos los objetos a trayectos.<br />
* Sólo un subconjunto de elementos de trayecto está soportado. Intente modificar todos los nodos de trayecto de forma que tengan tangentes divididas, y todos los segmentos de trayecto sean curvas.<br />
* El coloreado sofisticado (gradientes, por ejemplo) no está soportado.<br />
* Sólo las transformaciones básicas están soportadas.<br />
* Relleno y contorno en el mismo objeto no está soportado.<br />
=== svg2synfig.xsl ===<br />
<pre><nowiki><br />
<xsl:stylesheet version="2.0" exclude-result-prefixes="#all"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
xmlns:svg="http://www.w3.org/2000/svg"<br />
xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
xmlns:math="http://exslt.org/math"><br />
<xsl:output method="xml" indent="yes" encoding="UTF-8"/><br />
<br />
<xsl:template match="/"><br />
<xsl:apply-templates/><br />
</xsl:template><br />
<br />
<xsl:template match="svg:svg"><br />
<xsl:variable name="width" select="math:units_to_px(@width)"/><br />
<xsl:variable name="height" select="math:units_to_px(@height)"/><br />
<xsl:variable name="has_view_box" select="matches(@viewBox, '(\d+\s){3}\d+')"/><br />
<canvas version="0.2" id="{@id}"<br />
width="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}"<br />
height="{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}"<br />
view-box="{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}"><br />
<xsl:apply-templates select="svg:g|svg:svg|svg:path"/><br />
</canvas><br />
</xsl:template><br />
<br />
<xsl:template match="svg:g"><br />
<layer type="PasteCanvas" active="true" version="0.1" desc="{@id}"><br />
<param name="canvas"><br />
<canvas><br />
<xsl:apply-templates/><br />
</canvas><br />
</param><br />
</layer><br />
</xsl:template><br />
<br />
<xsl:template match="svg:path"><br />
<xsl:variable name="style"><br />
<xsl:for-each select="ancestor-or-self::*"><br />
<xsl:sort select="position()" data-type="number" order="descending"/><br />
<xsl:value-of select="concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')"/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="self" select="."/><br />
<xsl:variable name="is_fill" select="not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))"/><br />
<xsl:analyze-string select="@d" regex="m[^z]+(z|$)" flags="i"><br />
<xsl:matching-substring><br />
<layer type="{if ($is_fill) then 'region' else 'outline'}" version="0.1" desc="{$self/@id}"><br />
<xsl:call-template name="style-to-color"><br />
<xsl:with-param name="style" select="replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
<xsl:if test="not ($is_fill)"><br />
<xsl:call-template name="style-to-width"><br />
<xsl:with-param name="style" select="replace($style, '.*stroke-width:([^;]+).*', '$1')"/><br />
</xsl:call-template><br />
</xsl:if><br />
<param name="bline"><br />
<bline type="bline_point" loop="{matches(., 'z', 'i')}"><br />
<xsl:call-template name="path-to-bline"><br />
<xsl:with-param name="path" select="."/><br />
<xsl:with-param name="node" select="$self" tunnel="yes"/><br />
</xsl:call-template><br />
</bline><br />
</param><br />
</layer><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="path-to-bline"><br />
<xsl:param name="path"/><br />
<xsl:variable name="stripped" select="replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')"/><br />
<xsl:variable name="closed" select="if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')"/><br />
<xsl:variable name="tmp" select="replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:variable name="curve" select="replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')"/><br />
<xsl:analyze-string select="$curve" regex="\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z" flags="i"><br />
<xsl:matching-substring><br />
<xsl:analyze-string select="concat(regex-group(1), $curve)" regex="([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)" flags="i"><br />
<xsl:matching-substring><br />
<xsl:call-template name="node-to-bline-point"><br />
<xsl:with-param name="c1_x" select="regex-group(1)"/><br />
<xsl:with-param name="c1_y" select="regex-group(2)"/><br />
<xsl:with-param name="x" select="regex-group(3)"/><br />
<xsl:with-param name="y" select="regex-group(4)"/><br />
<xsl:with-param name="c2_x" select="regex-group(5)"/><br />
<xsl:with-param name="c2_y" select="regex-group(6)"/><br />
</xsl:call-template><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:template><br />
<br />
<xsl:template name="node-to-bline-point"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="c1_x"/><br />
<xsl:param name="c1_y"/><br />
<xsl:param name="c2_x"/><br />
<xsl:param name="c2_y"/><br />
<xsl:param name="node" tunnel="yes"/><br />
<xsl:variable name="transform"><br />
<xsl:for-each select="$node/ancestor-or-self::*/@transform"><br />
<xsl:value-of select="."/><br />
</xsl:for-each><br />
</xsl:variable><br />
<xsl:variable name="t" select="math:resolve_transform($transform)"/><br />
<xsl:variable name="transformed_x" select="$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)"/><br />
<xsl:variable name="transformed_y" select="$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)"/><br />
<xsl:variable name="transformed_c1_x" select="$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c1_y" select="$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)"/><br />
<xsl:variable name="transformed_c2_x" select="$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)"/><br />
<xsl:variable name="transformed_c2_y" select="$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)"/><br />
<entry><br />
<composite type="bline_point"><br />
<point><br />
<vector><br />
<x><xsl:value-of select="$transformed_x"/></x><br />
<y><xsl:value-of select="$transformed_y"/></y><br />
</vector><br />
</point><br />
<width><br />
<real value="1"/><br />
</width><br />
<origin><br />
<real value="0.5"/><br />
</origin><br />
<split><br />
<bool value="true"/><br />
</split><br />
<t1><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_c1_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_c1_y"/><br />
<xsl:with-param name="x" select="$transformed_x"/><br />
<xsl:with-param name="y" select="$transformed_y"/><br />
</xsl:call-template><br />
</t1><br />
<t2><br />
<xsl:call-template name="vector-pair-to-radial"><br />
<xsl:with-param name="origin-x" select="$transformed_x"/><br />
<xsl:with-param name="origin-y" select="$transformed_y"/><br />
<xsl:with-param name="x" select="$transformed_c2_x"/><br />
<xsl:with-param name="y" select="$transformed_c2_y"/><br />
</xsl:call-template><br />
</t2><br />
</composite><br />
</entry><br />
</xsl:template><br />
<br />
<xsl:template name="vector-pair-to-radial"><br />
<xsl:param name="x"/><br />
<xsl:param name="y"/><br />
<xsl:param name="origin-x"/><br />
<xsl:param name="origin-y"/><br />
<xsl:variable name="dx" select="xs:float($x) - xs:float($origin-x)"/><br />
<xsl:variable name="dy" select="xs:float($y) - xs:float($origin-y)"/><br />
<xsl:variable name="d" select="math:sqrt($dx * $dx + $dy * $dy)"/><br />
<xsl:variable name="angle" select="math:atan2($dy, $dx)"/><br />
<radial_composite type="vector"><br />
<radius><br />
<real value="{$d * 3}"/><br />
</radius><br />
<theta><br />
<angle value="{$angle * 57.295779513082320876798154814105}"/><br />
</theta><br />
</radial_composite><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-width"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '^\d')"><br />
<param name="width"><br />
<real value="{math:units_to_px($style)}"/><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:template name="style-to-color"><br />
<xsl:param name="style"/><br />
<xsl:if test="matches($style, '#')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:hex_to_color(regex-group(1))"/></r><br />
<g><xsl:value-of select="math:hex_to_color(regex-group(2))"/></g><br />
<b><xsl:value-of select="math:hex_to_color(regex-group(3))"/></b><br />
<a><xsl:value-of select="if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1"/></a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'rgb')"><br />
<xsl:analyze-string select="concat($style, ';')" regex="rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;"><br />
<xsl:matching-substring><br />
<param name="color"><br />
<color><br />
<r><xsl:value-of select="math:power(xs:float(regex-group(1)) div 255, 2.2)"/></r><br />
<g><xsl:value-of select="math:power(xs:float(regex-group(2)) div 255, 2.2)"/></g><br />
<b><xsl:value-of select="math:power(xs:float(regex-group(3)) div 255, 2.2)"/></b><br />
<a>1</a><br />
</color><br />
</param><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:if><br />
<xsl:if test="matches($style, 'url')"><br />
<param name="color"><br />
<color><r>0.5</r><g>0.5</g><b>0.5</b><a>0.5</a> </color><br />
</param><br />
</xsl:if><br />
</xsl:template><br />
<br />
<xsl:function name="math:resolve_transform"><br />
<xsl:param name="transform"/><br />
<xsl:variable name="stripped" select="replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')"/><br />
<xsl:analyze-string select="concat('X(1,0,0,1,0,0)', $stripped)" regex="(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*"><br />
<xsl:non-matching-substring><br />
<xsl:sequence select="(1,0,0,1,0,0)"/><br />
</xsl:non-matching-substring><br />
<xsl:matching-substring><br />
<xsl:variable name="a2" select="xs:float(regex-group(8))"/><br />
<xsl:variable name="b2" select="xs:float(regex-group(9))"/><br />
<xsl:variable name="c2" select="xs:float(regex-group(10))"/><br />
<xsl:variable name="d2" select="xs:float(regex-group(11))"/><br />
<xsl:variable name="e2" select="xs:float(regex-group(12))"/><br />
<xsl:variable name="f2" select="xs:float(regex-group(13))"/><br />
<xsl:variable name="a1" select="xs:float(regex-group(2))"/><br />
<xsl:variable name="b1" select="xs:float(regex-group(3))"/><br />
<xsl:variable name="c1" select="xs:float(regex-group(4))"/><br />
<xsl:variable name="d1" select="xs:float(regex-group(5))"/><br />
<xsl:variable name="e1" select="xs:float(regex-group(6))"/><br />
<xsl:variable name="f1" select="xs:float(regex-group(7))"/><br />
<xsl:variable name="p" select="($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)"/><br />
<xsl:variable name="remainder" select="replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')"/><br />
<xsl:choose><br />
<xsl:when test="matches($remainder, 'X')"><br />
<xsl:variable name="recursion" select="concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')"/><br />
<xsl:sequence select="math:resolve_transform($recursion)"/><br />
</xsl:when><br />
<xsl:otherwise><br />
<xsl:sequence select="$p"/><br />
</xsl:otherwise><br />
</xsl:choose><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
<br />
<xsl:function name="math:hex_to_color" as="xs:float"><br />
<xsl:param name="hex"/><br />
<xsl:value-of select="math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)"/><br />
</xsl:function><br />
<br />
<xsl:function name="math:units_to_px" as="xs:float"><br />
<xsl:param name="size"/><br />
<xsl:analyze-string select="$size" regex="^([-\d.]+)([a-z%]*)$"><br />
<xsl:matching-substring><br />
<xsl:variable name="factor"><br />
<xsl:choose><br />
<xsl:when test="regex-group(2) = 'pt'">1.25</xsl:when><br />
<xsl:when test="regex-group(2) = 'em'">16</xsl:when><br />
<xsl:when test="regex-group(2) = 'mm'">3.54</xsl:when><br />
<xsl:when test="regex-group(2) = 'pc'">15</xsl:when><br />
<xsl:when test="regex-group(2) = 'cm'">35.43</xsl:when><br />
<xsl:when test="regex-group(2) = 'in'">90</xsl:when><br />
<xsl:otherwise>1</xsl:otherwise><br />
</xsl:choose><br />
</xsl:variable><br />
<xsl:value-of select="xs:float($factor) * xs:float(regex-group(1))"/><br />
</xsl:matching-substring><br />
</xsl:analyze-string><br />
</xsl:function><br />
</xsl:stylesheet><br />
</nowiki></pre><br />
<br />
== Opción 2 ==<br />
<br />
Esta es un programa en C realizado por akagogo que utiliza libxml para convertir SVG al formato de Synfig.<br />
<br />
http://none.carlos.googlepages.com/svgtosif.zip<br />
<br />
=== Instalación ===<br />
<br />
Simplemente efectue los habituales '''./configure && make && sudo make install'''<br />
<br />
=== Utilización ===<br />
<br />
Los archivos SVG deben estar en una carpeta llamada '''data'''. Debe ejecutar el comando desde el directorio padre, pero usando el nombre del archivo como argumento del comando. Así, si:<br />
<br />
* Tiene una carpeta "/ejemplo" debe crear una carpeta llamada "/ejemplo/data" y colocar allí el archivo "file.svg".<br />
* Ahora ejecute '''svgtosif file.svg''' siendo "/ejemplo" su actual directorio de trabajo.<br />
<br />
Como puede ver, esto no es realmente muy amigable. Para solucionar rápidamente el problema, utilice el siguiente script de bash:<br />
<br />
#!/bin/bash<br />
mkdir data<br />
cp "$1" data/<br />
/usr/local/bin/svgtosif "$1"<br />
NAME=`echo "$1" | cut -d "." -f 1`<br />
cp "data/$NAME.sif" .<br />
rm data/*<br />
rmdir data<br />
echo "Conversion complete!"<br />
<br />
Ponga estas líneas en un archivo llamado "svg2sif" (llámele como prefiera, pero evite llamarle "svgtosif") y guárdelo en un directorio PATH (se sugiere /usr/bin). Entonces:<br />
chmod +x /usr/bin/svg2sif <br />
<br />
Eso es todo. Ahora utilice:<br />
svg2sif <file.svg><br />
<br />
y obtendrá un archivo .sif en la misma carpeta en que esté trabajando.</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema&diff=22047
Doc:Quinema
2016-07-03T00:15:57Z
<p>Bazza: </p>
<hr />
<div>{{Title|Quinema: pixelar animation tools}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Tools for pixelar Animation<br />
<br />
* '''quinema-escalar:''' It increases the image's resolution.<br />
* '''quinema-sombra:''' It adds shadows to drawings in another layer.<br />
* '''quinema-paleta:''' It extracts the palette used to paint a drawing.<br />
* '''quinema-gimp-convert:''' It converts gimp formats to other formats (joining layers or not)<br />
* '''quinema-video:''' It generates a video from a sequence of files (png, xcf, etc)<br />
* '''quinema-lst:''' It generates a X-sheet to import to syfing.<br />
* '''quinema-transparencia:''' It deletes the white background and leaves a transparency<br />
* '''quinema-synfig:''' It make automatic project<br />
<br />
* [https://github.com/4232/quinema/wiki/README.en More info]<br />
<br />
== Add Shadown ==<br />
<br />
It adds shadows and generates a xcf editable in layers.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Build a Project Synfig Studio ==<br />
<br />
make a project<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directory<br />
quinema-synfig . > toma.sif</pre><br />
<br />
<br />
== License ==<br />
<br />
Author: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Release AGPV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema&diff=22046
Doc:Quinema
2016-07-03T00:14:07Z
<p>Bazza: /* Install */</p>
<hr />
<div>{{Title|Quinema: pixelar animation tools}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Tools for pixelar Animation<br />
<br />
* '''quinema-escalar:''' It increases the image's resolution.<br />
* '''quinema-sombra:''' It adds shadows to drawings in another layer.<br />
* '''quinema-paleta:''' It extracts the palette used to paint a drawing.<br />
* '''quinema-gimp-convert:''' It converts gimp formats to other formats (joining layers or not)<br />
* '''quinema-video:''' It generates a video from a sequence of files (png, xcf, etc)<br />
* '''quinema-lst:''' It generates a X-sheet to import to syfing.<br />
* '''quinema-transparencia:''' It deletes the white background and leaves a transparency<br />
* '''quinema-synfig:''' It make automatic project<br />
<br />
* [https://github.com/4232/quinema/blob/master/README.en.md More info]<br />
<br />
== Add Shadown ==<br />
<br />
It adds shadows and generates a xcf editable in layers.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Build a Project Synfig Studio ==<br />
<br />
make a project<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directory<br />
quinema-synfig . > toma.sif</pre><br />
<br />
<br />
== License ==<br />
<br />
Author: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Release AGPV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=22045
Doc:Quinema/es
2016-07-03T00:13:46Z
<p>Bazza: /* Instalación */</p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
Descargar [https://github.com/4232/quinema Toma del 4232] de ejemplo<br />
<br />
== Tutoriales ==<br />
<br />
* [https://archive.org/search.php?query=subject%3A%22synfig%22&and%5B%5D=subject%3A%22quinema%22 video tutoriales]<br />
<br />
== Licencia ==<br />
<br />
Autor: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Liberado bajo AGPV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg/es&diff=22044
Swf2svg/es
2016-07-02T18:24:31Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Conversor de '''SWF''' en '''SVG''' una ves convertido en '''SVG''' con [https://github.com/mgatelabs/SWFTools-Core SWFTools] y luego se puede exportar en '''SIF''' usando inkscape [[svg2sif]]<br />
<br />
== Ejemplo ==<br />
<br />
Animación reproducida en [https://www.gnu.org/software/gnash/ Gnash]:<br />
<br />
[[File:Swf_play_gnash.png||swf reproducido en gnash]]<br />
<br />
Importado en Inkscape luego de exportarla con [https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
<br />
<br />
[[File:Swf_import_inkscape.png||svg en inkscape]]<br />
<br />
Sí los degrade se exportar en negro primero exportar en PDF, importar el PDF y luego volver a exportar en SIF<br />
<br />
<br />
=== Licencia ===<br />
<br />
Autor: Michael Fuller [https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
<br />
Licencia MIT</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg/es&diff=22043
Swf2svg/es
2016-07-02T18:23:29Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Conversor de '''SWF''' en '''SVG''' una ves convertido en '''SVG''' se puede exportar en '''SIF''' usando inkscape [[svg2sif]]<br />
<br />
<br />
Animación reproducida en [https://www.gnu.org/software/gnash/ Gnash]:<br />
<br />
[[File:Swf_play_gnash.png||swf reproducido en gnash]]<br />
<br />
Importado en Inkscape luego de exportarla con [https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
<br />
<br />
[[File:Swf_import_inkscape.png||svg en inkscape]]<br />
<br />
Sí los degrade se exportar en negro primero exportar en PDF, importar el PDF y luego volver a exportar en SIF<br />
<br />
<br />
=== Licencia ===<br />
<br />
Autor: Michael Fuller<br />
<br />
Licencia MIT</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg&diff=22042
Swf2svg
2016-07-02T17:46:49Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Convert '''SWF''' in '''SVG''' and can edit in inkscape with [[svg2sif]]<br />
<br />
Animation reproduced in gnash:<br />
<br />
[[File:Swf_play_gnash.png||swf reproducido en gnash]]<br />
<br />
Mattered in Inkscape afterwards to export it with [https://github.com/mgatelabs/swftools-core SWFTools]<br />
<br />
<br />
[[File:Swf_import_inkscape.png]]<br />
<br />
Yes it degrade them export in first black export in PDF, matter the PDF and afterwards go back to export in SIF<br />
<br />
<br />
=== License ===<br />
<br />
Author: Michael Fuller<br />
<br />
License MIT</div>
Bazza
https://wiki.synfig.org/index.php?title=Svg2sif&diff=22041
Svg2sif
2016-07-02T17:41:01Z
<p>Bazza: Redirected page to Doc:Svg2synfig</p>
<hr />
<div>#REDIRECT [[Doc:Svg2synfig]]</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg/es&diff=22040
Swf2svg/es
2016-07-02T16:09:45Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Conversor de '''SWF''' en '''SVG''' una ves convertido en '''SVG''' se puede exportar en '''SIF''' usando inkscape [[svg2sif]]<br />
<br />
<br />
Animación reproducida en gnash:<br />
<br />
[[File:Swf_play_gnash.png||swf reproducido en gnash]]<br />
<br />
Importado en Inkscape luego de exportarla con [https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
<br />
<br />
[[File:Swf_import_inkscape.png]]<br />
<br />
Sí los degrade se exportar en negro primero exportar en PDF, importar el PDF y luego volver a exportar en SIF<br />
<br />
<br />
=== Licencia ===<br />
<br />
Autor: Michael Fuller<br />
<br />
Licencia MIT</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=22039
Doc:Quinema/es
2016-07-02T16:09:12Z
<p>Bazza: Undo revision 22037 by Bazza (talk)</p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
Descargar [https://github.com/4232/quinema Toma del 4232] de ejemplo<br />
<br />
== Tutoriales ==<br />
<br />
* [https://archive.org/search.php?query=subject%3A%22synfig%22&and%5B%5D=subject%3A%22quinema%22 video tutoriales]<br />
<br />
== Instalación ==<br />
<br />
<pre><br />
cd /tmp<br />
wget https://github.com/4232/quinema/archive/master.zip<br />
unzip master.zip<br />
cd quinema-master<br />
chmod +x quinema*<br />
sudo cp quinema* /usr/local/bin<br />
sudo apt-get -y install imagemagick librsvg2-bin potrace bc xcftools<br />
</pre><br />
<br />
== Licencia ==<br />
<br />
Autor: Ernesto Bazzano (Bazza) - [http://4232.cf Blog]<br />
<br />
Liberado bajo AGPV3+</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg/es&diff=22038
Swf2svg/es
2016-07-02T16:08:48Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Conversor de '''SWF''' en '''SVG''' una ves convertido en '''SVG''' se puede exportar en '''SIF''' usando inkscape [[svg2sif]]<br />
<br />
<br />
Animación reproducida en gnash:<br />
<br />
[[File:Swf_play_gnash.png||swf reproducido en gnash]]<br />
<br />
Importado en Inkscape luego de exportarla con [https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
[[File:Swf_import_inkscape.png]]<br />
<br />
Sí los degrade se exportar en negro primero exportar en PDF, importar el PDF y luego volver a exportar en SIF<br />
<br />
<br />
=== Licencia ===<br />
<br />
Autor: Michael Fuller<br />
<br />
Licencia MIT</div>
Bazza
https://wiki.synfig.org/index.php?title=Doc:Quinema/es&diff=22037
Doc:Quinema/es
2016-07-02T16:07:41Z
<p>Bazza: /* Licencia */</p>
<hr />
<div>{{Title|Quinema: Herramientas para animación pixelar}}<br />
{{NewTerminology}}<br />
{{Navigation|Category:Manual|Doc:ListImporter}}<br />
{{Category|Manual}}<br />
{{Category|ImportArt}}<br />
{{TOCright}}<br />
<br />
Es un conjunto de aplicaciones que permite limpiar, componer y pintar imágenes pixelares para importarlas en '''Synfig Studio'''.<br />
<br />
Trabajar con imágenes pixelares en animación es un tarea complicada las imágenes tiene que ser limpiada para que no tengan "ruido", luego ser pintadas y tener fondos con transparencia, todo esto se hace más fácil usando quinema, un conjunto se aplicaciones para linea de comando que nos ayuda a editar las imágenes para importarlas en Synfig Studio. <br />
<br />
<br />
== Agregar Sombras ==<br />
<br />
Los archivos y las sombras deben llevar el mismo nombre con una letra ''"s"'' adelante, ejemplo: j01.png y su sombra sj01.png.<br />
<br />
[[File:Quinema_sombra_Sj01.png]] [[File:Quinema_linea_J01.png]] [[File:Sombra_con_quinema.png]]<br />
<br />
<pre>quinema-sombra -p 1,1 j01.png sj01.png</pre><br />
<br />
== Armar un Projecto Synfig Studio ==<br />
<br />
Esta herramienta toma una carpeta y la convierte en un proyecto '''Synfig Studio'''.<br />
<br />
[[File:Escena_4232_quinema.gif]]<br />
<br />
<pre>cd directorio_de_la_toma<br />
quinema-synfig . > toma.sif</pre><br />
<br />
Como armar correctamente un directorio para armar un proyecto synfig:<br />
<br />
* serie de animaciones dentro de una carpeta<br />
** archivos en series que comiencen con una letra, ejemplo: j01.png<br />
* fondos que comiencen con la expresión ''"bg"'', ejemplo: bg01.png<br />
* primeros planos con la expresión ''"ol"'' o ''"fg"'', ejmplo: ol01.png<br />
<br />
Descargar [https://github.com/4232/quinema Toma del 4232] de ejemplo<br />
<br />
== Tutoriales ==<br />
<br />
* [https://archive.org/search.php?query=subject%3A%22synfig%22&and%5B%5D=subject%3A%22quinema%22 video tutoriales]<br />
<br />
== Instalación ==<br />
<br />
<pre><br />
cd /tmp<br />
wget https://github.com/4232/quinema/archive/master.zip<br />
unzip master.zip<br />
cd quinema-master<br />
chmod +x quinema*<br />
sudo cp quinema* /usr/local/bin<br />
sudo apt-get -y install imagemagick librsvg2-bin potrace bc xcftools<br />
</pre><br />
<br />
=== Licencia ===<br />
<br />
Autor: Michael Fuller<br />
<br />
Licencia MIT</div>
Bazza
https://wiki.synfig.org/index.php?title=File:Swf_play_gnash.png&diff=22036
File:Swf play gnash.png
2016-07-02T16:01:14Z
<p>Bazza: </p>
<hr />
<div></div>
Bazza
https://wiki.synfig.org/index.php?title=File:Swf_import_inkscape.png&diff=22035
File:Swf import inkscape.png
2016-07-02T15:59:28Z
<p>Bazza: </p>
<hr />
<div></div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg/es&diff=22034
Swf2svg/es
2016-07-02T15:49:16Z
<p>Bazza: </p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Conversor de '''SWF''' en '''SVG''' una ves convertido en '''SVG''' se puede exportar en '''SIF''' usando inkscape [[svg2sif]]<br />
<br />
[https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
<br />
Sí los degrade se exportar en negro primero exportar en PDF, importar el PDF y luego volver a exportar en SIF</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg/es&diff=22033
Swf2svg/es
2016-07-02T15:46:57Z
<p>Bazza: Created page with "<!-- Page info --> Category:Tutorials Basic {{NewTerminology}} <!-- Page info end --> Conversor de '''SWF''' en '''SVG''' una ves convertido en '''SVG''' se puede exporta..."</p>
<hr />
<div><!-- Page info --><br />
[[Category:Tutorials Basic]]<br />
{{NewTerminology}}<br />
<!-- Page info end --><br />
<br />
Conversor de '''SWF''' en '''SVG''' una ves convertido en '''SVG''' se puede exportar en '''SIF'''<br />
<br />
[https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
<br />
{{note|Si los degrade aparecen en negro exportar en PDF, importar el PDF y luego volver a exportar en SIF}}</div>
Bazza
https://wiki.synfig.org/index.php?title=Swf2svg&diff=22032
Swf2svg
2016-07-02T15:42:58Z
<p>Bazza: Created page with "SWF in SVG one see turned into SVG can export in SIF [https://github.com/mgatelabs/SWFTools-Core SWFTools] {{It notice|If it degrade them they appear in black export in PDF..."</p>
<hr />
<div>SWF in SVG one see turned into SVG can export in SIF<br />
<br />
[https://github.com/mgatelabs/SWFTools-Core SWFTools]<br />
<br />
{{It notice|If it degrade them they appear in black export in PDF, matter the PDF and afterwards go back to export in SIF}}</div>
Bazza
https://wiki.synfig.org/index.php?title=Gif2sif&diff=22031
Gif2sif
2016-07-02T03:13:03Z
<p>Bazza: </p>
<hr />
<div><pre><br />
mkdir png<br />
convert file.gif png/a.png<br />
cd png<br />
quinema-lst . > file.lst<br />
</pre><br />
<br />
Requiere: https://github.com/4232/quinema/wiki/README.en</div>
Bazza