Search code examples
pythonpng

Creating png images in python


Tell me which library is better to use? I want to create a png image with a flowchart in python. Something like an intelligence map, where there will be text, rectangles and lines connecting them.

I googled and found the pypng module. Is it suitable for this purpose? Or are there better and more universal solutions? How do I create the png images I need using python


Solution

  • First of all, the description of your needs and your researches to try to find out how you can get it should be in the question. Just to help the community to answer you :)

    There are some possible conclusions of your question.

    Convert a chart into a .png

    If you are thinking to create a chart with some library, one of the best way to do it is using matplotlib, this time i show a use with the module pyplot. You can create a plot, and then save it as .png

    from matplotlib import pyplot as plt
    
    fig, ax = plt.subplots( nrows=1, ncols=1 )  # create figure & 1 axis
    ax.plot([0,1,2], [10,20,3])
    
    fig.savefig('flowchart.png') # Save your plot as an image and use .png
    
    plt.close(fig) #Close the figure window
    

    Create a chart from scratch

    There are some good libraries to do this.

    As you told pypng is one of them, you can check some code examples where they work on https://pypng.readthedocs.io/en/latest/ex.html

    But i have been researching about pygame, you can draw figures, use text, colours, so both options are interesting https://www.pygame.org/wiki/about.

    i´ll repost interesting code related:

    ''' pg_draw_circle_save101.py
    draw a blue solid circle on a white background
    save the drawing to an image file
    for result see http://prntscr.com/156wxi
    tested with Python 2.7 and PyGame 1.9.2 by vegaseat  16may2013
    '''
    
    import pygame as pg
    
    # pygame uses (r, g, b) color tuples
    white = (255, 255, 255)
    blue = (0, 0, 255)
    
    width = 300
    height = 300
    
    # create the display window
    win = pg.display.set_mode((width, height))
    # optional title bar caption
    pg.display.set_caption("Pygame draw circle and save")
    # default background is black, so make it white
    win.fill(white)
    
    # draw a blue circle
    # center coordinates (x, y)
    center = (width//2, height//2)
    radius = min(center)
    # width of 0 (default) fills the circle
    # otherwise it is thickness of outline
    width = 0
    # draw.circle(Surface, color, pos, radius, width)
    pg.draw.circle(win, blue, center, radius, width)
    
    # now save the drawing
    # can save as .bmp .tga .png or .jpg
    fname = "circle_blue.png"
    pg.image.save(win, fname)
    print("file {} has been saved".format(fname))
    
    # update the display window to show the drawing
    pg.display.flip()
    
    # event loop and exit conditions
    # (press escape key or click window title bar x to exit)
    while True:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                # most reliable exit on x click
                pg.quit()
                raise SystemExit
            elif event.type == pg.KEYDOWN:
                # optional exit with escape key
                if event.key == pg.K_ESCAPE:
                    pg.quit()
                    raise SystemExit