Computer Graphics in Python
()
About this ebook
Pycairo is a great library for creating high quality vector graphics in Python. This book covers the full features of the library in detail, with practical code examples and illustrations, from an author with 25 years experience in computer graphics software.
Read more from Martin Mc Bride
Image Processing in Python Rating: 0 out of 5 stars0 ratingsNumPy Recipes Rating: 0 out of 5 stars0 ratings
Related to Computer Graphics in Python
Related ebooks
Matplotlib for Python Developers Rating: 3 out of 5 stars3/5Python Data Visualization Cookbook Rating: 4 out of 5 stars4/5Learning Jupyter Rating: 5 out of 5 stars5/5Learning C++ by Creating Games with UE4 Rating: 3 out of 5 stars3/5Python GUI Programming Cookbook - Second Edition Rating: 5 out of 5 stars5/5Python Parallel Programming Cookbook Rating: 5 out of 5 stars5/5Programming Concepts in C++ Rating: 0 out of 5 stars0 ratingsOpenGL Data Visualization Cookbook Rating: 0 out of 5 stars0 ratingsLearning ROS for Robotics Programming - Second Edition Rating: 0 out of 5 stars0 ratingsPython: Tips and Tricks to Programming Code with Python Rating: 0 out of 5 stars0 ratingsVisual Media Processing Using MATLAB Beginner's Guide Rating: 0 out of 5 stars0 ratingsPython Machine Learning Cookbook Rating: 0 out of 5 stars0 ratingsConceptual Programming with Python Rating: 4 out of 5 stars4/5Practical Python Data Visualization: A Fast Track Approach To Learning Data Visualization With Python Rating: 4 out of 5 stars4/5Tiny Python Projects: Learn coding and testing with puzzles and games Rating: 5 out of 5 stars5/5Interactive Applications Using Matplotlib Rating: 0 out of 5 stars0 ratingsClean Python: Elegant Coding in Python Rating: 0 out of 5 stars0 ratingsPython Workout: 50 ten-minute exercises Rating: 0 out of 5 stars0 ratingsNumPy Beginner's Guide Rating: 5 out of 5 stars5/5Web Scraping for SEO with Python Rating: 0 out of 5 stars0 ratingsMastering Python Regular Expressions Rating: 5 out of 5 stars5/5Mastering Julia Rating: 0 out of 5 stars0 ratingsModular Programming with Python Rating: 0 out of 5 stars0 ratingsGetting Started with Beautiful Soup Rating: 3 out of 5 stars3/5Publishing Python Packages: Test, share, and automate your projects Rating: 0 out of 5 stars0 ratingsMachine Learning Systems: Designs that scale Rating: 0 out of 5 stars0 ratingsPractices of the Python Pro Rating: 0 out of 5 stars0 ratingsPython for Secret Agents Rating: 0 out of 5 stars0 ratingsNumPy Essentials Rating: 0 out of 5 stars0 ratings
Software Development & Engineering For You
Python For Dummies Rating: 4 out of 5 stars4/5How to Write Effective Emails at Work Rating: 4 out of 5 stars4/5PYTHON: Practical Python Programming For Beginners & Experts With Hands-on Project Rating: 5 out of 5 stars5/5Grokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Tiny Python Projects: Learn coding and testing with puzzles and games Rating: 5 out of 5 stars5/5Beginning Programming For Dummies Rating: 4 out of 5 stars4/5Adobe Illustrator CC For Dummies Rating: 5 out of 5 stars5/5Agile Practice Guide Rating: 4 out of 5 stars4/5Level Up! The Guide to Great Video Game Design Rating: 4 out of 5 stars4/5How Do I Do That In InDesign? Rating: 5 out of 5 stars5/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5Hand Lettering on the iPad with Procreate: Ideas and Lessons for Modern and Vintage Lettering Rating: 4 out of 5 stars4/5Good Code, Bad Code: Think like a software engineer Rating: 5 out of 5 stars5/5How Do I Do That in Photoshop?: The Quickest Ways to Do the Things You Want to Do, Right Now! Rating: 4 out of 5 stars4/5Photoshop For Beginners: Learn Adobe Photoshop cs5 Basics With Tutorials Rating: 0 out of 5 stars0 ratingsThe Essential Persona Lifecycle: Your Guide to Building and Using Personas Rating: 4 out of 5 stars4/5Programming Problems: A Primer for The Technical Interview Rating: 4 out of 5 stars4/5Beginning C++ Programming Rating: 3 out of 5 stars3/5Git Essentials Rating: 4 out of 5 stars4/5Ry's Git Tutorial Rating: 0 out of 5 stars0 ratingsModern C++ for Absolute Beginners: A Friendly Introduction to C++ Programming Language and C++11 to C++20 Standards Rating: 0 out of 5 stars0 ratingsLearning Python Rating: 5 out of 5 stars5/5Lua Game Development Cookbook Rating: 0 out of 5 stars0 ratingsReversing: Secrets of Reverse Engineering Rating: 4 out of 5 stars4/5SQL For Dummies Rating: 0 out of 5 stars0 ratingsCoding All-in-One For Dummies Rating: 0 out of 5 stars0 ratings
Reviews for Computer Graphics in Python
0 ratings0 reviews
Book preview
Computer Graphics in Python - Martin McBride
Computer graphics in Python
Advanced vector graphics using Pycairo and Python
Martin McBride
© 2019 - 2020 Martin McBride
Table of Contents
Foreword
Who is this book for?
About the author
Keep in touch
1 Introduction to vector graphics
1.1 Pixel images
1.2 Size and resolution
1.3 Resizing pixel images
1.4 Drawing on pixel images
1.5 Vector graphics
1.6 Rendering
1.7 Typical uses
1.8 Benefits
1.9 Disadvantages
1.10 Common vector formats
2 About Pycairo
2.1 Cairo
2.2 Capabilities
2.3 Version
2.4 Installing Pycairo
2.5 Checking Pycairo version
3 Basic drawing operations
3.1 Creating an image with Pycairo
3.2 Coordinate system
3.3 Rectangles
3.4 Fill and stroke
3.5 Lines
3.6 Polygons
3.7 Open and closed shapes
3.8 Arcs
3.9 Circles
3.10 Bezier curves
3.11 Line styles
4 Paths and complex shapes
4.1 Paths
4.2 Sub-paths
4.3 Lines
4.4 Polygons
4.5 Arcs
4.6 Bezier curves
4.7 Function curves
4.8 Rectangle
5 Computer colour
5.1 RGB colour
5.2 Pycairo RGB colours
5.3 CSS named colours
5.4 Transparency
5.5 Transparency colour calculation
5.6 Transparent images
5.7 Greyscale images
5.8 Pixel colours
6 Transforms and state
6.1 User space and device space
6.2 Translation
6.3 Scaling
6.4 Rotation
6.5 Save and restore
6.6 Rotating about a point
6.7 Placing an ellipse
6.8 Correcting the effects of unequal scaling
6.9 Flipping
6.10 Current transform matrix
7 Working with text
7.1 Text is just shapes
7.2 How Pycairo handles text
7.3 Fonts
7.4 Font size
7.5 Font style
7.6 Text extents
7.7 Text extent examples
7.8 Text alignment
8 Gradients and image fills
8.1 Patterns
8.2 SolidPattern
8.3 Linear gradient
8.4 Linear gradients at different angles
8.5 Adding more stops
8.6 Extend options
8.7 Filling a stroke with a gradient
8.8 Filling text with a gradient
8.9 Radial gradients
8.10 Radial gradient with inner circle
8.11 Radial extend options
8.12 Loading an image into Pycairo
8.13 Using SurfacePattern with an image
8.14 SurfacePattern extend options
8.15 Using SurfacePattern with vectors
9 Clipping, masking and compositing
9.1 Clipping
9.2 Calling clip multiple times
9.3 Resetting the clip region
9.4 Clipping functions
9.5 Masking
9.6 Using an image as a mask
9.7 Compositing
9.8 OVER operator
9.9 Changing the drawing order
9.10 Masking operations
9.11 Artistic colour adjustments
9.12 Specific colour changes
10 Surfaces and output formats
10.1 Output formats
10.2 ImageSurface
10.3 SVGSurface
10.4 PDFSurface
10.5 PSSurface
10.6 RecordingSurface
10.7 ScriptSurface
10.8 TeeSurface
10.9 GUI surfaces
11 Integration with other libraries
11.1 How Pycairo stores image data
11.2 PIL (Pillow) integration
11.3 Numpy integration
12 Reference
12.1 Radians
Foreword
The Pycairo library is a Python graphics library based on the Cairo library. Cairo is written in C and has been ported to many other languages.
PyCairo is an efficient, fully featured, high quality graphics library, with similar drawing capabilities to other vector libraries and languages such as SVG, PDF, HTML canvas and Java graphics.
Typical use cases include: standalone Python scripts to create an image, chart, or diagram; server side image creation for the web (for example a graph of share prices that updates hourly); desktop applications, particularly those that involve interactive images or diagrams.
The power of Pycairo, with the expressiveness of Python, is also a great combination for making procedural images such as mathematical illustrations and generative art. It is also quite simple to generate image sequences that can be converted to video or animated gifs.
Who is this book for?
This book is primarily aimed at developers who have at least a small amount of Python experience, who are looking to use Python to create computer graphics for any application. The examples in the book use basic Python constructs, you don’t need to be a Python guru to learn Pycairo. No prior knowledge of computer graphics is assumed, although if you have used other graphics systems you should still find this book useful as Pycairo has its own unique quirks and features.
About the author
Martin McBride is a software developer, specialising in computer graphics, sound, and mathematical programming. He has been writing code since the 1980s in a wide variety of languages from assembler through to C++, Java and Python. He writes for PythonInformer.com and is the author of Functional Programming in Python available on leanpub.com. He is interested in generative art and works on the generativepy open source project.
Keep in touch
If you have any comments or questions you can get in touch by any of the following methods:
Joining the Python Informer forum at http://pythoninformer.boards.net/. Follow the Computer Graphics in Python board in the Books section.
Signing up for the Python Informer newsletter at pythoninformer.com
Following @pythoninformer on twitter.
Contacting me directly by email (info@axlesoft.com).
1 Introduction to vector graphics
There are two main ways to represent digital images - they can be stored as pixel images or vector images.
This book is about vector images, and more specifically how to use the Pycairo library to generate vector images. But we will start by looking at pixel images, because you can’t fully understand one without the other.
1.1 Pixel images
A pixel image is an image that is made up of pixels. You can think of a pixel as being a tiny square area of the image. Each pixel is too small to see individually, but if you zoom right in you can see them, as this illustration shows:
The important thing about pixels is that each one represents a square of the image that is filled with a single colour. You can’t have a pixel that is partly blue, partly red. Each of the squares in the zoomed image in completely filled with one colour. It is the combined effect of hundreds of tiny pixels that gives the illusion of a continuous image.
To store a pixel image, we simply need to store the colour value of each pixel, usually as an RGB (red, green, blue) value which typically occupies 3 bytes per pixel (1 byte per colour). Many modern cameras create images with millions, or tens of millions, of pixels, so pixel images can take a very large amount of storage space. Most common image formats, such as JPEG, PNG and GIF, employ data compression to reduce the storage requirement.
There are several alternative names for pixel images, which are more or less interchangeable:
Pixel image - the word pixel is a shortened form of picture element, each pixel being an element of the overall image.
Raster image - the word raster derived from the Latin for rake (rastrum). It refers to the way an image is drawn line by line, a bit like a rake being dragged over the ground.
Bitmap image - in general a bitmap is a mapping between some kind of data and the bits in computer memory. This term was used to describe the mapping of computer memory onto pixels on the screen, which led to pixel images sometimes being called bitmap images.
1.2 Size and resolution
A key feature of a pixel image is that it has a fixed size in pixels. For example the image in the example above is 640 pixels wide and 400 pixels high.
The pixel size has an effect on the physical size of the image. The relationship between the pixel size and the physical size of the image is determined by the resolution it is printed or displayed at.
1 physical_size = pixel_size/resolution
Resolution is usually expressed as the number of pixels per inch (ppi). This is sometimes called dots per inch (dpi) or even lines per inch (lpi), they all mean the same thing. Resolution can also be expressed in centimetres or millimetres rather than inches (e.g. lpmm or lpmm). We will use ppi.
For example, a typical computer monitor has a screen resolution of 90 ppi. If we display our 640 by 400 pixel image at 90 dpi, the physical size of the image on the screen will be about 7.1 by 4.4 inches (640 divided by 90, and 400 divided by 90).
Alternatively, if we printed the same image on a printer with a resolution of 300 ppi, our image would appear at a minuscule 2.1 by 1.3 inches.
The pixel size, physical size and resolution are linked by the formula above. If you choose any two of the values, the third value is fixed.
1.3 Resizing pixel images
It is possible to change the pixel size of an image, but there are costs and limitations.
You can make a pixel image smaller - for example you could take a 3000 by 2000 pixel image from a camera, and shrink it down to 600 by 400 pixels to fit on a website, or even to a 150 by 100 thumbnail image. Any image editing program such as Gimp or Photoshop will let you do that, quite successfully. The smaller image will look perfectly good. Some detail will be lost, simply because it has less pixels, but it won’t be any worse than an image that had been created at that size in the first place.
It is also possible to keep the image at its original size, and scale it down when it is displayed. On a website, for example, you can use CSS to set the size display size of an image, and if it is too large the browser will scale it automatically. The downside is that your are storing an image that is bigger (in terms of the number of bytes) than you need to. If the image is being stored on disk it will take more space than it needs to, if it is being downloaded from a website it will take longer than it needs to.
Trying to make a pixel image larger is usually less successful. A larger image contains more information than a small image. When you increase the pixel size of an image, you have no way of knowing what colour to make the extra pixels. If you wish to make the image slightly bigger, by 10% or maybe even 50%, the effect will be slight blurring. But if you try to increase the size more significantly, for example by a factor of 4, the result is a very poor quality image.
This illustrates a common problem with raster images - you need to decide the final pixel size of your image very early in the process of creating it.
1.4 Drawing on pixel images
You can draw shapes and text on pixel images. Most image editing software allows you to do that, and there are Python raster imaging libraries such as Pillow that allow you to do this is code. Painting shapes and