convert
grava em um arquivo de imagem diferente. Para substituir arquivos de imagem originais, use mogrify
.
Arquivo único:
mogrify -resize 50% Pic.jpg
Todos os arquivos .jpg
:
mogrify -resize 50% *.jpg
este é o meu primeiro post, então espero que você seja gentil o suficiente para me perdoar se eu cometer erros de formatação ou algo assim. Esta é uma pergunta que eu tenho há bastante tempo e, enquanto procuro por respostas, tenho mais perguntas surgindo. Eu estava tentando encontrar uma maneira de compactar imagens em uma pasta usando convert
em um comando.
Primeiro eu simplesmente tentei:
convert * -resize 50% Pic.jpg
No entanto, isso retornou as imagens compactadas chamadas Pic-0.jpg, Pic-1.jpg, etc. (Eu também tentei $(find ".JPG")
em vez de *
, mas isso é expandido para o mesmo. A fim de ter a formatação Eu queria que eu tentasse:
convert * -resize 50% Pic_lorez_{1..3}.jpg
Mas isso pareceu levar o Pic_lorez_2.jpg e o Pic3_lorez_3.jpg como arquivos de entrada, não arquivos de saída. Então, seguindo o conselho de um amigo, eu tentei:
find . -name "*.JPG" -exec convert {} -resize 50% {} \;
Isso comprime todos os arquivos com o mesmo nome, mas não permite colocar o nome que eu quero para esses arquivos (por exemplo, Pic_lorez_ {1,2,3,4,5, .. 100} .jpg). / p>
Os xargs tornariam isso possível? Algo ao longo das linhas de:
find . -name "*.JPG" | xargs convert ???
Não consegui descobrir a sintaxe adequada com xargs. Eu finalmente tentei um canal direto de conversão, mas convertido não parece ser capaz de trabalhar dessa maneira.
convert
grava em um arquivo de imagem diferente. Para substituir arquivos de imagem originais, use mogrify
.
Arquivo único:
mogrify -resize 50% Pic.jpg
Todos os arquivos .jpg
:
mogrify -resize 50% *.jpg
Você poderia usar este forro:
for img in $(ls *.jpg); do convert $img -resize 50% $img;done;
Tente isto:
SIZE=50 ; find -iname "*.jpg" | while read line ; do NF="$(echo $line | sed -r "s/(\.jpg|\.JPG)/_$SIZE/")" ; convert "$line" -resize $SIZE% "$NF" ; done
Isso não é apenas uma linha. Aqui está uma versão recuada:
SIZE=50
find -iname "*.jpg" | while read line ; do
NF="$(echo $line | sed -r "s/(\.jpg|\.JPG)/_$SIZE/")"
convert "$line" -resize $SIZE% "$NF"
done
Você pode ajustar o valor de SIZE
para qualquer outro tamanho, em porcentagem.
Por favor note que após a primeira execução, os arquivos já convertidos serão convertidos como arquivos de entrada. Você pode ignorar arquivos com o nome _NUMBER.jpg
modificando o parâmetro find ou também armazenar os arquivos convertidos em outro lugar.
Este script fará isso por você!
Salve em um arquivo e torne o arquivo executável com: chmod +x filename
.
#!/bin/bash SAVEIFS=$IFS IFS=$(echo -en "\n\b") C=0; DES="./"; # Destination directory for img in 'find . -maxdepth 1 -mindepth 1 -iname '*.jpg' -type f' do (( ++C )); NF="${DES}Pic_lorez_${C}.jpg"; # New file name convert $img -resize 50% $NF; done # restore $IFS IFS=$SAVEIFS
./
para o diretório em que você deseja colocar as imagens convertidas, por padrão, ele as colocará no diretório atual. Pic_lorez_
para qualquer nome que você queira dar aos arquivos convertidos. Use o Paralelo GNU:
find -iname "*.jpg" | parallel convert {} -resize 50% {.}_50pct.jpg
e receba a vantagem adicional de ter todos os núcleos da CPU funcionando em paralelo e, assim, acelerar o processo.
10 segundos de instalação:
wget pi.dk/3 -qO - | sh -x
Assista aos vídeos de introdução para saber mais: link