2009-06-26 24 views
6

Tengo un directorio lleno de imágenes que me gustaría cambiar el tamaño a aproximadamente el 60% de su tamaño original.Cambiar el tamaño de las imágenes en el directorio

¿Cómo voy a hacer esto? Puede estar en cualquiera de Python o Perl

Saludos

Eef

+0

No estoy seguro. En primer lugar, no dice que sea un trabajo de una sola vez. Segundo: "Irfan View" podría no ser una opción, por ejemplo, debido a limitaciones del sistema operativo. Tercero: ImageMagick es tan complejo que incluso usarlo como una herramienta por lotes es una especie de programación. –

Respuesta

10

¿Puede ser concha?

mkdir resized 
for a in *.jpg; do convert "$a" -resize 60% resized/"$a"; done 

Si tiene> 1 núcleo, puede hacerlo de esta manera:

find . -maxdepth 1 -type f -name '*.jpg' -print0 | xargs -0 -P3 -I XXX convert XXX -resize 60% resized/XXX 

-P3 significa que desea cambiar el tamaño de hasta 3 imágenes al mismo tiempo (paralelización).

Si no necesita conservar los originales, puede usar mogrify, pero prefiero usar convertir, y luego rm ...; mv ... - solo para estar seguro si el redimensionamiento (por cualquier razón) fallara.

+0

Gracias por esto, era exactamente lo que estaba buscando. –

18

Si desea hacerlo de forma programática, que supongo que es el caso, use PIL para cambiar el tamaño, p.

newIm = im.resize((newW, newH) 

guárdelo en el mismo archivo o en una nueva ubicación.

Pase por la carpeta de forma recursiva y aplique la función de cambio de tamaño a todas las imágenes.

He creado una secuencia de comandos de muestra que creo que funcionará para usted. Puede mejorarlo: tal vez hacerlo gráfico, agregar más opciones, p. misma extensión o puede ser todo png, redimensionar el muestreo lineal/bilineal, etc.

import os 
import sys 
from PIL import Image 

def resize(folder, fileName, factor): 
    filePath = os.path.join(folder, fileName) 
    im = Image.open(filePath) 
    w, h = im.size 
    newIm = im.resize((int(w*factor), int(h*factor))) 
    # i am saving a copy, you can overrider orginal, or save to other folder 
    newIm.save(filePath+"copy.png") 

def bulkResize(imageFolder, factor): 
    imgExts = ["png", "bmp", "jpg"] 
    for path, dirs, files in os.walk(imageFolder): 
     for fileName in files: 
      ext = fileName[-3:].lower() 
      if ext not in imgExts: 
       continue 

      resize(path, fileName, factor) 

if __name__ == "__main__": 
    imageFolder=sys.argv[1] # first arg is path to image folder 
    resizeFactor=float(sys.argv[2])/100.0# 2nd is resize in % 
    bulkResize(imageFolder, resizeFactor) 
Cuestiones relacionadas