Skip to content
PNG I/O

PNG I/O

Write a PNG and read its pixels back.

PNG I/O

Usage

from canvas.color import Color
from canvas.buffer import Canvas
from canvas.shapes.ellipses import fill_ellipse_aa
from canvas.shapes.circles import draw_circle_aa
from canvas.shapes.lines import draw_line_aa
from canvas.io.bmp import write_bmp
from canvas.io.png import read_png, write_png


def main() raises:
    var c = Canvas(900, 600, Color(250, 250, 248))

    fill_ellipse_aa(c, 450, 300, 330, 210, Color(40, 100, 200))
    draw_circle_aa(c, 450, 300, 120, Color(230, 230, 230))
    draw_line_aa(c, 60, 60, 840, 540, Color(220, 60, 40), width=9.0)

    write_bmp(c, "examples/out_png_output.bmp")
    write_png(c, "examples/out_png_output.png")
    print("wrote examples/out_png_output.bmp and .png")

    var decoded = read_png("examples/out_png_output.png")
    var mismatches = 0
    for y in range(c.height):
        for x in range(c.width):
            var original = c.get_pixel(x, y)
            var round_tripped = decoded.get_pixel(x, y)
            if (
                original.r != round_tripped.r
                or original.g != round_tripped.g
                or original.b != round_tripped.b
            ):
                mismatches += 1
    print(
        "read back out_png_output.png:",
        decoded.width,
        "x",
        decoded.height,
        "--",
        mismatches,
        "pixel mismatches",
    )