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 clap
transformaçã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.jpeg
para isso:
convert test.jpg test.heic
Ou tente fazer o mesmo usando o utilitário libheif heif-enc
assim:
heif-enc test.jpg -o test.heic
Em ambos os casos, o aplicativo macOS “Preview” – e outros aplicativos – não pode abrir o test.heic
arquivo 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
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
clap
imagens 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
-extent
com uma chamada aninhada para verificar o tamanho da imagem da seguinte-format
forma:A chamada aninhada
convert
produziria algo assim com base nesta imagem de teste na Wikimedia que tem uma largura de 3111 por 3333 de altura: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:
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-size
que 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
-E
opção:Vejo este aviso útil:
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
-E
opção como esta: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-inc
diretamente assim:Observe que a
-E
opção reduz a imagem em um pixel para uniformizar as dimensões, enquanto o comando ImageMagick que usa essa combinação-extent
/-format
adiciona 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.