Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

Computer Graphics in Python
Computer Graphics in Python
Computer Graphics in Python
Ebook265 pages2 hours

Computer Graphics in Python

Rating: 0 out of 5 stars

()

Read preview

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.

LanguageEnglish
Release dateNov 1, 2020
ISBN9781393078357
Computer Graphics in Python

Read more from Martin Mc Bride

Related to Computer Graphics in Python

Related ebooks

Software Development & Engineering For You

View More

Related articles

Reviews for Computer Graphics in Python

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Computer Graphics in Python - Martin McBride

    Computer graphics in Python

    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

    Enjoying the preview?
    Page 1 of 1