Redimensionar Imágenes con ImageMagick

Publicado en 'Aplicaciones' por n00b, 20 Jul 2016.





  1. n00b

    n00b Miembro frecuente

    Registro:
    12 Dic 2015
    Mensajes:
    138
    Likes:
    49




    ImageMagick es un software que permite trabajar con imágenes: crear, editar, componer, convertir. ImageMagick está disponible para GNU/Linux, Windows y Mac OSX, IOs, Android y otros. Aunque es una herramienta potente con muchas opciones, este post solo tratará sobre cómo convertir una imagen grande en una imagen pequeña, esto es una necesidad si no queremos subir imágenes muy grandes y pesadas a la web.
    En este post solo se usará la versión para Windows, aunque bienvenidos los que aporten con un script para GNU/Linux.

    Bien, el primer paso es descargar e instalar ImageMagick, actulamente está la versión ImageMagick-7.0.2-4-Q16-x64-dll.exe (para 64 bits).
    -Descargar ImageMagick para Windows

    Luego, una vez que ya se encuentra instalado el software, crear una carpeta de trabajo, en C:\ crear la siguiente estructura de carpetas:
    Código:
    C:\ImageMagickWorkSpace
        |
        |---ContenedorOriginales
        |
        |
        |---ContenedorResultados   
    
    No lo había mencionado pero ImageMagick no tiene una interfaz gráfica desde donde poder usarlo (en realidad sí tiene pero es tan básica que ni tomarla en cuenta), este software se maneja con comandos desde la ventana de comandos (cmd).
    Para redimensionar una imagen solo es necesario ejecutar un comando, por ejemplo:
    PHP:
    magick miFotoOriginal.jpg -resize 100x100 fotoRedimensionada.jpg
    Se pueden poner más opciones en el comando, por ejemplo la calidad, entre otras muchas, para ello hay abundante información en la web.

    Ahora bien, convertir una por una sería bastante tedioso, para solucionarlo nos creamos un batch, es decir un archivo ejecutable que en nuestro caso se encargará de redimensionar todas las imágenes en un folder.

    Este es el código del batch: (mejor ver en pastebin)


    PHP:
    @echo off
    ::SOLO MODIFIQUE ESTOS VALORES:
    ::-------------------------------------------------------
    set patronFormatoImagen=*.JPG
    set folderFotosOriginal
    =C:\ImageMagickWorkSpace\ContenedorOriginales
    set folderFotosResultado
    =C:\ImageMagickWorkSpace\ContenedorResultados
    set tamanioResultado
    =200x200
    ::-------------------------------------------------------
    ::
    NO TOCAR A MENOS QUE SEPA LO QUE ESTÁ HACIENDO:
    ::-------------------------------------------------------
    :: 
    Crea el folder destino
    for %%d in (%folderFotosOriginal%) do (set folderFotosResultado=%folderFotosResultado%\%%~nd)
    mkdir "%folderFotosResultado%"
    :: Crea una copia de la estructura del folder original (por si tiene subolfoldes)
    xcopy "%folderFotosOriginal%" "%folderFotosResultado%" //e
    for /%%i in (%patronFormatoImagen%) do (
        
    set "originalFilePath=%%i"
        
    set "newFilePath=%%i"
        
    SETLOCAL EnableDelayedExpansion
        set newFilePath
    =!newFilePath:%folderFotosOriginal%=%folderFotosResultado%!
        echo !
    newFilePath!

        :: 
    Aquí redimensiona la imagen mediante imagemagick (entre comillas por si hay espacios en blanco)
        :: 
    el comando es magickC:\ruta\imagen.jpg -resize 197x197 C:\ruta\nuevaimagen.jpg
        magick 
    "!originalFilePath!" -resize %tamanioResultado"!newFilePath!"
        
    ENDLOCAL
    )
    pause
    Copiar todo el texto del cuadro de arriba en el bloc de notas (notepad) y al darle Guardar ponga el siguiente nombre:
    "C:\ImageMagickWorkSpace\ContenedorOriginales\RedimensionarImagenes.bat"
    Sí, incluya las comillas.

    Este batch lo que hace es primero copiar la estructura de carpetas (carpetas y subcarpetas) del folder que contiene las imágenes originales a otro folder, luego lee recursivamente las imágenes originales y una a una las va redimensionando y las nuevas imágenes las va pasando o guardando según corresponda en las carpetas y subcarpetas creadas anteriormente (las copias). Dicho de otra forma, es como si se hiciera un copy/paste del folder que contiene las imágenes solo que éstas se pasarán ya redimensionadas.
    [​IMG]

    Digamos que tiene sus imágene distribuidas en carpetas y subcarpetas, +/- así:
    Código:
    Imagenes
        |
        |---FotosDeEnero
        |        |
        |        |--Foto1.jpg
        |        |--Foto2.jpg
        |
        |
        |---FotosDeFebrero
        |        |
        |        |--Foto3.jpg
        |        |--Foto5.jpg
        |        |
        |
        |---FotosDeMarzo
        |        |
        |        |--Foto7.jpg
        |        |--Foto10.jpg
        |        |
        |
    Para redimensionarlas se deberá poner esa carpeta "Imagenes" dentro de C:\ImageMagickWorkSpace\ContenedorOriginales, luego hacer doble clic sobre el archivo RedimensionarImagenes.bat, que ya debería encontrarse en este folder, y esperar a que termine de redimensionar las imágenes.
    El resultado lo encontrará en C:\ImageMagickWorkSpace\ContenedorResultados .

    Ojo, que así como está el batch, está buscando imágenes JPG y está redimensionando a 200 x 200 píxeles, si sus archivos son PNG y/o necesita redimensionar a otro tamaño, por ejemplo a 500 x 500 píxeles, entonces abrá el archivo .bat con el bloc de notas, edite las siguientes líneas y luego guarde.

    ::SOLO MODIFIQUE ESTOS VALORES:
    ::-------------------------------------------------------
    set patronFormatoImagen=*.PNG
    set folderFotosOriginal=C:\ImageMagickWorkSpace\ContenedorOriginales
    set folderFotosResultado=C:\ImageMagickWorkSpace\ContenedorResultados
    set tamanioResultado=500x500
    ::-------------------------------------------------------

    Y eso sería todo,
     
    Última edición: 20 Jul 2016


  2. sekininsha

    sekininsha Miembro frecuente

    Registro:
    9 Jun 2016
    Mensajes:
    58
    Likes:
    7
    Habrá que probarlo algún día, :yeah:

    Pero que tal calidad con la que queda. :mmm:

    Aplica algún filtro? :mmm:

    Bueno gracias por el aporte. :yeah:
     
  3. DarkSide

    DarkSide Miembro de plata

    Registro:
    28 Oct 2010
    Mensajes:
    4,747
    Likes:
    1,072
    Se ve interesante.

    Saludos.
     
  4. n00b

    n00b Miembro frecuente

    Registro:
    12 Dic 2015
    Mensajes:
    138
    Likes:
    49
    quedan bien, aunque la calidad es configurable en el comando, el script se está usando la que es por defecto, con esta por ejemplo una imagen de 4MB pasa a 27kb pero a un tamaño de 200px (en este caso ideal para thumbnails), puedes poner otro tamaño e irá bien.