Created
January 9, 2019 10:03
-
-
Save kantale/2139694f3f958a746ed9e2db1d60b209 to your computer and use it in GitHub Desktop.
PyCairo cairo experimentation
This file contains 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": [], | |
"source": [ | |
"import cairo" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 36, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with cairo.SVGSurface(\"example2.svg\", 200, 200) as surface:\n", | |
" #surface.set_eps(True)\n", | |
" context = cairo.Context(surface)\n", | |
" x, y, x1, y1 = 0.1, 0.5, 0.4, 0.9\n", | |
" x2, y2, x3, y3 = 0.8, 0.1, 0.9, 0.9\n", | |
" context.scale(200, 200)\n", | |
" context.set_line_width(0.04)\n", | |
" context.move_to(x, y)\n", | |
" context.curve_to(x1, y1, x2, y2, x3, y3)\n", | |
" context.stroke()\n", | |
" context.set_source_rgba(1, 0.2, 0.2, 0.6)\n", | |
" context.set_line_width(0.02)\n", | |
" context.move_to(x, y)\n", | |
" context.line_to(x1, y1)\n", | |
" context.move_to(x2, y2)\n", | |
" context.line_to(x3, y3)\n", | |
" context.stroke()\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "AttributeError", | |
"evalue": "'cairo.SVGSurface' object has no attribute 'scale'", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-10-58c8f3302406>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mcairo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSVGSurface\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"example3.svg\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m200\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msurface\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m \u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msurface\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m200\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;32m<ipython-input-10-58c8f3302406>\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(cr, width, height)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mcr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscale\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mcr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_line_width\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.04\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", | |
"\u001b[0;31mAttributeError\u001b[0m: 'cairo.SVGSurface' object has no attribute 'scale'" | |
] | |
} | |
], | |
"source": [ | |
"from math import pi\n", | |
"\n", | |
"\n", | |
"def draw(cr, width, height):\n", | |
" cr.scale(width, height)\n", | |
" cr.set_line_width(0.04)\n", | |
"\n", | |
" xc = 0.5\n", | |
" yc = 0.5\n", | |
" radius = 0.4\n", | |
" angle1 = 45.0 * (pi / 180.0) # angles are specified\n", | |
" angle2 = 180.0 * (pi / 180.0) # in radians\n", | |
"\n", | |
" cr.arc(xc, yc, radius, angle1, angle2)\n", | |
" cr.stroke()\n", | |
"\n", | |
" # draw helping lines\n", | |
" cr.set_source_rgba(1, 0.2, 0.2, 0.6)\n", | |
" cr.arc(xc, yc, 0.05, 0, 2 * pi)\n", | |
" cr.fill()\n", | |
" cr.set_line_width(0.03)\n", | |
" cr.arc(xc, yc, radius, angle1, angle1)\n", | |
" cr.line_to(xc, yc)\n", | |
" cr.arc(xc, yc, radius, angle2, angle2)\n", | |
" cr.line_to(xc, yc)\n", | |
" cr.stroke()\n", | |
" \n", | |
"with cairo.SVGSurface(\"example3.svg\", 200, 200) as surface:\n", | |
" draw(surface, 200, 200)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"![img](example2.svg)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"![img](example.svg)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 59, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<IPython.core.display.Image object>" | |
] | |
}, | |
"execution_count": 59, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import math\n", | |
"from IPython.display import Image\n", | |
"\n", | |
"WIDTH, HEIGHT = 256, 256\n", | |
"\n", | |
"\n", | |
"\n", | |
"surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)\n", | |
"ctx = cairo.Context(surface)\n", | |
"\n", | |
"ctx.scale(WIDTH, HEIGHT) # Normalizing the canvas\n", | |
"\n", | |
"#pat = cairo.LinearGradient(0.0, 0.0, 0.0, 1.0)\n", | |
"#pat.add_color_stop_rgba(1, 0.7, 0, 0, 0.5) # First stop, 50% opacity\n", | |
"#pat.add_color_stop_rgba(0, 0.9, 0.7, 0.2, 1) # Last stop, 100% opacity\n", | |
"\n", | |
"ctx.rectangle(0, 0, 1, 1) # Rectangle(x0, y0, x1, y1)\n", | |
"#ctx.set_source(pat)\n", | |
"#ctx.fill()\n", | |
"\n", | |
"ctx.translate(0.1, 0.1) # Changing the current transformation matrix\n", | |
"\n", | |
"ctx.move_to(0, 0)\n", | |
"ctx.arc(0.2, 0.1, 0.1, -math.pi / 2, 0)\n", | |
"\n", | |
"ctx.line_to(0.5, 0.1) # Line to (x,y)\n", | |
"ctx.curve_to(0.5, 0.2, 0.5, 0.4, 0.2, 0.8)\n", | |
"ctx.close_path()\n", | |
"\n", | |
"#ctx.set_source_rgb(0.3, 0.2, 0.5) # Solid color\n", | |
"ctx.set_line_width(0.02)\n", | |
"ctx.stroke()\n", | |
"\n", | |
"surface.write_to_png(\"example5.png\") # Output to PNG\n", | |
"\n", | |
"\n", | |
"Image('example5.png')\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"![img](example4.png)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 38, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with cairo.PSSurface('example9.eps', 200, 200) as surface:\n", | |
" surface.set_eps(True)\n", | |
" context = cairo.Context(surface)\n", | |
" x, y, x1, y1 = 0.1, 0.5, 0.4, 0.9\n", | |
" x2, y2, x3, y3 = 0.8, 0.1, 0.9, 0.9\n", | |
" context.scale(200, 200)\n", | |
" context.set_line_width(0.04)\n", | |
" context.move_to(x, y)\n", | |
" context.curve_to(x1, y1, x2, y2, x3, y3)\n", | |
" context.stroke()\n", | |
" context.set_source_rgba(1, 0.2, 0.2, 0.6)\n", | |
" context.set_line_width(0.02)\n", | |
" context.move_to(x, y)\n", | |
" context.line_to(x1, y1)\n", | |
" context.move_to(x2, y2)\n", | |
" context.line_to(x3, y3)\n", | |
" context.stroke()\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 39, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with cairo.PDFSurface('example11.pdf', 200, 200) as surface:\n", | |
" #surface.set_eps(True)\n", | |
" context = cairo.Context(surface)\n", | |
" x, y, x1, y1 = 0.1, 0.5, 0.4, 0.9\n", | |
" x2, y2, x3, y3 = 0.8, 0.1, 0.9, 0.9\n", | |
" context.scale(200, 200)\n", | |
" context.set_line_width(0.04)\n", | |
" context.move_to(x, y)\n", | |
" context.curve_to(x1, y1, x2, y2, x3, y3)\n", | |
" context.stroke()\n", | |
" context.set_source_rgba(1, 0.2, 0.2, 0.6)\n", | |
" context.set_line_width(0.02)\n", | |
" context.move_to(x, y)\n", | |
" context.line_to(x1, y1)\n", | |
" context.move_to(x2, y2)\n", | |
" context.line_to(x3, y3)\n", | |
" context.stroke()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 48, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "TypeError", | |
"evalue": "an integer is required (got type str)", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-48-6c11416e0a91>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mcairo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mImageSurface\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'example13.png'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m200\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msurface\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;31m#surface.set_eps(True)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mcontext\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcairo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mContext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msurface\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.9\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mx2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0.8\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.9\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.9\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
"\u001b[0;31mTypeError\u001b[0m: an integer is required (got type str)" | |
] | |
} | |
], | |
"source": [ | |
"with cairo.ImageSurface('example13.png', 200, 200) as surface:\n", | |
" #surface.set_eps(True)\n", | |
" context = cairo.Context(surface)\n", | |
" x, y, x1, y1 = 0.1, 0.5, 0.4, 0.9\n", | |
" x2, y2, x3, y3 = 0.8, 0.1, 0.9, 0.9\n", | |
" context.scale(200, 200)\n", | |
" context.set_line_width(0.04)\n", | |
" context.move_to(x, y)\n", | |
" context.curve_to(x1, y1, x2, y2, x3, y3)\n", | |
" context.stroke()\n", | |
" context.set_source_rgba(1, 0.2, 0.2, 0.6)\n", | |
" context.set_line_width(0.02)\n", | |
" context.move_to(x, y)\n", | |
" context.line_to(x1, y1)\n", | |
" context.move_to(x2, y2)\n", | |
" context.line_to(x3, y3)\n", | |
" context.stroke()" | |
] | |
} | |
], | |
"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.7.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment