Según veo, el nombre de tu imagen es un material con el que inicias, por
lo tanto ya lo conoces. O probablemente obtienes las imágenes de un
directorio, donde de nuevo ya conoces los nombres. Revisa tal vez el
módulo os, tal vez te ayude listdir() o bien busca glob en la
documentación, para seleccionar familias de archivos y obtener sus nombres.
En el caso del reemplazo, es muy simple: una vez que tienes el nombre,
éste es una cadena (string), por lo tanto tiene el método replace(). Con
éste puedes obtener una versión modificada del nombre, con todas las
correcciones que quieras.
Finalmente, para generar una clave al azar, revisa el módulo random,
especialmente la función choice().
Saludos
Gerardo
Hubermann wrote:
Muchas gracias por las respuestas.
bueno estuve mirando algo del codigo y googleando y me empece a hacer una
funcion para lo que quiero.
me quedan un par de cosas que no logro hacer funcionar:
quisiera poder sacar el nombre de la imagen que estoy usando pero no me permite
sacar solo el nombre (nose q funcion se usa)
quiero editar el nombre para reemplazar espacios por guion medio
mi foto de un auto .jpg x mi-foto-de-un-auto.jpg
tambien quiero ver de q forma generar un random de unos 6 digitos para agregar
al nombre apra evitar duplicados, con base64 vi que generar todo un random
enorme de digitos pero no lo veo optimo para SEO
#thumbnail (ad42643 seria el random)
mi-foto-de-un-auto_ad42643_thumb_200.jpg
#foto orig
mi-foto-de-un-auto_ad42643_700.jpg
Saludos y gracias!
######
from PIL import Image
import random
"""
Author: Gabriel Hubermann
Web: www.hubermann.com
GTalk:huberm...@gmail.com
Description: resize image, create thumb in square or proportional, grayscale or
color mode
"""
def thumb_create(image, thumb_size,format,path,color):
image = Image.open(image)
if image.format.upper() == 'JPEG':
ext = 'jpg'
if image.format.upper() == 'PNG':
ext = 'png'
if image.format.upper() == 'GIF':
ext = 'gif'
final_name = "miimagen_thumb."+str(thumb_size)+"."+ext
#si requiere qeu sea B&N o color - parametro color en : true/false
if color==False:
if image.mode != "L":
image = image.convert('L')
#si es cuadrado
if format == 'square':
xsize, ysize = image.size
minsize = min(xsize,ysize)
xnewsize = (xsize-minsize)/2
ynewsize = (ysize-minsize)/2
area = image.crop((xnewsize, ynewsize, xsize-xnewsize,
ysize-ynewsize))
resolution =thumb_size, thumb_size
finalthumb = area.resize(resolution , Image.ANTIALIAS)
final_name = path+final_name
finalthumb.save(final_name,quality = 100)
#si es proporcional
if format == 'normal':
new_width = thumb_size
new_height = new_width * image. size[1] / image. size[0]
resolution =new_width, new_height
finalthumb = image.resize(resolution , Image.ANTIALIAS)
final_name = path+final_name
finalthumb.save(final_name,quality = 100)
#imagen q tengo en la misma carpeta del script
imagen ="card.png"
#hice una carpeta llamada imagenes donde estoy guardando los thumb generados
path = "imagenes/"
# llamo a la funcion y le paso [archivo] [medidas] [cuadrado o proporcional]
[carpeta a guardar] [True o False para color o B&N]
thumb_create(imagen, 200, 'square', path, color=True)
#######
On Sep 2, 2011, at 1:23 PM, Guillermo Moguel wrote:
Hola Hubermann, efectivamente, para poder saber donde se encuentra tu
imagen necesitaras consultarlo de tu modelo, en mi caso realizo una
operación como la que tu requieres, el cambio es que yo no modifico la
imagen original y únicamente modifico la imagen que me están
consultando y regreso la nueva imagen. Esto me ha funcionado
correctamente por que el flujo de la aplicación no en tan grande así
que me va bien.
Otro dato es que como la imagen no es accesible desde url (esto fue
pensado así), las fotos en este caso son tratadas y regresadas para
incrustar en un img de mi template.
<img src="data:image/jpg;base64,{{ photo }}" alt="Base64 encoded image" />
Y con poco de miedo de faltar a la culturilla pythónica.
def foto64(fichero, mini=False):
try :
import base64
archivo = StringIO()
imagen = Image.open(fichero, "r") #el fichero seria la ruta de
tu consulta del modelo
x,y = imagen.size
rel = round(Decimal(x)/Decimal(y), 2)
if rel >= 1.33:
recorte = [((x/2)-(y*5/12)),0,((x/2)+(y*5/12)),y]
imagen = imagen.crop(recorte)
if mini: #Esto lo uso para aun auto completado en un texbox, que
regresa la foto con nombres
imagen.thumbnail((30, 34), Image.ANTIALIAS)
else:
imagen.thumbnail((294, 391), Image.ANTIALIAS)
imagen.save(archivo, 'JPEG')
return base64.b64encode(archivo.getvalue())
except:
imagen = "" #aqui tendrias una cadena de alguna imagen que quieras
regresar si tienes un error
return imagen
Saludos
El día 1 de septiembre de 2011 12:04, Hubermann <huberm...@gmail.com> escribió:
Hola guillermo, gracias por la respuesta, ahora el tema es que soy sumamente
novato en esto de django
(programo en php)
como deberia hacer para saber cual es la imagen subida y darle las opciones de
crop para el thumbnail, resize y luego eliminar la original? eso tengo q
hacerlo en el modelo?
puedo hacer una funcion aparte y pasarle los parametros que quiero?
por ejemplo:
from mi_funcion_para_imagenes import crop_imagen, resize_imagen
ultima = mi-imagen-recien-subida
ultima.crop_imagen(150px, cuadrado) //opciones de cuadrado o normal para cortar
proporcionalmente
ultima.resize_imagen(700px) //llevar la imagen a un ancho maximo de 700px y
luego eliminar la original
Gracias por responder, saludos desde Baires
On Sep 1, 2011, at 12:06 AM, Guillermo Moguel wrote:
Puedes usar la librería de PIL con eso haces eso, yo la uso también
con django y tengo esto para recortar la parte central mas o menos en
una proporción de foto infantil
from PIL import Image
foto = Image.open(fichero)
x = foto.size[0]
y = foto.size[1]
rel = round(Decimal(x)/Decimal(y), 2)
if rel >= 1.33:
recorte = [((x/2)-(y*5/12)),0,((x/2)+(y*5/12)),y
foto = foto.crop(recorte)
return foto
Espero te sirva.
Saludos de Chiapas.
El día 31 de agosto de 2011 21:21, Hubermann <huberm...@gmail.com> escribió:
Hola
quisiera saber que se usa en python para la tarea hacer crop y generar un
thumbnail en Django.
encontre un plugin thumbs.py pero solo hace thumbnail y lo hace cuadrado.
(quisiera darle un ancho y el alto q sea proporcional)
tambien encontre photologue pero me parece demasido grande para lo que necesito
hacer y poca info de como utilizarlo
Salu2
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
--
Guillermo Moguel Mandujano
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
--
Guillermo Moguel Mandujano
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/