Como converter todas as imagens em um diretório para jpg?

2

Eu tenho tantas imagens diferentes em um diretório com nomes sequenciais 1 2 3 4 ... Eu queria saber se era possível converter todos eles para jpg e redimensioná-los todos para 900x900 sem preservar a proporção.

O que eu tentei na primeira parte é:

$ mogrify -format jpg -- *

Mas quando faço isso, o uso da memória aumenta tão rapidamente e, em seguida, o processo é eliminado. O que tentei redimensionar é:

$ mogrify -resize 900x900 -- *
mogrify: insufficient image data in file '109.jpg' @ error/jpeg.c/ReadJPEGImage/1039.
mogrify: no decode delegate for this image format '' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format '' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format '' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format '' @ error/constitute.c/ReadImage/501.

Como eu disse, os nomes dos arquivos são números seqüenciais. Eu também tenho o seguinte:

$ file * | grep -Po "^\d*: *\K[^:,]*(?=,)" | sort | uniq
ASCII text
GIF image data
JPEG image data
PNG image data

Então, qual é o problema? Como posso consertar isso?

    
por yukashima huksay 05.02.2018 / 11:21

1 resposta

4

Eu recomendaria usar a ferramenta convert do ImageMagick:

convert input.png -resize 900x900 output.jpg

A opção -resize deve ser bastante óbvia e o formato do arquivo de saída é determinado automaticamente usando sua extensão de nome de arquivo.

Para executar isso em todos os arquivos no diretório atual, tente isto:

for inputfile in ./* ; do
    outputfile="${inputfile%.*}.jpg"
    convert "$inputfile" -resize 900x900 "$outputfile" &&
    [[ -e "$outputfile" && "$inputfile" != "$outputfile" ]] && rm "$inputfile"
done

Isso levará todos os arquivos do diretório atual (independentemente do tipo de arquivo) e, para cada arquivo de entrada, criará o respectivo nome de arquivo de saída removendo a extensão antiga e adicionando ".jpg". Em seguida, ele usa convert , conforme descrito acima, para redimensionar e converter a imagem, o que cria um novo arquivo e deixa o original como está. Se isso foi bem-sucedido ( && ), verifique se o arquivo de saída existe e se o nome do arquivo de entrada é diferente do nome do arquivo de saída (por exemplo, se um dos arquivos originais já era um jpg). Agora, se essas condições forem atendidas, presumimos que podemos excluir o arquivo de entrada.

    
por Byte Commander 05.02.2018 / 12:18