método de PIL crop
realidad puede manejar esto para usted mediante el uso de números que están fuera del cuadro delimitador de la imagen original, aunque no se indica explícitamente en the documentation. Los números negativos para la izquierda y la parte superior agregarán píxeles negros a esos bordes, mientras que los números mayores que el ancho y la altura originales para la derecha y la parte inferior agregarán píxeles negros a esos bordes.
Este código corresponde tamaños de píxeles impares:
from PIL import Image
with Image.open('/path/to/image.gif') as im:
old_size = im.size
new_size = (800, 800)
if new_size > old_size:
# Set number of pixels to expand to the left, top, right,
# and bottom, making sure to account for even or odd numbers
if old_size[0] % 2 == 0:
add_left = add_right = (new_size[0] - old_size[0]) // 2
else:
add_left = (new_size[0] - old_size[0]) // 2
add_right = ((new_size[0] - old_size[0]) // 2) + 1
if old_size[1] % 2 == 0:
add_top = add_bottom = (new_size[1] - old_size[1]) // 2
else:
add_top = (new_size[1] - old_size[1]) // 2
add_bottom = ((new_size[1] - old_size[1]) // 2) + 1
left = 0 - add_left
top = 0 - add_top
right = old_size[0] + add_right
bottom = old_size[1] + add_bottom
# By default, the added pixels are black
im = im.crop((left, top, right, bottom))
En lugar de la 4-tupla, en su lugar podría usar una 2-tupla para añadir el mismo número de píxeles a la izquierda/derecha y arriba/abajo , o una 1-tupla para agregar el mismo número de píxeles a todos los lados.
Interesante. ¿Sería posible elegir diferentes bordes para arriba-abajo e izquierda-derecha, por lo que el nuevo tamaño de imagen puede ser el parámetro, en lugar del tamaño del borde? – heltonbiker
Gracias, ¿puedo diferenciar los valores x e y del borde ... algo así como decir (100,50)? –
bien funcionó, 'ImageOps.expand (Image.open ('original-image.png'), border = (300,500), fill = 'black'). Save ('imaged-with-border.png') ' –