Manipulación de imágenes en Python Imprimir E-Mail
martes, 16 de agosto de 2005
PythonPython es un lenguaje de programación que destaca por la sencillez con la que se puede realizar cualquier cosa. En este artículo voy a explicar cómo manipular y modificar imágenes de manera automática. En concreto, las funciones que expongo las utilizo en en scripts para crear las imágenes que aparecen en este sitio web (en blanco y negro y semitransparentes, cuando las originales suelen estar en color). Para probar este código es necesario un intérprete de Python y las librerías de manipulación de imágenes PIL (Python Imaging Library).

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 download

import 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 scale

import 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_scaled
Obviamente 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')
Jessica AlbaHasta 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:
  • Transformar la imagen a escala de grises
  • Añadir una nueva capa de color blanco sobre la imagen
  • Reducir la opacidad de la capa
Estos pasos los realiza una nueva función:

Función modify_img

import 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_modified
Entonces
modify_image('e:\imagenes\jess_alba_scaled.png',
   'e:\imagenes\jess_alba_scaled_bn.png')
producirá la imagen:

Jessica Alba

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.

Comentario[s]
KarlsBerg
Escrito por Invitado el 2005-09-30 02:07:35
Seria mucho mejor si pasaras todos los manuales de tu antigua web, gracias y un saludo
TUTORIALES
Escrito por Invitado el 2005-09-30 02:33:59
SERIA EXELENTE QUE SE PUDIERAN DESCARGAR LOSMANUALESCOMPLETOS, YA SEAEN PDF.GRACIAS
MUY BUENO
Escrito por voyager el 2007-02-20 13:25:38
realmente mouy buenos este y tu anterior sitio. 
 
seria interesante que sigas mostrando ejemplos sencillos como este de los modulos standard de python
buen manual
Escrito por exodo el 2007-04-10 12:55:28
Gracias hermano, ahora que vi tu manual, me dan mas ganas de pasarame a este lenguaje.
no se
Escrito por seba_kãpó@hotmail.com el 2007-07-16 19:21:11
seba_kãpó@hotmail.com
sirve para
Escrito por Muy bueno el 2007-08-09 19:51:12
Este tipo de tecnica nos pueden ayudar a crear una libreria completamente libre para captchas si podemos ponernos en contacto para charlar y ver ke podemos hacer... por aca me ves ovnicraft
Buena
Escrito por lizardo el 2007-09-18 15:54:55
Buena compa .. soy nuevo en Python y ejemplos como este ayudan mucho.. 
 
se agradece, y si puedes poner otros seria exelente... 
 
saludos
Ke chimba!
Escrito por Caliche_arkero el 2007-10-05 13:38:26
Que chimba de tutorial, mijo! es delo mejor...Arriba python.

Escribe tu comentario
Por favor cíñete al tema del artículo, sé educado y no envíes spam. Gracias por participar :)
Nombre:
Título:
BBCode:Web Address Email Address Load Image from Web Bold Text Italic Text Underlined Text Quote Code Open List List Item Close List
Comentario:





This image contains a scrambled text, it is using a combination of colors, font size, background, angle in order to disallow computer to automate reading. You will have to reproduce it to post on my homepage
Escribe lo que ves: *
Pulsa en recargar si tienes problemas para distinguir la imagen

Powered by AkoComment 2.2 *** SecurityImage 2.2.0

 
< Anterior
Hay 1 invitado en línea
Licencia de Creative Commons
Esta obra está bajo una licencia de Creative Commons.