Oder Text markieren und Enter drücken…

(ab)using jpeg

Tags
Backlinks
» Tags: "(ab)using jpeg" is tagged as » Backlinks: These Wikipages link to "(ab)using jpeg"

über das jpeg-komprimierungsverfahren und was man damit anstellen kann, wenn man ein wenig mehr in die tiefe geht.

<alles noch sehr lückenhaft dokumentiert -- die frage ist, ob sichs überhaupt lohnt>

ich werde hier nicht das kompressionsverfahren selbst erklären, sondern lediglich meine versuche dokumentieren, die ich damit angestellt habe. die folgenden beiden quellen stellen das thema ausführlich dar:

http://www.fho-emden.de/~hoffmann/jpeg131200.pdf

http://en.wikipedia.org/wiki/JPEG

stichworte:

× YCrCb-farbraum

× diskrete cosinus transformation

× quantisierungs-tabellen

 

hilfreiche tools:

http://www.impulseadventure.com/photo/jpeg-snoop.html

 

libjpeg quellcode und tools zum kompilieren:

http://www.ijg.org/files/jpegsrc.v6b.tar.gz

http://www.mingw.org/

http://www.cygwin.com/

 

00. testbild

 

testbild

 

/* These are the sample quantization tables given in JPEG spec section K.1.
 * The spec says that the values given produce "good" quality, and
 * when divided by 2, "very good" quality.
 */
static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = {
  16,  11,  10,  16,  24,  40,  51,  61,
  12,  12,  14,  19,  26,  58,  60,  55,
  14,  13,  16,  24,  40,  57,  69,  56,
  14,  17,  22,  29,  51,  87,  80,  62,
  18,  22,  37,  56,  68, 109, 103,  77,
  24,  35,  55,  64,  81, 104, 113,  92,
  49,  64,  78,  87, 103, 121, 120, 101,
  72,  92,  95,  98, 112, 100, 103,  99
};
static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = {
  17,  18,  24,  47,  99,  99,  99,  99,
  18,  21,  26,  66,  99,  99,  99,  99,
  24,  26,  56,  99,  99,  99,  99,  99,
  47,  66,  99,  99,  99,  99,  99,  99,
  99,  99,  99,  99,  99,  99,  99,  99,
  99,  99,  99,  99,  99,  99,  99,  99,
  99,  99,  99,  99,  99,  99,  99,  99,
  99,  99,  99,  99,  99,  99,  99,  99
};

so stehts im code geschrieben. tatsaechlich benutzen unterschiedliche grafikprogramme und digitalkameras aber auch unterschiedliche tabellen... wir wollen herausfinden, was passiert, wenn man die werte (teils drastisch) aendert.

 

01. zufallswerte (luminanz)

Destination ID=0 (Luminance)
80  51  10  50   4  59   8  31
97  93  33  21   7  30  71  51
68  57  10  39  50  55  91   5
43  70  93  95   8  44  37  86
91  13  10  52  34  33  37  58
20  71  45  14  30  11   3  86
12  90  39  92  46  62  39  27
65   1  98  72  15  10  70  39

test 01

 

02. zufallswerte (chrominanz)

Destination ID=1 (Chrominance)
100  58  38  44   7  17  76  68
 35  13  63  96  77  57  77   1
 50  38  51  24  64  16  55  60
  4  55   6  59  44   1  26  32
 73  11  63  10  32  94  53  56
 61  88  31  45  14  18  86  88
 80   5   8  72  30  44  18  90
 74  81  80  50  85  44  69  81

test 02


Destination ID=1 (Chrominance)
350 310 330 280 490 485 145 450
310 410 480 365 270  10 350 475
 30 480 485 475 280 465 120 375
 55 105 195 130 290 470 310 110
  5 470  20   5 455 370 270 180
270 355  15 455 230  25 180  25
410 440 210 175 435 240  75 490
215 200 110 165  25 315 145 340

test 02

 

2 unterschiedliche tabellen für Cr und Cb

Destination ID=1 (Chrominance)
155 175 240 385 120 315 485 245
425 275 395  50  25 380 345  80
395 380 480  25 140 140 220 225
225 295 105 285 470 135 225  15
305 350 265 350 420  90  95 240
  5 315 410  20 470 230  35 130
165  10 460 310  40 300 250 135
445 455  35  80 205  80 465 375

Destination ID=2 (Chrominance)
200 340  65 335 385  30 180  20
110 460 395 190  15 205 405 490
460  95 385 160 115 125 460  25
260 420  60 340 270 400 130 415
120 310 450 335  55 455 205  40
 95 500 320 200 275 495 445 265
425 120 190 280 120  80 315 225
335  30 100  80 185  40 240 105

test 02

 

unterschiedliche tabellen für alle 3 komponenten:

Destination ID=0 (Luminance)
300 385 105 440 425 265 105 305
295 135 130  65 295 275 185 250
 25 430 405 230 130 475 135  75
195 305 195 190 315 180  75 355
445 135 345 345 120 415  50 180
225 295 150  45 415  90 260 375
300 475 290 135 215 145  20 210
180 365 315 445 265 460 195 175

Destination ID=1 (Chrominance)
230 100 445 385 385 160 500 165
290 345 170 495 430  90 220 380
110 470  70 215 445  90 145 410
395 240 170 470 165 110  90  45
390 485 370 240  30 295 170  90
305 320  65  20 115 475 390 325
135 215  10 420 430  90 395 275
465  45 170 130 485 215 205  45

Destination ID=2 (Chrominance)
460 200  25 420 110 295 120 320
390 275 340  45  95 450 190  30
 20 195  80   1 240 185  15 405
 55 195  35 160 380 285 300 110
200 200  15 210 305 365 415 500
225 230 130 110 375  85  25 120
445 445 295 215 195 440 470 370
255  80 480 460  80 235 105 355

test 02d


03. scans

 

04. cjpeg modifizieren

 

statt zigzag order von links nach rechts

no zigzag


cjpeg.exe so verändert, zum komprimieren die standard-tabellen, zum dekomprimieren jedoch zufallswerte verwendet werden.

test 04