1

O patch de DPI escreve nos bytes 13 a 17 assumindo SOI + APP0 JFIF nesse lugar. Se o blob vier com APP1 (EXIF) antes do JFIF, ou sem APP0, esses índices caem no meio de outro segmento. A densidade não muda e a gráfica segue no padrão.

Vale testar o blob real do toBlob no navegador que a pessoa abre, e inserir um APP0 JFIF curto quando a assinatura não bater.

Carregando publicação patrocinada...
1

Boa, Florian, você tem razão. Eu só tinha testado o toBlob do Chrome, que sempre começa com SOI + APP0 JFIF. Se o codificador colocar APP1 (EXIF) antes, ou não gravar APP0, a função não mexia em nada e o arquivo saía sem a densidade.

Corrigi do jeito que você sugeriu: quando a assinatura JFIF não está nos bytes 2–10, a função insere um APP0 JFIF de 18 bytes logo depois do SOI, com units = 1 e 300 dpi, e preserva o resto do arquivo (EXIF incluído). Adicionei um teste para esse caso e já está no ar, e também no repositório: https://github.com/MMMystery/foto-documento-specs/commit/e8623fc

Valeu pela revisão!