Estou procurando um comando no Image Magick para pegar uma imagem arbitrária (de qualquer proporção) e incorporá-la em uma imagem de tamanho fixo, aumentando/encolhendo a imagem de origem conforme necessário para caber.
Por exemplo, a fonte ampla Image1 gera o seguinte resultado:
E a fonte alta Image2 gera este resultado:
Em cada caso, a imagem final tem um tamanho fixo, digamos, 400 x 300 pixels.
(O comando desejado será usado posteriormente em lote para processar uma série de arquivos de várias dimensões iniciais diferentes.)
Compare com esta questão relacionada : A questão atual difere na medida em que deseja um tamanho de imagem final fixo e um possível redimensionamento da imagem de origem (em vez de manter a imagem de origem inalterada e estabelecer uma determinada proporção no final).
Eu olhei para cerca de meia dúzia de sites de tutoriais neste momento, mas não encontrei nenhum que parecesse abordar esse caso de uso específico. Os seguintes são exemplos do que eu tentei até agora.
Primeiro, aqui está uma modificação de um arquivo de lote anterior para usar variáveis para redimensionamento específico, mas ainda resulta em saída proporcional e não em um tamanho de saída fixo:
REM Fit image for "2 frames + large feature"
set /a fwidth = 870
set /a fheight = 980
setLocal enableDelayedExpansion
for %%a in (*.jpg) do (
set outfile=%%~na-fit
magick "%%a" -set option:wd "%%[fx:(%fwidth%/%fheight%)>(w/h)?(%fwidth%/%fheight%*h):w]" -set option:ht "%%[fx:(%fwidth%/%fheight%)>(w/h)?h:(w/(%fwidth%/%fheight%))]" -gravity center -background black -extent "%%[wd]x%%[ht]" "!outfile!%%~xa"
)
Segundo, uma tentativa de forçar um tamanho de saída específico, mas serve apenas para recortar uma parte da imagem original:
REM Fit image to wide format
REM For 5-frame show, 3:2 ratio
set /a fwidth = 300
set /a fheight = 200
SetLocal EnableDelayedExpansion
for %%a in (*.jpg) do (
set outfile=%%~na-fit
magick "%%a" -set option:wd "%fwidth%" -set option:ht "%fheight%" -gravity center -background black -extent "%%[wd]x%%[ht]" "!outfile!%%~xa"
)
Terceiro, uma tentativa de usar o operador "convert", inicialmente com um redimensionamento percentual fixo, que falha totalmente por um motivo que não consigo detectar:
REM Fit image to wide format
REM For 5-frame show, 3:2 ratio
setLocal enableDelayedExpansion
for %%a in (*.jpg) do (
set outfile=%%~na-fit
magick convert "%%a" -resize 25%% "!outfile!%%~xa"
}
Quarto, um ajuste ao anterior para um tamanho de saída fixo, mas em vez desse tamanho de saída reduz a imagem de origem para um subconjunto desse tamanho:
REM Shrink images to 25% via ImageMagick
REM E.g.: convert image.jpg -resize 25% image-small.jpg
SetLocal EnableDelayedExpansion
for %%a in (*.jpg) do (
set outfile=%%~na-shrunk
magick convert "%%a" -resize 300x200 -background black "!outfile!%%~xa"
)
Portanto, se alguém puder apontar o que está mais próximo de uma solução e corrigi-lo, isso seria apreciado.
Tendo mais tempo para trabalhar nisso, aqui está um arquivo em lote que parece satisfazer meus requisitos (substituindo constantes por tamanhos de quadro apropriados):
Solução baseada em Linux (bash) que redimensiona as imagens no local:
Características notáveis:
convert
está o comando ImageMagik,