AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1656780
Accepted
Daniel R. Collins
Daniel R. Collins
Asked: 2021-06-15 18:26:25 +0800 CST2021-06-15 18:26:25 +0800 CST 2021-06-15 18:26:25 +0800 CST

Incorporar imagem em tela fixa com Image Magick

  • 772

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:

insira a descrição da imagem aqui insira a descrição da imagem aqui

E a fonte alta Image2 gera este resultado:

insira a descrição da imagem aqui insira a descrição da imagem aqui

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.

imagemagick
  • 2 2 respostas
  • 202 Views

2 respostas

  • Voted
  1. Best Answer
    Daniel R. Collins
    2021-07-04T12:57:41+08:002021-07-04T12:57:41+08:00

    Tendo mais tempo para trabalhar nisso, aqui está um arquivo em lote que parece satisfazer meus requisitos (substituindo constantes por tamanhos de quadro apropriados):

    REM Fit image for "4 frames"
    
    set /a fwidth = 870
    set /a fheight = 475
    
    setLocal enableDelayedExpansion
    
    for %%a in (*.jpg) do (
      magick convert -size %fwidth%x%fheight% xc:black "%%a" -geometry %fwidth%x%fheight% -gravity center -composite "%%~na-fit%%~xa"
    )
    
    • 1
  2. Dave
    2022-01-21T14:14:16+08:002022-01-21T14:14:16+08:00

    Solução baseada em Linux (bash) que redimensiona as imagens no local:

    #!/bin/bash
    
    SIZE="400x300"
    
    # create the background; could be careful to make sure that background.jpg doesn't already exist
    convert -size $SIZE xc:black background.jpg  
    
    for i in `ls *.jpg`
    do
    convert -resize $SIZE $i - | convert -composite -gravity center background.jpg - $i
    done
    

    Características notáveis:

    • Na minha distribuição linux convertestá o comando ImageMagik,
    • Ele grava a imagem de fundo preto no disco (desvantagem),
    • mas canaliza a imagem redimensionada para a função composta.
    • 1

relate perguntas

  • i3wm: script de captura de tela falha se vinculado à chave

  • Imagemagick lote convertido para webp, sem fazer uma animação

  • Como posso usar o ImageMagick para redimensionar em lote e usar -extent com transparência?

  • imagem embutida ou composta no canto da imagem maior, GraphicsMagic ou ImageMagick

  • Usando xargs com pdftk

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve