Automator: è possibile ridimensionare un'immagine a una dimensione massima del file?

1

Ho cercato un metodo Automator, in base al quale un file immagine deve essere ridimensionato (altezza e larghezza ridotte) a una dimensione di file specifica (in byte) o una prossimità vicina al limite inferiore della dimensione di quel file.

Sarebbe un ottimo uso per le azioni rapide di MacOS Mojave, poiché molti caricamenti di siti Web non accettano immagini di iPhone a grandezza naturale, per esempio.

La mia intuizione è che questo è un problema abbastanza difficile da risolvere per Automator anche con l'aiuto di bash scripting, ecc. Di solito, anche le applicazioni come Adobe Photoshop non sono ottime per predire la dimensione finale del file dopo che un file è stato compresso in JPG o PNG, ecc. Forse potrebbe ridurre in modo incrementale le dimensioni dell'immagine fino a quando non è inferiore alla dimensione massima del file. Il più semplice sarebbe se fosse un'utilità di script per questo.

Ho quindi pensato di chiedere se:

  • a) È fattibile e
  • b) Come si farebbe?
posta Winterflags 26.11.2018 - 11:31
fonte

2 risposte

2

Sono un po 'confuso dall'approccio su come comprimere correttamente le immagini con cui vuoi lavorare. Come accennato, c'è sips , un esempio di lavoro basato sul tirare una directory di immagini e passare attraverso l'elenco con un ridimensionamento se la larghezza non è 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

Questo è solo un esempio di cosa puoi fare con la larghezza. Come accennato nel commento è possibile controllare per vedere quale è più lunga la larghezza o l'altezza e ridimensionare da lì. Se fai man sips nel Terminale puoi estrarre tutti i tipi di informazioni. Il codice precedente utilizza la coda e taglia per tagliare il ritorno. Il ridimensionamento viene eseguito con --resampleWidth . Puoi ricampionare in base all'altezza con --resampleHeight .

Per quanto riguarda l'aspetto della compressione, se questi sono PNG puoi usare Optipng . Se desideri qualcosa che puoi utilizzare con PNG e JPG, puoi utilizzare Trimage . AppleScript / Automater può anche essere utilizzato per script in un'utilità di compressione. Dovresti solo chiamare da bin un controllo se esiste una compressione:

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

Quanto sopra è il controllo di OptiPNG. Se vuoi controllare se qualcosa è stato installato con HomeBrew potresti usare un comando simile su /usr/local/Cellar .

Tutto quanto sopra menzionato potrebbe essere completamente fatto in uno Shell Script. Dipende solo da cosa vuoi e come vuoi eseguire il codice.

    
risposta data 26.11.2018 - 14:35
fonte
1

Sì, con uno script di shell

Potresti scrivere uno script di shell per fare ciò che vuoi e avvolgerlo all'interno di un flusso di lavoro di Automator.

Solo in Automator, questo non è possibile. Automator non ha la logica di branching richiesta per determinare quando fermarsi.

Non sono a conoscenza di scorciatoie, oltre a ridimensionare e comprimere immagini di dimensioni diverse finché non raggiungono il tuo obiettivo.

Questo può essere fatto con strumenti integrati inclusi con macOS, come sips per ridimensionare l'immagine e bash per lo scripting della logica.

Vedi Riduci le dimensioni del file immagine a determinate dimensioni per una domanda strettamente correlata.

    
risposta data 26.11.2018 - 14:02
fonte

Leggi altre domande sui tag