Como encontrar a qualidade JPG?


16

Quando salvo um arquivo JPG com o GIMP, posso ajustar a qualidade em que o salvo, de 0 a 100 (uso 89). Parece que eu usei um aplicativo para ver qual era esse número no arquivo salvo, mas se o fiz não consegui descobrir o que era. Alguma sugestão sobre o que usar?


2
Apenas para garantir que ele seja conhecido: a configuração de qualidade de diferentes aplicativos não é comparável, em geral: faqs.org/faqs/jpeg-faq/part1/section-5.html . No entanto, o GIMP e o ImageMagick devem usar a escala de qualidade IJG.
Michael Schumacher

Respostas:


22

Depois de salvo, você não poderá mais dizer a qualidade.

(Definir a qualidade ao salvar apenas informa ao software quanto perda você considera aceitável, mas uma vez salva: o que está perdido é perdido. Você precisaria de um humano para dizer se algo parece bom.)

Hmmm, acho que estava errado. Eu ainda acho que o exposto acima está correto, mas o ImageMagick 's identifyme prova errado?

identificar -verbose myimage.jpg

Imagem: myimage.jpg
  Formato: JPEG (formato JFIF do Joint Photographic Experts Group)
  Classe: DirectClass
  Geometria: 358x240 + 0 + 0
  Resolução: 300x300
  [...]
  Compressão: JPEG
  Qualidade: 90
  Orientação: Indefinida
  [...]

Não sei como a imagem no meu teste foi salva, mas não possui dados EXIF. A qualidade ainda pode ser armazenada na imagem?


Você não pode experimentar a conversão para diferentes qualidades? Acho difícil de acreditar, a menos que o ImageMagick armazene alguns dados privados no jpg (portanto, isso pode não funcionar com outros pacotes).
harrymc 29/10/09

Interessante. Vou esperar para ver como isso acontece.
28909 Nathaniel

11
+1 Sim imagemagick funciona. Posso alterar repetidamente a qualidade do JPEG e usar o Identificar para ver a alteração. Isso funciona se eu usar o convert (outra imagem image magia) ou outra ferramenta como o MS Photo Editor.
31810 DaveParillo

11
ImageMagick está fazendo algo diferente. Ele fornece uma estimativa, em vez de ler o que o software original fez. Sua resposta original, agora riscada, é realmente mais correta. Veja a resposta de @ sleske.
mattdm

26

Para adicionar à resposta de Arjan:

O ImageMagick's identifyparece realmente olhar dentro da imagem JPEG para adivinhar a configuração de qualidade usada para codificá-la.

O código fonte do ImageMagick (torcida pelo software livre :-)) contém as linhas :

/*
  Determine the JPEG compression quality from the quantization tables.
*/
sum=0;
for (i=0; i < NUM_QUANT_TBLS; i++)
{
  if (jpeg_info.quant_tbl_ptrs[i] != NULL)
    for (j=0; j < DCTSIZE2; j++)
      sum+=jpeg_info.quant_tbl_ptrs[i]->quantval[j];

( coders/jpeg.c, linha 843ff. na minha versão recente do código-fonte do ImageMagick).

Não sei o suficiente sobre JPEG para realmente entender, mas parece fazer algo como descrito neste artigo:

Determine o fator de qualidade JPEG usando o Visual C # .NET (link morto a partir de janeiro de 2018; cópia em archive.org a partir de 2015 )

Portanto, sim, é identifypossível determinar a configuração de qualidade de um JPEG apenas a partir do arquivo compactado (embora o resultado nem sempre seja totalmente preciso).


11
Uau. Muito gentil da sua parte verificar o código fonte. Legal.
Nathaniel

@ Nathaniel, você pode selecionar esta resposta como a aceita, em vez da minha? Obrigado! (Eu não posso excluir a minha enquanto ele é aceito.)
Arjan

Ele está pesquisando a tabela de quantização JPEG que melhor explica a aparência do fluxo de bits compactado.
jbarlow

5

Como Arjan mencionou identify -verbose myimage.jpg, fará isso. Como o imagemagick é uma ferramenta da CLI, pode ser útil para scripts. A abordagem identify -verbose myimage.jpg | grep ...é muito lenta. Eu recomendo usar IM como este

identify -format '%Q' myimage.jpg

É massivamente mais rápido.


2

O JPEGsnoop é uma boa alternativa ao ImageMagick's identify. O download é bem pequeno e está disponível em formato portátil.

Depois de processar um jpg, você encontrará o "Fator de qualidade aproximado" sob o marcador DQT.


1

Com a biblioteca ImageMagick ++ , é fácil:

Image magick_image( pathname );
size_t compressionFactor = magick_image.quality(); // 0..100

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.