Last active
March 24, 2021 01:26
-
-
Save stuaxo/b525a47d33f5f3074b1be7c693f6b6e6 to your computer and use it in GitHub Desktop.
OPERATOR_SOURCE and OPERATOR_CLEAR create images in SVGs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"fill_and_stroke.png\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAABmJLR0QA/wD/AP+gvaeTAAABOUlEQVR4nO3dMQ6CQBQA0cV4b5aTY21jLCTA+F5HQj4bJr+gYgwALmp5v9znKaf4e8s8avLjqMFcg8BxAscJHCdwnMBxz29vXMe2HnmQum2s2xnPtcFxAscJHCdwnMBxAsd9/Zn0yRzzF2Nu74rvwQbHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLHCRwncJzAcQLH+QN4nA2OEzhO4DiB4wSOEzhueb/c5ymn+HvLPGqyDY4TOE7gOIHjBI4TGAAAAAAAAAAAAAC4uxczkwrB5y7J8gAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<IPython.core.display.Image object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"SVG\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/svg+xml": [ | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"120pt\" height=\"120pt\" viewBox=\"0 0 120 120\" version=\"1.1\">\n", | |
"<g id=\"surface1\">\n", | |
"<path style=\"fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:14;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,100%);stroke-opacity:0.5;stroke-miterlimit:10;\" d=\"M 10 10 L 90 10 L 90 90 L 10 90 Z M 10 10 \"/>\n", | |
"</g>\n", | |
"</svg>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.SVG object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div class=a86f2cf7d-1fd0-4513-815a-5ea39d781038> \n", | |
" <style>\n", | |
" div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .hll { background-color: #ffffcc }\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .c { color: #aaaaaa; font-style: italic } /* Comment */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .err { color: #FF0000; background-color: #FFAAAA } /* Error */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .k { color: #0000aa } /* Keyword */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .ch { color: #aaaaaa; font-style: italic } /* Comment.Hashbang */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .cm { color: #aaaaaa; font-style: italic } /* Comment.Multiline */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .cp { color: #4c8317 } /* Comment.Preproc */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .cpf { color: #aaaaaa; font-style: italic } /* Comment.PreprocFile */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .c1 { color: #aaaaaa; font-style: italic } /* Comment.Single */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .cs { color: #0000aa; font-style: italic } /* Comment.Special */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gd { color: #aa0000 } /* Generic.Deleted */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .ge { font-style: italic } /* Generic.Emph */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gr { color: #aa0000 } /* Generic.Error */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gi { color: #00aa00 } /* Generic.Inserted */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .go { color: #888888 } /* Generic.Output */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gp { color: #555555 } /* Generic.Prompt */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gs { font-weight: bold } /* Generic.Strong */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .gt { color: #aa0000 } /* Generic.Traceback */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .kc { color: #0000aa } /* Keyword.Constant */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .kd { color: #0000aa } /* Keyword.Declaration */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .kn { color: #0000aa } /* Keyword.Namespace */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .kp { color: #0000aa } /* Keyword.Pseudo */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .kr { color: #0000aa } /* Keyword.Reserved */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .kt { color: #00aaaa } /* Keyword.Type */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .m { color: #009999 } /* Literal.Number */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .s { color: #aa5500 } /* Literal.String */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .na { color: #1e90ff } /* Name.Attribute */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .nb { color: #00aaaa } /* Name.Builtin */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .nc { color: #00aa00; text-decoration: underline } /* Name.Class */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .no { color: #aa0000 } /* Name.Constant */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .nd { color: #888888 } /* Name.Decorator */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .ni { color: #880000; font-weight: bold } /* Name.Entity */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .nf { color: #00aa00 } /* Name.Function */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .nn { color: #00aaaa; text-decoration: underline } /* Name.Namespace */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .nt { color: #1e90ff; font-weight: bold } /* Name.Tag */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .nv { color: #aa0000 } /* Name.Variable */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .ow { color: #0000aa } /* Operator.Word */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .w { color: #bbbbbb } /* Text.Whitespace */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .mb { color: #009999 } /* Literal.Number.Bin */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .mf { color: #009999 } /* Literal.Number.Float */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .mh { color: #009999 } /* Literal.Number.Hex */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .mi { color: #009999 } /* Literal.Number.Integer */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .mo { color: #009999 } /* Literal.Number.Oct */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .sa { color: #aa5500 } /* Literal.String.Affix */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .sb { color: #aa5500 } /* Literal.String.Backtick */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .sc { color: #aa5500 } /* Literal.String.Char */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .dl { color: #aa5500 } /* Literal.String.Delimiter */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .sd { color: #aa5500 } /* Literal.String.Doc */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .s2 { color: #aa5500 } /* Literal.String.Double */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .se { color: #aa5500 } /* Literal.String.Escape */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .sh { color: #aa5500 } /* Literal.String.Heredoc */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .si { color: #aa5500 } /* Literal.String.Interpol */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .sx { color: #aa5500 } /* Literal.String.Other */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .sr { color: #009999 } /* Literal.String.Regex */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .s1 { color: #aa5500 } /* Literal.String.Single */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .ss { color: #0000aa } /* Literal.String.Symbol */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .bp { color: #00aaaa } /* Name.Builtin.Pseudo */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .fm { color: #00aa00 } /* Name.Function.Magic */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .vc { color: #aa0000 } /* Name.Variable.Class */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .vg { color: #aa0000 } /* Name.Variable.Global */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .vi { color: #aa0000 } /* Name.Variable.Instance */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .vm { color: #aa0000 } /* Name.Variable.Magic */\n", | |
"div.a86f2cf7d-1fd0-4513-815a-5ea39d781038 .il { color: #009999 } /* Literal.Number.Integer.Long */\n", | |
" </style>\n", | |
" <div class=\"highlight\"><pre><span></span><span class=\"nt\"><svg</span> <span class=\"na\">xmlns=</span><span class=\"s\">"http://www.w3.org/2000/svg"</span> <span class=\"na\">xmlns:xlink=</span><span class=\"s\">"http://www.w3.org/1999/xlink"</span> <span class=\"na\">width=</span><span class=\"s\">"120pt"</span> <span class=\"na\">height=</span><span class=\"s\">"120pt"</span> <span class=\"na\">viewBox=</span><span class=\"s\">"0 0 120 120"</span> <span class=\"na\">version=</span><span class=\"s\">"1.1"</span><span class=\"nt\">></span>\n", | |
" <span class=\"nt\"><g</span> <span class=\"na\">id=</span><span class=\"s\">"surface1"</span><span class=\"nt\">></span>\n", | |
" <span class=\"nt\"><path</span> <span class=\"na\">style=</span><span class=\"s\">"fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:14;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,100%);stroke-opacity:0.5;stroke-miterlimit:10;"</span> <span class=\"na\">d=</span><span class=\"s\">"M 10 10 L 90 10 L 90 90 L 10 90 Z M 10 10 "</span><span class=\"nt\">/></span>\n", | |
" <span class=\"nt\"></g></span>\n", | |
"<span class=\"nt\"></svg></span>\n", | |
"</pre></div>\n", | |
"\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<display_xml.xml.XML at 0x7f48d62d1f70>" | |
] | |
}, | |
"execution_count": 1, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Initial render - can see fill under the stroke.\n", | |
"import cairo\n", | |
"import io\n", | |
"\n", | |
"from IPython.display import Image, SVG\n", | |
"from display_xml import XML\n", | |
"\n", | |
"svgio = io.BytesIO()\n", | |
"\n", | |
"surface = cairo.SVGSurface(svgio, 120, 120)\n", | |
"\n", | |
"cr = cairo.Context(surface)\n", | |
"\n", | |
"cr.set_source_rgb(1, 0, 0)\n", | |
"cr.rectangle(10, 10, 80, 80)\n", | |
"cr.fill_preserve()\n", | |
"\n", | |
"cr.set_line_width(14)\n", | |
"cr.set_source_rgba(0, 0, 1, .5)\n", | |
"cr.stroke()\n", | |
"\n", | |
"surface.write_to_png('fill_and_stroke.png')\n", | |
"\n", | |
"\n", | |
"surface.flush()\n", | |
"surface.finish()\n", | |
"\n", | |
"print(\"fill_and_stroke.png\")\n", | |
"display(Image('fill_and_stroke.png'))\n", | |
"print(\"SVG\")\n", | |
"display(SVG(data=svgio.getvalue()))\n", | |
"XML(svgio.getvalue(), style='autumn')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"fill_and_stroke.png\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAABmJLR0QA/wD/AP+gvaeTAAABKElEQVR4nO3dMQ7CMBAAQRvxb8LLk4IK6kRJlpnOzemk1dUeA4CLmt/PdTlli783l6MmP44azDUIHCdwnMBxAscJHCdwnMBxAscJHCdwnMBxAsc99xiyjvnaY87dzbG+z97hlwuOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSOEzhO4DiB4wSO2+UH8Cv+fM2HC44TOE7gOIHjBI4TOE7gOIHjBI4TOE7gOIHjBAYAAAAAAAAAAAAA7m4DxXwHQaYi2mUAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<IPython.core.display.Image object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"SVG\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/svg+xml": [ | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"120pt\" height=\"120pt\" viewBox=\"0 0 120 120\" version=\"1.1\">\n", | |
"<defs>\n", | |
"<image id=\"image12\" width=\"501\" height=\"501\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfUAAAH1CAYAAADvSGcRAAAABmJLR0QA/wD/AP+gvaeTAAAHtUlEQVR4nO3YsW0UURSG0TvWSkZkhgJwGc7Qinbog0ooA5E6JySG0KGFnYwDYgLDivF8e05+pT96n/RmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4V8vzT9Z3M3N96iEA7N63meVu6xHn7PAXN9czczzxDgD27+fMiPqGLrYeAACchqgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQMRh6wEv1eu5v7iZ26utdwD7ts6yfp3j3dY7OA+i/gc3c3v1ZT583HoHsG8Pc/n4an592noH58H3OwBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AEQcth7wUq2zrA9z+bj1DmDfvCP8T8vzT9b3M3M8+RIA9u7zzPJ96xHnzPc7AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARCzPP1nfzMzbky8BYO9+zCz3W48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfnsCTPYgPkf3nmYAAAAASUVORK5CYII=\"/>\n", | |
"</defs>\n", | |
"<g id=\"surface7\">\n", | |
"<use xlink:href=\"#image12\" transform=\"matrix(0.24,0,0,0.24,0,0)\"/>\n", | |
"</g>\n", | |
"</svg>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.SVG object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div class=a501c3862-9826-4e45-9ad4-997760f627d8> \n", | |
" <style>\n", | |
" div.a501c3862-9826-4e45-9ad4-997760f627d8 .hll { background-color: #ffffcc }\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .c { color: #aaaaaa; font-style: italic } /* Comment */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .err { color: #FF0000; background-color: #FFAAAA } /* Error */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .k { color: #0000aa } /* Keyword */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .ch { color: #aaaaaa; font-style: italic } /* Comment.Hashbang */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .cm { color: #aaaaaa; font-style: italic } /* Comment.Multiline */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .cp { color: #4c8317 } /* Comment.Preproc */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .cpf { color: #aaaaaa; font-style: italic } /* Comment.PreprocFile */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .c1 { color: #aaaaaa; font-style: italic } /* Comment.Single */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .cs { color: #0000aa; font-style: italic } /* Comment.Special */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gd { color: #aa0000 } /* Generic.Deleted */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .ge { font-style: italic } /* Generic.Emph */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gr { color: #aa0000 } /* Generic.Error */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gi { color: #00aa00 } /* Generic.Inserted */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .go { color: #888888 } /* Generic.Output */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gp { color: #555555 } /* Generic.Prompt */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gs { font-weight: bold } /* Generic.Strong */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .gt { color: #aa0000 } /* Generic.Traceback */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .kc { color: #0000aa } /* Keyword.Constant */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .kd { color: #0000aa } /* Keyword.Declaration */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .kn { color: #0000aa } /* Keyword.Namespace */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .kp { color: #0000aa } /* Keyword.Pseudo */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .kr { color: #0000aa } /* Keyword.Reserved */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .kt { color: #00aaaa } /* Keyword.Type */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .m { color: #009999 } /* Literal.Number */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .s { color: #aa5500 } /* Literal.String */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .na { color: #1e90ff } /* Name.Attribute */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .nb { color: #00aaaa } /* Name.Builtin */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .nc { color: #00aa00; text-decoration: underline } /* Name.Class */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .no { color: #aa0000 } /* Name.Constant */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .nd { color: #888888 } /* Name.Decorator */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .ni { color: #880000; font-weight: bold } /* Name.Entity */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .nf { color: #00aa00 } /* Name.Function */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .nn { color: #00aaaa; text-decoration: underline } /* Name.Namespace */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .nt { color: #1e90ff; font-weight: bold } /* Name.Tag */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .nv { color: #aa0000 } /* Name.Variable */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .ow { color: #0000aa } /* Operator.Word */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .w { color: #bbbbbb } /* Text.Whitespace */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .mb { color: #009999 } /* Literal.Number.Bin */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .mf { color: #009999 } /* Literal.Number.Float */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .mh { color: #009999 } /* Literal.Number.Hex */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .mi { color: #009999 } /* Literal.Number.Integer */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .mo { color: #009999 } /* Literal.Number.Oct */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .sa { color: #aa5500 } /* Literal.String.Affix */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .sb { color: #aa5500 } /* Literal.String.Backtick */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .sc { color: #aa5500 } /* Literal.String.Char */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .dl { color: #aa5500 } /* Literal.String.Delimiter */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .sd { color: #aa5500 } /* Literal.String.Doc */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .s2 { color: #aa5500 } /* Literal.String.Double */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .se { color: #aa5500 } /* Literal.String.Escape */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .sh { color: #aa5500 } /* Literal.String.Heredoc */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .si { color: #aa5500 } /* Literal.String.Interpol */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .sx { color: #aa5500 } /* Literal.String.Other */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .sr { color: #009999 } /* Literal.String.Regex */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .s1 { color: #aa5500 } /* Literal.String.Single */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .ss { color: #0000aa } /* Literal.String.Symbol */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .bp { color: #00aaaa } /* Name.Builtin.Pseudo */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .fm { color: #00aa00 } /* Name.Function.Magic */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .vc { color: #aa0000 } /* Name.Variable.Class */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .vg { color: #aa0000 } /* Name.Variable.Global */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .vi { color: #aa0000 } /* Name.Variable.Instance */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .vm { color: #aa0000 } /* Name.Variable.Magic */\n", | |
"div.a501c3862-9826-4e45-9ad4-997760f627d8 .il { color: #009999 } /* Literal.Number.Integer.Long */\n", | |
" </style>\n", | |
" <div class=\"highlight\"><pre><span></span><span class=\"nt\"><svg</span> <span class=\"na\">xmlns=</span><span class=\"s\">"http://www.w3.org/2000/svg"</span> <span class=\"na\">xmlns:xlink=</span><span class=\"s\">"http://www.w3.org/1999/xlink"</span> <span class=\"na\">width=</span><span class=\"s\">"120pt"</span> <span class=\"na\">height=</span><span class=\"s\">"120pt"</span> <span class=\"na\">viewBox=</span><span class=\"s\">"0 0 120 120"</span> <span class=\"na\">version=</span><span class=\"s\">"1.1"</span><span class=\"nt\">></span>\n", | |
" <span class=\"nt\"><defs></span>\n", | |
" <span class=\"nt\"><image</span> <span class=\"na\">id=</span><span class=\"s\">"image12"</span> <span class=\"na\">width=</span><span class=\"s\">"501"</span> <span class=\"na\">height=</span><span class=\"s\">"501"</span> <span class=\"na\">xlink:href=</span><span class=\"s\">"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfUAAAH1CAYAAADvSGcRAAAABmJLR0QA/wD/AP+gvaeTAAAHtUlEQVR4nO3YsW0UURSG0TvWSkZkhgJwGc7Qinbog0ooA5E6JySG0KGFnYwDYgLDivF8e05+pT96n/RmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4V8vzT9Z3M3N96iEA7N63meVu6xHn7PAXN9czczzxDgD27+fMiPqGLrYeAACchqgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQISoA0CEqANAhKgDQMRh6wEv1eu5v7iZ26utdwD7ts6yfp3j3dY7OA+i/gc3c3v1ZT583HoHsG8Pc/n4an592noH58H3OwBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AEQcth7wUq2zrA9z+bj1DmDfvCP8T8vzT9b3M3M8+RIA9u7zzPJ96xHnzPc7AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARIg6AESIOgBEiDoARCzPP1nfzMzbky8BYO9+zCz3W48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfnsCTPYgPkf3nmYAAAAASUVORK5CYII="</span><span class=\"nt\">/></span>\n", | |
" <span class=\"nt\"></defs></span>\n", | |
" <span class=\"nt\"><g</span> <span class=\"na\">id=</span><span class=\"s\">"surface7"</span><span class=\"nt\">></span>\n", | |
" <span class=\"nt\"><use</span> <span class=\"na\">xlink:href=</span><span class=\"s\">"#image12"</span> <span class=\"na\">transform=</span><span class=\"s\">"matrix(0.24,0,0,0.24,0,0)"</span><span class=\"nt\">/></span>\n", | |
" <span class=\"nt\"></g></span>\n", | |
"<span class=\"nt\"></svg></span>\n", | |
"</pre></div>\n", | |
"\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<display_xml.xml.XML at 0x7f48e44b2040>" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Adding OPERATOR_SOURCE or OPERATOR_CLEAR renders correctly, but creates an images inside the SVG.\n", | |
"svgio.seek(0)\n", | |
"\n", | |
"surface = cairo.SVGSurface(svgio, 120, 120)\n", | |
"\n", | |
"cr = cairo.Context(surface)\n", | |
"\n", | |
"cr.set_source_rgb(1, 0, 0)\n", | |
"cr.rectangle(10, 10, 80, 80)\n", | |
"cr.fill_preserve()\n", | |
"\n", | |
"cr.set_operator(cairo.Operator.SOURCE)\n", | |
"\n", | |
"cr.set_line_width(14)\n", | |
"cr.set_source_rgba(0, 0, 1, .5)\n", | |
"cr.stroke()\n", | |
"\n", | |
"\n", | |
"surface.write_to_png('fill_and_stroke.png')\n", | |
"\n", | |
"\n", | |
"surface.flush()\n", | |
"surface.finish()\n", | |
"\n", | |
"print(\"fill_and_stroke.png\")\n", | |
"display(Image('fill_and_stroke.png'))\n", | |
"print(\"SVG\")\n", | |
"display(SVG(data=svgio.getvalue()))\n", | |
"XML(svgio.getvalue(), style='autumn')" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.8.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 1 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment