JPEG de corte sem perdas para blocos inteiros de 8x8

0

Como as imagens JPEG são compactadas em blocos de 8x8 pixels, se um JPEG tiver uma largura ou altura que não seja divisível por 8, é tecnicamente possível remover os 1-7 pixels da borda externa losslessly ?

(Ou para recortar bordas externas de qualquer tamanho, contanto que os blocos 8x8 internos estejam intactos.)

    
por forthrin 05.04.2018 / 20:56

2 respostas

1

Com base na página de manual jpegtran (e Wikipedia ), o canto superior esquerdo de uma imagem JPEG deve estar no canto de um bloco 8x8, então é possível cortar linhas / colunas de pixel único a partir do bottom e as bordas right , mas não da esquerda ou da top . Blocos 8x8 completos podem, é claro, ser cortados da esquerda e da parte superior também.

A página man menciona isso sob o comando -crop :

Like the rotate and flip transforms, lossless crop is restricted by the current JPEG format; the upper left corner of the selected region must fall on an iMCU boundary. If it doesn't, then it is silently moved up and/or left to the nearest iMCU boundary (the lower right corner is unchanged.)

    
por 05.04.2018 / 21:16
0

As bordas superior e esquerda de uma imagem jpeg estão sempre em um limite de bloco. As bordas inferior e direita podem ou não ser.

Assim, você pode escolher livremente as bordas inferior e direita da imagem recortada sem perdas, mas as bordas superior e esquerda da imagem recortada devem ser um número inteiro múltiplo do tamanho de bloco efetivo das bordas superior e esquerda originais.

O tamanho efetivo do bloco de imagens JPEG varia. O DCT funciona em blocos 8x8, mas alguns JPEGs são subamostrados em croma, tornando o bloco efetivo tamanho 8x16 ou 16x16.

    
por 05.04.2018 / 21:20