É possível converter JPEG para um formato sem perdas e convertê-lo de volta sem perder qualidade?

2

Digamos que eu tenha uma versão sem perdas de uma imagem que foi previamente compactada no formato JPEG (como se você abrisse uma imagem JPEG em mspaint e a salvasse como BMP, sei que alguns metadados seriam perdidos nesse processo, mas isso não é minha preocupação)

Gostaria de saber se é possível e como convertê-lo de volta ao formato JPEG sem perder a qualidade da imagem, o que significa que cada pixel é exatamente o mesmo?

EDIT: Compreendo perfeitamente que a conversão de uma imagem JPEG para um formato sem perdas não me dará nenhuma qualidade extra. Estou perguntando isso porque: Eu tenho um arquivo PNG extraído de um arquivo SWF. Originalmente (no arquivo SWF) o objeto era imagem JPEG + alpha channal, cujo tamanho do arquivo é muito menor em comparação ao arquivo PNG que eu tenho. Eu quero o formato original (JPEG + canal alfa), mas eu não tenho mais nenhuma cópia do arquivo SWF original (e eu não consegui encontrar um on-line também), então não posso refazer o processo de extração.

    
por RadarNyan 22.06.2017 / 10:15

4 respostas

3

O JPEG é um formato com perdas e não há como evitar isso. Mesmo com a qualidade de compressão de 100, a taxa de compressão ainda é de 2,6: 1 ( Wikipedia JPEG ).

Houve algumas variantes propostas para JPEG sem perdas , como o JPEG 2000, mas elas não captaram e seu apoio é muito pobre.

Seria melhor converter para um formato sem perdas, como PNG , que ainda comprime mas sem perda.

    
por 22.06.2017 / 10:47
3

O que você está perguntando, essencialmente, é se o processo de decodificação de uma imagem JPEG pode ser revertido. Esta é uma intenção muito diferente da de um codificador JPEG convencional, e não tenho conhecimento de nenhum software que faça isso. Matematicamente isso é possível * desde que a imagem não tenha uma transformação ou outra modificação aplicada depois que foi codificada, mas programaticamente quão difícil poderia ser?

O primeiro problema é o espaço de cores - o JPEG usa subamostragem (a amostra de cor sobre um grupo de pixels) yCbCr, enquanto um bitmap é RGB. Perdas inevitáveis convertendo entre esses espaços de cor (e também em qualquer ajuste de gama) introduzem ruído. O segundo problema a ser resolvido é o JPEG registra os dados da imagem como macroblocos (sub-imagens NxN), que devem ser inferidas da imagem de saída do decodificador. Uma explicação mais detalhada do formato JPEG e do processo de codificação pode ser encontrada aqui link

'un-decoding' a JPEG:

Para criar uma aproximação dos dados JPEG originais, precisamos encontrar a subamostragem, o tamanho e o alinhamento dos macroblocos e os coeficientes Discrete Cosine Transform (DCT) que foram usados para codificá-los. O resto é idêntico a um processo normal de codificação JPEG. Uma implementação ingênua que vem à mente é "adivinhar e verificar": suponha que algumas implementações comuns de JPEG foram usadas para criar a imagem e tente aplicá-las até encontrar uma que tenha resultados semelhantes ao JPEG do DCT (geralmente zeros para altas frequências).

Depois disso, ajuste os coeficientes para um erro mínimo comparado ao original (ou seja, bitmap da imagem compactada). Este processo ainda irá resultar em troca entre erro e tamanho do arquivo, mas deve chegar perto o suficiente para fins práticos.

Source : Verificação anterior de verificação de codecs de vídeo DNx e ProRes, que aplicam codificação tipo JPEG a cada quadro individual (o software que reverte os quadros decodificados teria sido um projeto paralelo muito interessante e potencialmente útil). / p>

* A set of input data exists that will produce identical output when passed through the original JPEG decoder, however it is highly improbable for any reconstruction to be a byte-wise copy (ignoring metadata) of the original file because information was lost during the decoding process.

    
por 22.06.2017 / 17:53
0

A informação quase certamente foi perdida convertendo para um JPEG. Converter esse arquivo em um BMP preservará as informações armazenadas no JPEG, mas converter o BMP novamente em JPEG provavelmente fará com que você perca ainda mais informações

    
por 22.06.2017 / 13:49
0

Se você abrir uma imagem JPEG com qualquer editor e salvá-la como BMP, não estará obtendo mais qualidade do que a que já está disponível no arquivo .jpg . Isso seria como converter um arquivo mp3 de baixa taxa de bits (por exemplo, 128kbps) para um formato muito melhor como flac , esperando que de alguma forma a qualidade fosse magicamente restaurada. Não vai.

As informações foram perdidas quando você salvou a imagem pela primeira vez em jpg, como harrymc disse; não há como recuperar essa informação desse arquivo jpg.

A compactação com perdas é "destrutiva" ou também conhecida como "irreversível". Consulte o link .

    
por 22.06.2017 / 10:54