| 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 |
|---|
|
“Quise ahogar mis penas, pero las muy putas flotan” |
| Busca en milugar.net |
|---|
| Lo más comentado |
|---|
|
¿Quién Eres? (177 comments) Resident Evil 4 (155 comments) Convierte tu PC Linux en un sistema de Predicción Meteorológica (127 comments) ¿Como serías en South Park? (70 comments) Crímenes perfectos (50 comments) Corazón en Venta (34 comments) Cómo hacer una hamburguesa (33 comments) Pelis tontas, comedias románticas y él... (33 comments) |
| Últimos comentarios | |||||||
|---|---|---|---|---|---|---|---|
|
| Productos Google |
|---|
|
|
| Hay 1 invitado en línea |
