Conversione immagine in valori numerici e viceversa

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Conversione immagine in valori numerici e viceversa

Messaggio da DoctorStrange »

Buongiorno a tutti,

Da qualche giorno, sto cercando di fare una cosa un po strana.
Partendo da un'immagine qualunque in png o jpg, riesco a convertirla senza alcun problema nel suo equivalente "numerico", ovvero a listare i valori numerici di ogni singolo pixel che la compone, con:

Codice: Seleziona tutto

hexdump -C Immagine.png > Immagine-hex.txt
Il file di testo risultante, è di questo tipo:

Codice: Seleziona tutto

00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 02 42 00 00 01 27  08 06 00 00 00 45 76 2c  |...B...'.....Ev,|
00000020  74 00 00 00 04 73 42 49  54 08 08 08 08 7c 08 64  |t....sBIT....|.d|
00000030  88 00 00 00 19 74 45 58  74 53 6f 66 74 77 61 72  |.....tEXtSoftwar|
00000040  65 00 67 6e 6f 6d 65 2d  73 63 72 65 65 6e 73 68  |e.gnome-screensh|
00000050  6f 74 ef 03 bf 3e 00 00  20 00 49 44 41 54 78 9c  |ot...>.. .IDATx.|
00000060  ed dd 69 8c 65 e7 7d df  f9 ef ff 79 ce b9 4b 55  |..i.e.}....y..KU|
00000070  f5 4e b2 29 4a 14 49 2d  a4 16 6b a1 65 59 b2 04  |.N.)J.I-..k.eY..|
00000080  5b 96 1d 79 1d 58 1e 4c  e0 05 b6 11 0c e2 19 fb  |[..y.X.L........|
00000090  85 02 08 13 04 31 b2 61  80 49 c6 ce 24 c0 8c a1  |.....1.a.I..$...|
000000a0  4c 10 5b b6 5f 24 0a 32  52 60 c5 b4 30 33 86 46  |L.[._$.2R`..03.F|
000000b0  80 67 42 2b 22 64 47 88  6c 51 96 9b 26 2d 51 a6  |.gB+"dG.lQ..&-Q.|
000000c0  b8 98 dd 64 57 55 d7 5d  ce 79 9e ff bc 38 4b dd  |...dWU.].y...8K.|
000000d0  2a 35 d5 4d b2 bb ba aa  cf ef 43 74 d7 e9 5b b7  |*5.M......Ct..[.|
000000e0  ce 3d e7 b0 ee bd bf fb  7f 36 bb fd 15 bf eb 5c  |.=.......6.....\|
000000f0  ad 0c 04 87 1c c0 0d cc  c1 72 f3 b5 fb 9e 1b 98  |.........r......|
00000100  35 5f a1 f9 9e 1b d8 55  3f 8a 88 88 88 0c 85 d3  |5_.....U?.......|
00000110  66 84 2e 8e 18 e4 0c 81  26 6f 60 bb 99 03 9a dc  |f.......&o`.....|
00000120  d1 dd ef 1a 64 8b e2 45  1d a5 39 78 1b 7e 30 f0  |....d..E..9x.~0.|
La mia domanda è: esiste un modo di fare l'inverso? Ovvero prendere l'intero listato e codificarlo di nuovo nell'immagine di partenza?

Lo scopo di questa domanda, è che vorrei provare a modificare l'immagine usando spark e scala, ovvero intervenendo direttamente sul dump esadecimale, e poi riconvertire il risultato della mia modifica in una nuova immagine, e vedere cosa produce una modifica a livello prettamente numerico di un'immagine.

Vi ringrazio.

Un saluto.
Avatar utente
tokijin
Moderatore Globale
Moderatore Globale
Messaggi: 4610
Iscrizione: mercoledì 3 giugno 2009, 23:10
Desktop: plasma 5.27.4
Distribuzione: Kubuntu 23.04
Località: Abruzzo

Re: Conversione immagine in valori numerici e viceversa

Messaggio da tokijin »

Ciao,
leggendo qui, tra le varie risposte qualcuno ha scritto uno script per invertire hexdump; non l'ho provato, te lo segnalo: https://github.com/mfleetwo/reverse-hexdump

Ciao
Sei abbruzzese se dopo che ti sei strafogato un chilogrammo di pasta, hai il coraggio di dire alla cuoca "cacc ch'è cott" - Se entra un piccione in casa..chiudi le finestre!
Ubuntu User #28657 - Il mio vecchio hardware - Tag Codice
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: Conversione immagine in valori numerici e viceversa

Messaggio da DoctorStrange »

Grazie mille !
Piu tardi provo ad implementare la soluzione. Se funziona metto il tag "Risolto".
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Conversione immagine in valori numerici e viceversa

Messaggio da crap0101 »

in base alla rappresentazione che ti fa più comodo, potresti usare anche uu*

Codice: Seleziona tutto

crap0101@orange:/tmp/foo$ l
image.png
crap0101@orange:/tmp/foo$ uuencode image.png /dev/stdout | uudecode > image_u2u.png 
crap0101@orange:/tmp/foo$ diff -s image.png image_u2u.png 
I file image.png e image_u2u.png sono identici
altrimenti xxd (che ha anche un po' di opzioni che potrebbero tornare utili per elaborare il dump) ha già l'opzione -revert

Codice: Seleziona tutto

crap0101@orange:/tmp/foo$ xxd image.png|head 
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
00000010: 0000 0780 0000 0438 0802 0000 0067 b156  .......8.....g.V
00000020: 1400 0000 0373 4249 5408 0808 dbe1 4fe0  .....sBIT.....O.
00000030: 0000 2000 4944 4154 785e ec9d 057c 1447  .. .IDATx^...|.G
00000040: 1bc6 cfe2 9e00 0990 0482 85e0 2ec5 dd29  ...............)
00000050: 145a ac68 0b14 faa1 85b6 140a 94b6 50c1  .Z.h..........P.
00000060: 1dda e214 2fee 042d 4e20 b804 0912 21ae  ..../..-N ....!.
00000070: 975c cebe e7b2 7439 4ef6 f672 7721 81f7  .\....t9N..rw!..
00000080: 9af2 bb9b 9d1d f9cf ecee ec33 efbc 23ac  ...........3..#.
00000090: 5aa3 9e80 3e44 8008 1001 2240 0488 0011  Z...>D...."@....
crap0101@orange:/tmp/foo$ xxd image.png | xxd -r > image_x2x.png
crap0101@orange:/tmp/foo$ diff -s image_u2u.png image_x2x.png 
I file image_u2u.png e image_x2x.png sono identici
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 24 ospiti