Ajuster les bords d'une image avec PIL ?

Published: 10 juin 2014

DMCA.com Protection Status

Avec matplotlib on a vu comment ajuster automatiquement les bords d'une figure dans un précèdent article. Cependant avec matplotlib les possibilités pour ajuster une figure sont un peu limitées et le résultat parfois insatisfaisant. Pour remédier à cela il est possible d'utiliser le module python: PIL qui permet de travailler facilement avec des images. Voici un exemple simple de script python permettant de rogner une image (la variable add_pad définie la distance entre la figure et les bords de l'image):

input.png: image de depart.
input.png: image de depart.

input_adjusted.png: Reduction de l'espace vide entre les bords de la figure et de l'image avec PIL.
input_adjusted.png: Reduction de l'espace vide entre les bords de la figure et de l'image avec PIL.

Avec add_pad = 0.
Avec add_pad = 0.

import Image

im = Image.open("input.png") #Can be many different formats.

pix = im.load()

im_size = im.size
print im_size #Get the width and hight of the image for iterating over

x_min = im_size[0] 
x_max = 0
y_min = im_size[1]
y_max = 0

for x in range(im_size[0]):
    for y in range(im_size[1]):
        if pix[x,y] != (255, 255, 255, 255) :
            if x < x_min :
                x_min = x 
            if x > x_max :
                x_max = x 
            if y < y_min :
                y_min = y                 
            if y > y_max :
                y_max = y

print x_min, x_max
print y_min, y_max

add_pad = 40 
x_min = x_min - add_pad
x_max = x_max + add_pad
y_min = y_min - add_pad
y_max = y_max + add_pad

left = x_min
top = y_min
width = x_max - x_min
height = y_max - y_min
box = (left, top, left+width, top+height)

area = im.crop(box)
area.show()

print area.size
area.save("input_adjusted.png", "PNG")

Recherches associées

Image

of