Cómo cortar el área de borde en blanco de una imagen PNG y reducirla a su tamaño mínimo con Python?Recortar una imagen PNG a su tamaño mínimo
Respuesta
PIL 's getbbox está trabajando para mí
im.getbbox() => 4-tupla o Ninguno
Calcula el cuadro delimitador de las no nulos regiones en la imagen. El cuadro delimitador se devuelve como un 4-tuple que define la coordenada inferior del píxel izquierdo, superior, derecho y . Si la imagen está completamente vacía, este método devuelve None.
Código Muestra que probé, lo he probado con bmp, pero debería funcionar también para png.
>>> import Image
>>> im=Image.open("test.bmp")
>>> im.size
(364, 471)
>>> im.getbbox()
(64, 89, 278, 267)
>>> im2=im.crop(im.getbbox())
>>> im2.size
(214, 178)
>>> im2.save("test2.bmp")
Puede usar PIL para buscar las filas y columnas de su imagen que están formadas únicamente por el color de su borde.
Al usar esta información, puede determinar fácilmente la extensión de la imagen incrustada.
PIL nuevamente le permitirá recortar la imagen para eliminar el borde.
https://gist.github.com/3141140
import Image
import sys
import glob
# Trim all png images with alpha in a folder
# Usage "python PNGAlphaTrim.py ../someFolder"
try:
folderName = sys.argv[1]
except :
print "Usage: python PNGPNGAlphaTrim.py ../someFolder"
sys.exit(1)
filePaths = glob.glob(folderName + "/*.png") #search for all png images in the folder
for filePath in filePaths:
image=Image.open(filePath)
image.load()
imageSize = image.size
imageBox = image.getbbox()
imageComponents = image.split()
if len(imageComponents) < 4: continue #don't process images without alpha
rgbImage = Image.new("RGB", imageSize, (0,0,0))
rgbImage.paste(image, mask=imageComponents[3])
croppedBox = rgbImage.getbbox()
if imageBox != croppedBox:
cropped=image.crop(croppedBox)
print filePath, "Size:", imageSize, "New Size:",croppedBox
cropped.save(filePath)
creo que es necesario complementar la respuesta de @Frank Krueger. Él hace un buen punto, pero no incluye cómo recortar adecuadamente el color del borde extra de una imagen. Encontré que here. Específicamente, encontré esto útil:
from PIL import Image, ImageChops
def trim(im):
bg = Image.new(im.mode, im.size, im.getpixel((0,0)))
diff = ImageChops.difference(im, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
if bbox:
return im.crop(bbox)
im = Image.open("bord3.jpg")
im = trim(im)
im.show()
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/11453172) – niton
Editado para incluir código específico. Buen punto. – AaronJPung
Tuve el mismo problema hoy. Aquí está mi solución para recortar los bordes transparentes. Simplemente coloque este script en su carpeta con sus archivos batch .png:
from PIL import Image
import numpy as np
from os import listdir
def crop(png_image_name):
pil_image = Image.open(png_image_name)
np_array = np.array(pil_image)
blank_px = [255, 255, 255, 0]
mask = np_array != blank_px
coords = np.argwhere(mask)
x0, y0, z0 = coords.min(axis=0)
x1, y1, z1 = coords.max(axis=0) + 1
cropped_box = np_array[x0:x1, y0:y1, z0:z1]
pil_image = Image.fromarray(cropped_box, 'RGBA')
print(pil_image.width, pil_image.height)
pil_image.save(png_image_name)
print(png_image_name)
for f in listdir('.'):
if f.endswith('.png'):
crop(f)
- 1. ¿Recortar automáticamente un mapa de bits al tamaño mínimo?
- 2. Cómo convertir una imagen JPG a PNG
- 3. Redimensionar/recortar/rellenar una imagen en un tamaño fijo
- 4. cambiar el tamaño y recortar la imagen centrada
- 5. ¿Cómo puedo recortar una imagen en Qt?
- 6. Recortar imagen en Android
- 7. Cómo recortar una imagen enorme
- 8. Redimensionar imagen PNG
- 9. Recortar imagen del centro PHP
- 10. Redimensionar la imagen con Recortar
- 11. Cómo ajustar el tamaño de un QMainWindow a su tamaño mínimo
- 12. convertir uiview a .png imagen
- 13. Recortar imagen ala Google Goggles
- 14. Recortar imagen capturada por AVCaptureSession
- 15. Recortar imagen usando CGImageCreateWithImageInRect
- 16. Crear una imagen PNG dinámica
- 17. Recortar imagen en PHP
- 18. cómo comprimir una imagen PNG usando Java
- 19. imagen Matplotlib savefig recortar
- 20. Cómo recortar una imagen en android?
- 21. Cómo recortar una imagen en iOS
- 22. Copiando una imagen a transcodificaciones de cartón jpeg a png
- 23. ¿Cómo puedo recortar una imagen con Pygame?
- 24. Android 9-Patch Imagen de fondo ¿Tamaño inicial de PNG?
- 25. tamaño mínimo de trabajo de una goroutine
- 26. WPF: ¿Cómo mostrar una imagen en su tamaño original?
- 27. MATLAB: muestra una imagen en su tamaño original
- 28. tamaño mínimo de gtk
- 29. ¿Por qué una imagen PNG a veces se vuelve borrosa en función de su posición en una vista?
- 30. imagecopyresampled para cambiar el tamaño y recortar una imagen - no devolver el resultado esperado
¿Está el tamaño del área del borde estático? Si es así, puede intentar usar enlaces de python ImageMagick. – Qberticus
el tamaño del borde en blanco no es un valor fijo, varía según la imagen. – jack