| Manipulación de imágenes en Python |
|
|
| martes, 16 de agosto de 2005 | ||||||||||||||
|
Vamos a ir por partes. Supongamos que veo una imagen en internet que gusta. Ésta por ejemplo. ¿No está mal no? Como me gusta tanto, decido ponerla en la página junto a una noticia. Para ello tengo que descargarla y guardarla en local: Función downloadimport urllib2 def download(url, fname): try: furl = urllib2.urlopen(url) f = file(fname,'wb') f.write(furl.read()) f.close() except: print 'Unable to download file'Esta función descargará la imagen con el nombre del archivo que indiquemos: download('http://neuromancerwp.free.fr/Jessica%20Alba%2001%20-%201600.png', 'e:\imagenes\jess_alba.png')Una vez tengamos la imagen descargada, es necesario modificarla. La primera operación que realiceremos será la de un cambio de tamaño, para adecuarla al pequeño espacio disponible en los artículos: Función scaleimport Image def scale (fname, width, height, fname_scaled): try: img = Image.open (fname) except: print 'Unable to open ' + fname img = img.resize((width, height), Image.ANTIALIAS) try: img.save(fname_scaled) except: 'Unable to save in ' + fname_scaledObviamente es necesario tener en cuenta la proporción de la imagen (es sencillo calcular las proporciones, es una regla de 3 simple). En nuestro caso, la imagen es de 1600x1200 y queremos que tenga una anchura de 180px. Entonces: import Image img = Image.open ('e:\imagenes\jess_alba.png', mode='r') new_width = 180 new_height = new_width * img. size[1] / img. size[0] #Ahora se llama a la función de escalar scale('e:\imagenes\jess_alba.png', new_width, new_height, 'e:\imagenes\jess_alba_scaled.png') Hasta ahora todo han sido transformaciones triviales. Ahora modificaremos la imagen para que tenga el mismo aspecto que el resto de imágenes del sitio web. En un programa de retoque convencional (como el GIMP), los pasos a seguir serían:
Función modify_imgimport Image, ImageEnhance def modify_img (fname, fname_modified, opacity = 0.6): """The modifications consist on changing the mode to Grayscale and to add a white layer with the specified opacity """ img = Image.open (fname) #Transform to greyscale if neccesary if img.mode != "L": img = img.convert ("L") #Create a white image white_img = Image.new ("RGB", img.size, (255, 255, 255)) white_img = white_img.convert('RGBA') alpha = white_img.split()[3] alpha = ImageEnhance.Brightness(alpha).enhance(opacity) white_img.putalpha(alpha) #Create a layer with the white image layer = Image.new('RGBA', img.size, (0,0,0,0)) layer.paste(white_img, layer.getbbox()) #Create the final image img = Image.composite(layer, img, layer) #img.show() try: img.save (fname_modified) except: 'Unable to save in ' + fname_modifiedEntonces modify_image('e:\imagenes\jess_alba_scaled.png', 'e:\imagenes\jess_alba_scaled_bn.png')producirá la imagen: ![]() A partir de estas funciones se puede escribir un pequeño script al que sólo pasándole la ruta de la imagen en internet, genere una imagen con las modificaciones que hemos realizado sin tener que intervenir en ningún paso intermedio. De hecho es lo que yo utilizo (con algunas modificaciones extra) para casi todas las imágenes que aparecen en esta página. Espero que te sea útil.
Powered by AkoComment 2.2 *** SecurityImage 2.2.0 |
||||||||||||||
| < Anterior |
|---|
| mi lugar | |||||
|---|---|---|---|---|---|
|
| Temas |
|---|
|
mi lugar Actualidad Nintendo DS Cine Televisión Videojuegos Libros Erotismo Ciencia Tecnología Joomla Música Humor Python |
| Frase de hoy |
|---|
|
“Tengo bastante con morder algún pedazo de sueño” |
| Busca en milugar.net |
|---|
|
|
| Lo más comentado |
|---|
|
Resident Evil 4 (194 comments) ¿Quién Eres? (179 comments) Convierte tu PC Linux en un sistema de Predicción Meteorológica (127 comments) ¿Como serías en South Park? (75 comments) Crímenes perfectos (56 comments) Cómo hacer una hamburguesa (39 comments) Pelis tontas, comedias románticas y él... (37 comments) Corazón en Venta (34 comments) |
| Últimos comentarios | |||||||
|---|---|---|---|---|---|---|---|
|
| Hay 20 invitados en línea |
