Skip to content

Instantly share code, notes, and snippets.

@kantale
Created January 9, 2019 10:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kantale/2139694f3f958a746ed9e2db1d60b209 to your computer and use it in GitHub Desktop.
Save kantale/2139694f3f958a746ed9e2db1d60b209 to your computer and use it in GitHub Desktop.
PyCairo cairo experimentation
Display the source blob
Display the rendered blob
Raw
{
"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