Ultima modificación: jueves, 28 de mayo de 2009
Necesitaba ripear unas 5000 imagenes en el curro, en cada una de ellos necesitaba pasarlo de TIFF a JPG y fijar el ancho a 800 y alto libre manteniendo aspect ratio.
Me he hecho este script cuyo uso simplemente es pasar todos las carpetas que vamos a trabajar como parametros. Por ejemplo:
Uso: ripearImagenes CARPETA1 CARPETA2 CARPETA3 … CARPETAN
Escribiendo ripearImagenes sin parametros es equivalente a pasar el directorio actual como primer parametro.
Simplemente gedit ripearImagenes y pasteamos, además podeis poneros el script en algún directorio “PATHeado” (evidentemente, esto ultimo es opcional xD):
#!/usr/bin/python
#
# :: Invasion Tux
# :: Ultima modificacion : jueves, 28 de mayo de 2009
# :: Script realizado por makiolo (makiolo@gmail.com) (Licencia Creative Commons con reconocimiento)
# :: Ultima version : http://blogricardo.wordpress.com/2009/05/15/script-para-ripear-imagenes-masivamente/
# :: Dependencias : python , convert
#
import os,sys,glob,subprocess,shutil
######### CONFIGURACION ##############
SUFIJO = "_RIPEADO"
DESTINO = ".png"
ANCHO = 2000
FORMATOS_VALIDOS = ["jpg","gif","png","tif"]
######################################
def getExtension(fichero):
posPunto = video.rfind(".")
return fichero[posPunto+1:len(fichero)]
def extensionEsValida(fichero):
posPunto = video.rfind(".")
if posPunto != -1:
extension = getExtension(fichero)
try:
FORMATOS_VALIDOS.index(extension)
return True
except ValueError:
return False
else:
return False
def getNombreRipeado(fichero):
return fichero+SUFIJO+DESTINO
def getCarpetaRipeados( dir_inicial ):
return "%s_RIPEADOS" % ( os.path.basename(dir_inicial) )
def existeRipeado(fichero):
return os.path.exists(getNombreRipeado(fichero))
def ripear(fichero):
ret = subprocess.call('convert "%s" -quiet -resize %d "%s"' % ( fichero , ANCHO , getNombreRipeado(fichero) ) , shell=True)
return ret == 0
def ripearTodo( carpeta ):
imagenes = []
for extension in FORMATOS_VALIDOS:
imagenes += glob.glob("*."+extension)
borradas = 0
copia = []
lenFinal = len(SUFIJO+DESTINO)
for imagen in imagenes:
if(imagen[-lenFinal:] != SUFIJO+DESTINO):
if os.path.isfile(imagen):
copia.append(imagen)
else:
os.remove( imagen )
borradas = borradas + 1
print "+ Borradas %d imagenes ripeadas" % (borradas)
total = len(copia)
print "+ Ripeando %d imagenes: " % total
i = 1
for imagen in copia:
print " - Ripeando %d de %d\r" % (i , total),
sys.stdout.flush()
if ripear(imagen):
shutil.move( getNombreRipeado(imagen) , carpeta)
else:
print "Error ripeando %s. Posiblemente no sea una imagen." % (imagen)
i+=1
def App():
try:
if len(sys.argv) == 1:
sys.argv.append(".")
dir_inicial = os.getcwd()
for parm in sys.argv:
if parm != sys.argv[0]:
if (os.path.isdir(parm)):
carpeta = getCarpetaRipeados( dir_inicial )
if not os.path.exists(carpeta):
os.mkdir(carpeta)
parm = os.path.abspath( parm )
carpeta = os.path.abspath( carpeta )
os.chdir(parm)
print "Trabajando %s" % parm
ripearTodo( carpeta )
os.chdir( dir_inicial )
else:
print '"%s" no es un directorio' % parm
except KeyboardInterrupt:
print "ancelado por el usuario"
if __name__ == '__main__':
App()
Archivado bajo: Linux, comandos, programación, script, software libre


