Riparare uno screenshot PNG danneggiato

Un PNG è il formato immagine più autoverificante che esista: ogni blocco al suo interno porta la propria somma di controllo CRC-32. Questa struttura fa sì che parte del danno che impedisce l'apertura del tuo screenshot abbia una correzione pulita e deterministica, mentre un'altra parte si è già portata via in silenzio le righe inferiori per sempre. Questo strumento legge i chunk e le somme di controllo in locale e ti dice qual è quale.

Il tuo file non lascia mai il tuo dispositivo — la riparazione avviene nel browser. 0 byte caricati.

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

Ripara ora

  1. Trascina il file
  2. La riparazione avviene in locale
  3. Scarica il risultato

Quando uno screenshot salvato come .png non si apre, il visualizzatore è di solito severo su qualcosa che il formato gli permette di verificare con esattezza. Foto di Windows dice "It looks like we don't support this file format" (sembra che non supportiamo questo formato) oppure "This file can't be opened" (impossibile aprire questo file); Anteprima di macOS dice che il file "potrebbe essere danneggiato o usare un formato che Anteprima non riconosce"; gli strumenti basati su libpng lanciano IDAT: CRC error, IHDR: CRC error o Not a PNG file. Trascina il file qui sopra e lo strumento lo percorre chunk per chunk nel tuo browser — verificando ogni CRC, controllando la firma di 8 byte e la geometria di IHDR, e decodificando il flusso DEFLATE fin dove sopravvive — e poi riscrive un file valido attorno a ciò che c'è davvero. Non viene caricato nulla; uno screenshot mostra spesso un saldo bancario, un messaggio privato o un portale medico, e non deve mai lasciare il tuo dispositivo per essere controllato.

Come è costruito uno screenshot PNG

Ogni PNG si apre con la stessa firma di 8 byte —89 50 4E 47 0D 0A 1A 0A—, un'impronta deliberatamente carica di trappole: il byte con il bit alto 0x89 intercetta i canali a soli 7 bit, il 0D 0A e l'0A isolato intercettano la conversione di fine riga, e l'1A (fine file di DOS) ferma un type distratto prima che riversi il resto. Dopo viene una serie di chunk, ognuno un pacchetto ordinato: una lunghezza di 4 byte big-endian, un tipo ASCII di 4 byte, i dati e un CRC-32 di 4 byte calcolato sul tipo e sui dati (mai sulla lunghezza) con il polinomio riflesso standard 0xEDB88320.

Tre chunk trasportano l'immagine. IHDR viene per primo e occupa sempre 13 byte: larghezza (u32), altezza (u32), poi byte singoli per la profondità di bit, il tipo di colore, il metodo di compressione, il metodo di filtro e il metodo di interlacciamento. Lo screenshot di un sistema operativo moderno è quasi sempre a 8 bit, non interlacciato, con tipo di colore 2 (colore reale) o 6 (colore reale con alfa). IDAT contiene l'immagine, a volte suddivisa in più chunk IDAT consecutivi; al suo interno c'è un flusso zlib (byte di intestazione 0x78) di linee di scansione filtrate compresse con DEFLATE — ogni riga preceduta da un byte di filtro 0–4 (None, Sub, Up, Average, Paeth), scritte dall'alto verso il basso. IEND è il marcatore di fine vuoto, con un CRC fisso di AE 42 60 82.

Gli screenshot portano anche chunk ausiliari riconoscibili —la prima lettera minuscola li marca come opzionali— come pHYs (densità di pixel, così una cattura Retina indica la sua scala), iCCP o sRGB (profilo colore), tEXt/eXIf (metadati che lo strumento di cattura imprime). Questi possono danneggiarsi o andare persi senza perdere un solo pixel, perché a un decodificatore è consentito saltare qualsiasi chunk ausiliario che non comprende.

Il danno che ha una correzione pulita e deterministica

