Como posso usar converter para redimensionar imagens para uma largura específica, mantendo a proporção para a altura? [duplicado]

0

Eu tenho um arquivo com o caminho completo para uma imagem em cada linha, todos são jpg. Eu quero redimensionar cada imagem / linha no arquivo para 1024px de largura, mantendo a proporção para a altura. Eu simplesmente quero substituir o arquivo original.

A principal coisa que estou tendo problema é, eu quero apenas SHRINK. Eu não quero ampliar imagens menores que 1024px de largura até 1024px de largura.

Aqui está o script bash com o qual estou trabalhando e só preciso de ajuda com a linha de conversão, já que não tenho experiência com o imagemagick.

#!/bin/bash

while read p; do
  convert $p
done < listofimages
    
por Sajan Parikh 26.05.2015 / 18:43

2 respostas

2

Isso deve ser feito:

#!/bin/bash

while IFS= read -r jpg
do
    convert "$jpg""[1024x>]" "$jpg"
done < "$1"

Salve o script acima como ~/bin/shrink.sh , torne-o executável ( chmod a+x ~/bin/shrink.sh ) e execute-o, fornecendo a lista de arquivos como um argumento:

shrink.sh /path/to/list

Isto é basicamente o mesmo que o duplicado proposto, adaptado para i) corresponder ao tamanho desejado e ii) ler os nomes de um arquivo. O [1024x>] garante que apenas as imagens cujo tamanho seja maior que 1024 pixels sejam redimensionadas.

    
por terdon 26.05.2015 / 19:58
-1

Tente algo assim:

#!/bin/bash

for p in "$@"
do
    w='identify "$p" | cut -f 3 -d ' ' | sed 's/x.*//''
    if [ $w -gt 1024 ]
    then
        convert -scale 1024x1024 "$p" "$p"
    fi
done

Explicação:

  • O comando "identify" produz todos os tipos de informações sobre a imagem. O terceiro campo é o tamanho, no formato "1024x968".
  • O comando "cut" captura o terceiro campo, delimitado por espaços.
  • O comando "sed" apaga a altura, deixando a largura.
  • O "if" processa apenas imagens cuja largura é maior que 1024.
  • Finalmente, convertida redimensiona a imagem. Mantém automaticamente a proporção.

Se você tiver nomes de arquivos em um arquivo e nomear o script "reaspect" acima, use:

% reaspect 'cat file'
    
por Scott Deerwester 26.05.2015 / 19:23