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 / 1587740
Accepted
Giacomo1968
Giacomo1968
Asked: 2020-09-23 17:03:53 +0800 CST2020-09-23 17:03:53 +0800 CST 2020-09-23 17:03:53 +0800 CST

Como posso converter uma imagem com dimensões ímpares em uma imagem HEIC no ImageMagick 7 usando libheif 1.8.0?

  • 772

Versão curta : as imagens HEIC precisam ter dimensões pares. Nas versões anteriores do ImageMagick instalado pelo Homebrew, libheif 1.7.0 usava um truque para arredondar as dimensões da imagem para valores pares para permitir que imagens com dimensões ímpares fossem convertidas.

Agora, o libheif 1.8.0 abandonou esse truque e gera imagens em casos em que o macOS aparentemente não pode abrir, apesar de serem arquivos HEIC válidos.

Enquanto a Apple resolve o que precisa ser feito para corrigir isso, o que pode ser feito nesse ínterim para permitir a conversão limpa de tais imagens de uma forma que permita que o macOS as abra?


Versão mais longa : Tenho usado o ImageMagick para converter pilhas de imagens JPEG de alta resolução para o formato HEIC - para economizar espaço no arquivo e tempos de transferência de dados, mantendo a qualidade - ligado e desligado desde julho de 2020. Estou usando o macOS Catalina 10.5.6 (19G2021) e o ImageMagick foi instalado e atualizado via Homebrew.

No mês passado, algo estranho aconteceu durante a conversão de um pequeno diretório cheio de imagens: imagens aparentemente arbitrárias seriam convertidas em HEIC, mas não consegui abri-las no aplicativo “Preview” ou mesmo no Pixelmator no macOS. Nenhum ícone de visualização foi gerado também. Para tornar as coisas mais estranhas, se eu pegasse aquela imagem HEIC e a convertesse de volta em JPEG, a conversão funcionaria. Portanto, o HEIC era válido de alguma forma, mas não de uma forma que a API nativa do macOS pudesse manipular.

De acordo com este comentário sobre um relatório de problema no repositório ImageMagick , descobriu-se que libheif - a biblioteca que lida com coisas HEIC no ImageMagick - foi recentemente atualizada para 1.8.0 e essa nova versão lida com a conversão de imagens com dimensões ímpares de maneira diferente das versões de libheif 1.7.0 e anteriores. No caso de imagens com dimensões ímpares, ele cria imagens HEIC que usam uma claptransformação de corte (abertura limpa) e o macOS aparentemente não tem ideia de como lidar com isso. E verificando minha pilha de imagens que não podem ser abertas, todas elas têm pelo menos uma dimensão (largura ou altura) em um valor de número ímpar.

Portanto, embora isso seja claramente um problema com o macOS e como ele lida nativamente com arquivos HEIC, o que posso fazer agora para voltar à conversão em massa de imagens que podem ser visualizadas no macOS? O downgrade para libheif 1.7.0 parece confuso e um pouco regressivo.

Se você quiser testar isso por si mesmo, tente este comando usando esta imagem de teste na Wikimedia que tem 3111 de largura por 3333 de altura; apenas renomeie a imagem test.jpegpara isso:

convert test.jpg test.heic

Ou tente fazer o mesmo usando o utilitário libheif heif-encassim:

heif-enc test.jpg -o test.heic

Em ambos os casos, o aplicativo macOS “Preview” – e outros aplicativos – não pode abrir o test.heicarquivo gerado. Mas claramente pode ser convertido de volta para um JPEG como este na linha de comando usando o ImageMagick:

convert test.heic test.jpg
imagemagick conversion
  • 1 1 respostas
  • 437 Views