Poiché ogni chunk si autoverifica, un'intera classe di danni del PNG ha una risposta conoscibile invece di una congettura:

  • Somma errata, dati corretti. Il falso allarme più comune: i byte di un chunk sono intatti ma il suo CRC memorizzato non coincide più, così i decodificatori severi (e pngcheck) rifiutano il file con CRC error in chunk IDAT. Ricalcolare il CRC-32 a partire dai dati e riscriverlo rende di nuovo valido il file con zero perdite: la somma di controllo era l'unica cosa sbagliata.
  • Dimensioni azzerate o alterate. Se la larghezza o l'altezza di IHDR è azzerata, nessun decodificatore può allocare una tela e il file non si apre. Ma IHDR porta il proprio CRC, calcolato quando i numeri erano corretti. Questo permette alla riparazione di forzare la geometria a forza bruta: provare valori candidati di larghezza/altezza, ricalcolare il CRC del chunk per ciascuno e fermarsi quando coincide con il valore memorizzato. Le dimensioni originali escono direttamente dall'aritmetica — senza indovinare.
  • Corruzione da fine riga / modalità testo. Uno screenshot passato attraverso un client FTP in modalità ASCII, un ponte di chat o uno script che l'ha riscritto come testo cambia ogni 0D 0A in un 0A isolato (o viceversa), corrompendo byte in tutto il file. La firma è progettata per rilevare esattamente questo, e quando la sostituzione è coerente si può invertire byte per byte.
  • IEND assente o rotto. Un file per il resto completo ma che ha perso il suo marcatore di fine fa scattare avvisi di "file incompleto"; riscrivere un IEND valido permette a un decodificatore severo di accettare l'immagine che è già tutta lì.

Il danno che ti costa righe

I limiti onesti iniziano dove i dati dei pixel stessi non ci sono più, e gli screenshot cadono in entrambi i casi.

Troncamento: la parte superiore torna. È il modo più comune in cui uno screenshot si rompe: un salvataggio interrotto da un disco pieno, una copia tagliata quando un telefono viene scollegato, una sincronizzazione cloud che si è fermata all'80 per cento. La parte anteriore del file è intatta e la coda —di solito incluso IEND— è semplicemente assente. Poiché le linee di scansione sono scritte dall'alto verso il basso, un PNG troncato si recupera nella parte superiore dell'immagine: pixel reali fino a dove finiscono i dati. La riparazione riscrive una chiusura valida affinché un decodificatore accetti il file e disegni ciò che è sopravvissuto. Le righe sotto il taglio non sono danneggiate, sono assenti, quindi nessuno strumento può restituirle: il risultato è un parziale onesto.

Danno a metà di IDAT: la parte inferiore è rumore. Quando la corruzione cade dentro il flusso DEFLATE invece che alla fine, la ragione per cui è irrecuperabile è lo stesso DEFLATE: è un unico flusso continuo in cui ogni parte dipende da ciò che l'ha preceduta, senza marcatori periodici su cui risincronizzarsi. Non appena il decodificatore incontra il byte danneggiato perde il filo (zlib segnala incorrect data check / invalid distance too far back), e tutto ciò che viene dopo si decodifica come rumore. Un solo byte alterato a metà altezza può costare ogni riga sottostante, non solo una linea: l'immagine è pulita sopra il colpo ed è spazzatura sotto. Ecco perché uno screenshot si apre con una parte superiore nitida e una metà inferiore sbavata o grigia, la stessa forma di risultato che dà un JPEG troncato.

Confrontalo con i formati che tengono un indice separato dai loro dati —l'atomo moov di un video QuickTime, un b-tree di SQLite—, dove ricostruire la mappa recupera l'intero file. Il PNG conserva i suoi pixel in un unico flusso DEFLATE indivisibile, quindi una ferita a metà altezza è permanente sotto il taglio.

Cosa può e cosa non può riparare

