Automator: ¿Es posible cambiar el tamaño de una imagen a un tamaño de archivo máximo?

He estado buscando un método de Automator, mediante el cual se redimensiona un archivo de imagen (alto y ancho reducidos) a un tamaño de archivo específico (en bytes), o una proximidad cercana al límite inferior de ese tamaño de archivo.

Sería un gran uso para las acciones rápidas de MacOS Mojave, ya que muchas cargas de sitios web no aceptan imágenes de iPhone de tamaño completo, por ejemplo.

Mi intuición es que este es un problema bastante difícil de resolver para Automator incluso con la ayuda de bash scripting, etc. Por lo general, incluso las aplicaciones como Adobe Photoshop no son muy buenas para predecir el tamaño final del archivo después de comprimirlo en JPG o PNG. etc. Tal vez podría reducir gradualmente las dimensiones de la imagen hasta que sea inferior al tamaño máximo del archivo. Lo más fácil sería si hubiera una utilidad programable para esto.

Por lo tanto, pensé en preguntar si:

  • a) ¿Es esto factible, y
  • b) ¿Cómo se haría?
Para aclarar, ¿se refiere a la compresión de un archivo antes de que afecte la imagen? Puede escribir un script para detectar si la imagen es vertical u horizontal, cambiar el tamaño a un tamaño seguro como 800 px y luego comprimir.
@ʀ2ᴅ2 Gracias por preguntar. Cambiar el tamaño de una imagen a un tamaño fijo a través de Automator está cubierto en varios tutoriales en la web y no es difícil. Estaba más pensando en cambiar el tamaño de forma variable para aproximar un tamaño de archivo específico (por ejemplo, optimizar el tamaño al tamaño de archivo deseado).

Respuestas (2)

Estoy un poco confundido con el enfoque sobre cómo comprimir correctamente las imágenes con las que desea trabajar. Como se mencionó, hay sipsun ejemplo de trabajo basado en extraer un directorio de imágenes y recorrer la lista con un cambio de tamaño si el ancho no es 800px:

property theWidth : 800

tell application "Finder"
    try
        ## Choose directory
        set imageDir to choose folder with prompt "Please select directory."

        ## Get list of items in diretory
        set the imageList to list folder imageDir without invisibles

        ## Step through images
        repeat with theImage in imageList

            ## Turn path to posix path
            set imagePos to quoted form of POSIX path of ((imageDir as text) & contents of theImage)

            ## Get image width
            set imgWidth to (do shell script "sips -g pixelWidth " & " " & imagePos & " " & "| tail -n1 | cut -d' ' -f4") as integer

            ## if not equal to set variable width resize
            if imgWidth ≠ theWidth then do shell script "sips --resampleWidth " & theWidth & " " & imagePos

        end repeat
    on error error_message
        display dialog error_message
    end try

Eso es solo un ejemplo de lo que puedes hacer con el ancho. Como se menciona en el comentario, puede verificar cuál es más largo el ancho o el alto y cambiar el tamaño desde allí. Si lo hace man sipsen la Terminal, puede extraer todo tipo de información. El código anterior usa cola y corte para recortar el retorno. El cambio de tamaño se hace con --resampleWidth. Puede volver a muestrear en función de la altura con --resampleHeight.

En cuanto al aspecto de compresión, si se trata de PNG, puede usar Optipng . Si desea algo que pueda ejecutar con PNG y JPG, puede usar Trimage . AppleScript/Automater también se puede programar para usar una utilidad de compresión. Solo necesitaría llamar desde binun cheque si existe una compresión:

try
    set checkBin to "(ls usr/local/bin/optipng >> /dev/null 2>&1 && echo yes) || echo no"
    return do shell script checkBin
on error error_message
    return error_message
end try

Lo anterior está comprobando OptiPNG. Si desea verificar si se instaló algo con HomeBrew, puede usar un comando similar en /usr/local/Cellar.

Todo lo mencionado anteriormente podría hacerse completamente en un Shell Script. Solo depende de lo que quieras y de cómo quieras ejecutar el código.

Considere usar quoted form ofcuando trate con rutas de archivos. Esto evitará problemas con espacios, nombres de archivo que contengan comillas y caracteres de escape.

Sí, con un script de shell

Puede escribir un script de shell para hacer lo que quiera y envolverlo dentro de un flujo de trabajo de Automator.

Solo en Automator, esto no es posible. Automator carece de la lógica de bifurcación necesaria para determinar cuándo detenerse.

No conozco ningún atajo, aparte de cambiar el tamaño y comprimir imágenes de diferentes tamaños hasta que cumplan su objetivo.

Esto se puede hacer con las herramientas integradas que se incluyen con macOS, como sipscambiar el tamaño de la imagen y bashprogramar la lógica.

Consulte Reducir el tamaño del archivo de imagen a un tamaño determinado para obtener una pregunta estrechamente relacionada.