1 respostas

  • Voted
  1. Best Answer
    Giacomo1968
    2020-09-23T17:16:32+08:002020-09-23T17:16:32+08:00

    Faça com que o ImageMagick “arredonde” as dimensões ímpares para o próximo valor par durante o processo de conversão.

    Não posso confiar na Apple para atualizar/corrigir a API do macOS para lidar com essas clapimagens tão cedo, então minha solução agora é usar o próprio ImageMagick para “arredondar” dimensões ímpares para a próxima dimensão par de pixels e depois converter essa imagem para HEIC.

    A solução vem desta resposta do StackOverflow que usa a opção do ImageMagick -extentcom uma chamada aninhada para verificar o tamanho da imagem da seguinte -formatforma:

    convert source.jpg -background white -extent  $(convert source.jpg -format '%[fx:2*int((w+1)/2)]x%[fx:2*int((h+1)/2)]!' info:) destination.heic
    

    A chamada aninhada convertproduziria algo assim com base nesta imagem de teste na Wikimedia que tem uma largura de 3111 por 3333 de altura:

    3112x3334!
    

    Sim, está adicionando um pixel à largura e altura, mas para muitos propósitos isso é insignificante. É uma solução alternativa que funciona, especialmente para imagens de alta resolução.

    E aqui está o script Bash completo que uso para lidar com essas conversões em massa hoje em dia:

    find -E 'Desktop/Pics' -type f -iregex '.*\.(JPG|JPEG|PNG|TIF|TIFF)$' |\
      while read FULL_IMAGE_PATH
      do
        PATH_SANS_EXTENSION="${FULL_IMAGE_PATH%.*}"
        convert "${FULL_IMAGE_PATH}" -background white -extent  $(convert "${FULL_IMAGE_PATH}" -format '%[fx:2*int((w+1)/2)]x%[fx:2*int((h+1)/2)]!' info:) "${PATH_SANS_EXTENSION}".heic
        exiftool -overwrite_original_in_place -tagsFromFile "${FULL_IMAGE_PATH}" "${PATH_SANS_EXTENSION}".heic
      done
    

    libheif 1.9.0 agora tem uma nova opção integrada para cortar dimensões ímpares em um pixel para tornar as dimensões da imagem um número par.

    De acordo com este comentário em um tópico de discussão para libheif , a versão 1.9.0 de libheif agora tem uma opção -E/ --even-sizeque aborda esse problema.

    Depois de atualizar minha instalação Homebrew local de libheif para a versão, pude testar isso. Quando executei este comando básico sem a -Eopção:

    heif-enc source.jpeg -o destination.heic
    

    Vejo este aviso útil:

    Aviso: imagens HEIF com largura ou altura ímpares não podem ser exibidas por muitos programas no macOS (testado até Catalina 10.15.6). Até que o macOS seja corrigido ou tenhamos uma solução alternativa, é recomendável usar a opção -E para tornar o tamanho da imagem um número par.

    E a imagem resultante é exatamente como antes; válido, mas não pode ser aberto no macOS.

    Mas se eu executar o mesmo comando exato com a -Eopção como esta:

    heif-enc -E source.jpeg -o destination.heic
    

    O destination.heicé válido e pode ser aberto no macOS!

    Sabendo que posso ajustar meu próprio script Bash — que usa ImageMagick — para usar heif-incdiretamente assim:

    find -E 'Desktop/Pics' -type f -iregex '.*\.(JPG|JPEG|PNG|TIF|TIFF)$' |\
      while read FULL_IMAGE_PATH
      do
        PATH_SANS_EXTENSION="${FULL_IMAGE_PATH%.*}"
        heif-enc -E "${FULL_IMAGE_PATH}" -o "${PATH_SANS_EXTENSION}".heic
        exiftool -overwrite_original_in_place -tagsFromFile "${FULL_IMAGE_PATH}" "${PATH_SANS_EXTENSION}".heic
      done
    

    Observe que a -Eopção reduz a imagem em um pixel para uniformizar as dimensões, enquanto o comando ImageMagick que usa essa combinação -extent/ -formatadiciona um pixel extra para uniformizar as dimensões. Pode não significar muito para alguns, mas apenas algo para se ter em mente ao escolher qual método usar.

    • 2

relate perguntas

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

  • Por que um utilitário projetado para gerenciamento de arquivos funcionaria fora da ordem alfabética?

  • Como processar imagens em lote para dividi-las e remontá-las verticalmente?

  • Não é possível conectar um conversor TTL para USB a um telefone

  • 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
    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
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +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