Può riparare

  • Un chunk il cui CRC-32 memorizzato non coincide più con dati per il resto intatti: il CRC viene ricalcolato e il file valida con zero perdite
  • Larghezza/altezza di IHDR azzerate o alterate, recuperate forzando i candidati a forza bruta contro il CRC memorizzato dello stesso chunk
  • Corruzione da fine riga / modalità testo (CR-LF ↔ LF) da un trasferimento in modalità ASCII o da uno script che ha riscritto il file come testo
  • Un marcatore di fine IEND assente o malformato in un file i cui dati immagine sono per il resto completi
  • Uno screenshot troncato: le righe superiori che sono state effettivamente scritte si decodificano di nuovo come pixel reali

Non può riparare

  • Le righe dell'immagine sotto un colpo a metà di IDAT: DEFLATE non può risincronizzarsi, quindi tutto ciò che segue il byte danneggiato è rumore
  • Le righe sotto il taglio in un file troncato: quei pixel non sono mai stati scritti e nessuno strumento può inventarli
  • Un file che si legge come 0 byte o tutti zeri: non c'è alcuna immagine da ricostruire (quello è un lavoro di recupero dati, non una riparazione)
  • Uno screenshot che un'altra app ha ricodificato o ricompresso dopo il danno: i pixel sbagliati sono ormai incisi dentro
  • Il ripristino pixel per pixel di una metà inferiore corrotta: la riparazione restituisce un parziale onesto, non le righe grigie

Se una riparazione fallisce, ti diciamo perché (dati mancanti rispetto a struttura danneggiata), e non ti viene mai addebitato nulla per una riparazione fallita.

Domande frequenti

Perché il mio screenshot PNG non si apre?

Di solito una di tre cose: la firma di 8 byte all'inizio è stata alterata, così i visualizzatori non riconoscono il file come PNG; l'intestazione IHDR che memorizza larghezza e altezza è azzerata o alterata, così un decodificatore non può predisporre una tela; oppure i dati compressi IDAT sono stati troncati o corrotti a metà. Le prime due sono spesso correzioni deterministiche perché il PNG memorizza un CRC-32 per ogni chunk. La terza è dove iniziano i limiti onesti.

Cosa significa un "IDAT: CRC error"?

Ogni chunk termina con un CRC-32 di quattro byte calcolato sul suo tipo e sui suoi dati. Quando un decodificatore lo ricalcola e il valore non coincide, segnala un errore CRC: i byte di quel chunk sono cambiati da quando il file è stato scritto. Se solo la somma memorizzata è errata e i dati sono intatti, ricalcolarla ripara il file senza altro. Se sono cambiati i dati stessi, il CRC sta facendo il suo lavoro avvisandoti, e quanto si può recuperare dipende da quale chunk è stato colpito.

Si può recuperare uno screenshot troncato?

Parzialmente, e solo la parte superiore. Il PNG scrive le sue linee di scansione dall'alto verso il basso dentro un unico flusso DEFLATE, quindi un file tagliato si decodifica in modo pulito fino a dove finiscono i dati e poi si ferma. Recuperi la porzione superiore dell'immagine come pixel reali; viene riscritto un IEND valido affinché un visualizzatore lo accetti. Le righe sotto il taglio non sono mai state nel file, quindi nessuno strumento può ripristinarle.

Perché la parte inferiore del mio screenshot è grigia o corrotta?

Perché DEFLATE, la compressione usata dal PNG, è un flusso continuo senza modo di risincronizzarsi dopo un danno. Se la corruzione cade in mezzo ai dati IDAT invece che alla fine, il decodificatore perde il filo in quel byte e tutto ciò che viene dopo si decodifica come rumore, non solo una riga. Ecco perché il danno a metà flusso costa tipicamente ogni riga sotto il colpo, mentre un troncamento pulito lascia almeno intatta la parte superiore.

Il mio screenshot viene caricato per essere riparato?

No. Il file viene letto dal tuo disco e ricostruito nella scheda del tuo browser; il percorso dei chunk e i controlli CRC sono normale codice che gira in locale. Puoi aprire la scheda Rete e confermare che escono 0 byte, il che conta quando uno screenshot mostra un saldo bancario, una chat privata, una password o un portale medico.

Correlati: Riparare una foto JPEG · Chunk e CRC del PNG, spiegati · Verificare la promessa di zero upload