0

I have a problem identifying some broken images, running e-clasified website where users upload thousands images per day, some images looks like that Broken image

It's clearly broken. BUT - neither identify neither jpeginfo sees nothing wrong. I've googled all possible ways to check those images, tried them all but with no success.

I've tried to run jpegdump on that file but it shows nothing wrong (the output is almost the same for broken and non broken images):

jpegdump  < 1.jpg 
Offset 0x0000 Marker 0xffd8 SOI Start of Image 
Offset 0x0002 Marker 0xffdb DQT Define Quantization Table(s) length variable 0x43 
  JPEG_DQT_Parameters:
     QuantizationTableElementPrecision = 0
     QuantizationTableIdentifier = 0
       QuantizationTableElement 0 = 8
       QuantizationTableElement 1 = 6
       QuantizationTableElement 2 = 6
       QuantizationTableElement 3 = 7
       QuantizationTableElement 4 = 6
       QuantizationTableElement 5 = 5
       QuantizationTableElement 6 = 8
       QuantizationTableElement 7 = 7
       QuantizationTableElement 8 = 7
       QuantizationTableElement 9 = 7
       QuantizationTableElement 10 = 9
       QuantizationTableElement 11 = 9
       QuantizationTableElement 12 = 8
       QuantizationTableElement 13 = 10
       QuantizationTableElement 14 = 12
       QuantizationTableElement 15 = 20
       QuantizationTableElement 16 = 13
       QuantizationTableElement 17 = 12
       QuantizationTableElement 18 = 11
       QuantizationTableElement 19 = 11
       QuantizationTableElement 20 = 12
       QuantizationTableElement 21 = 25
       QuantizationTableElement 22 = 18
       QuantizationTableElement 23 = 19
       QuantizationTableElement 24 = 15
       QuantizationTableElement 25 = 20
       QuantizationTableElement 26 = 29
       QuantizationTableElement 27 = 26
       QuantizationTableElement 28 = 31
       QuantizationTableElement 29 = 30
       QuantizationTableElement 30 = 29
       QuantizationTableElement 31 = 26
       QuantizationTableElement 32 = 28
       QuantizationTableElement 33 = 28
       QuantizationTableElement 34 = 32
       QuantizationTableElement 35 = 36
       QuantizationTableElement 36 = 46
       QuantizationTableElement 37 = 39
       QuantizationTableElement 38 = 32
       QuantizationTableElement 39 = 34
       QuantizationTableElement 40 = 44
       QuantizationTableElement 41 = 35
       QuantizationTableElement 42 = 28
       QuantizationTableElement 43 = 28
       QuantizationTableElement 44 = 40
       QuantizationTableElement 45 = 55
       QuantizationTableElement 46 = 41
       QuantizationTableElement 47 = 44
       QuantizationTableElement 48 = 48
       QuantizationTableElement 49 = 49
       QuantizationTableElement 50 = 52
       QuantizationTableElement 51 = 52
       QuantizationTableElement 52 = 52
       QuantizationTableElement 53 = 31
       QuantizationTableElement 54 = 39
       QuantizationTableElement 55 = 57
       QuantizationTableElement 56 = 61
       QuantizationTableElement 57 = 56
       QuantizationTableElement 58 = 50
       QuantizationTableElement 59 = 60
       QuantizationTableElement 60 = 46
       QuantizationTableElement 61 = 51
       QuantizationTableElement 62 = 52
       QuantizationTableElement 63 = 50

Offset 0x0047 Marker 0xffdb DQT Define Quantization Table(s) length variable 0x43 
  JPEG_DQT_Parameters:
     QuantizationTableElementPrecision = 0
     QuantizationTableIdentifier = 1
       QuantizationTableElement 0 = 9
       QuantizationTableElement 1 = 9
       QuantizationTableElement 2 = 9
       QuantizationTableElement 3 = 12
       QuantizationTableElement 4 = 11
       QuantizationTableElement 5 = 12
       QuantizationTableElement 6 = 24
       QuantizationTableElement 7 = 13
       QuantizationTableElement 8 = 13
       QuantizationTableElement 9 = 24
       QuantizationTableElement 10 = 50
       QuantizationTableElement 11 = 33
       QuantizationTableElement 12 = 28
       QuantizationTableElement 13 = 33
       QuantizationTableElement 14 = 50
       QuantizationTableElement 15 = 50
       QuantizationTableElement 16 = 50
       QuantizationTableElement 17 = 50
       QuantizationTableElement 18 = 50
       QuantizationTableElement 19 = 50
       QuantizationTableElement 20 = 50
       QuantizationTableElement 21 = 50
       QuantizationTableElement 22 = 50
       QuantizationTableElement 23 = 50
       QuantizationTableElement 24 = 50
       QuantizationTableElement 25 = 50
       QuantizationTableElement 26 = 50
       QuantizationTableElement 27 = 50
       QuantizationTableElement 28 = 50
       QuantizationTableElement 29 = 50
       QuantizationTableElement 30 = 50
       QuantizationTableElement 31 = 50
       QuantizationTableElement 32 = 50
       QuantizationTableElement 33 = 50
       QuantizationTableElement 34 = 50
       QuantizationTableElement 35 = 50
       QuantizationTableElement 36 = 50
       QuantizationTableElement 37 = 50
       QuantizationTableElement 38 = 50
       QuantizationTableElement 39 = 50
       QuantizationTableElement 40 = 50
       QuantizationTableElement 41 = 50
       QuantizationTableElement 42 = 50
       QuantizationTableElement 43 = 50
       QuantizationTableElement 44 = 50
       QuantizationTableElement 45 = 50
       QuantizationTableElement 46 = 50
       QuantizationTableElement 47 = 50
       QuantizationTableElement 48 = 50
       QuantizationTableElement 49 = 50
       QuantizationTableElement 50 = 50
       QuantizationTableElement 51 = 50
       QuantizationTableElement 52 = 50
       QuantizationTableElement 53 = 50
       QuantizationTableElement 54 = 50
       QuantizationTableElement 55 = 50
       QuantizationTableElement 56 = 50
       QuantizationTableElement 57 = 50
       QuantizationTableElement 58 = 50
       QuantizationTableElement 59 = 50
       QuantizationTableElement 60 = 50
       QuantizationTableElement 61 = 50
       QuantizationTableElement 62 = 50
       QuantizationTableElement 63 = 50

Offset 0x008c Marker 0xffc0 SOF0 Huffman Baseline DCT length variable 0x11 
  JPEG_SOF_Parameters:
     SamplePrecision = 8
     nLines = 800
     nSamplesPerLine = 450
     nComponentsInFrame = 3
     component 0
       ComponentIdentifier = 1
       HorizontalSamplingFactor = 2
       VerticalSamplingFactor = 2
       QuantizationTableDestinationSelector = 0
     component 1
       ComponentIdentifier = 2
       HorizontalSamplingFactor = 1
       VerticalSamplingFactor = 1
       QuantizationTableDestinationSelector = 1
     component 2
       ComponentIdentifier = 3
       HorizontalSamplingFactor = 1
       VerticalSamplingFactor = 1
       QuantizationTableDestinationSelector = 1

Offset 0x009f Marker 0xffc4 DHT Define Huffman Table(s) length variable 0x1c 
  JPEG_DHT_Parameters:
     TableClass = 0
     HuffmanTableIdentifier = 0
       nHuffmanCodesOfLength 0 = 1
         ValueOfHuffmanCode 0 = 0
       nHuffmanCodesOfLength 1 = 0
       nHuffmanCodesOfLength 2 = 2
         ValueOfHuffmanCode 0 = 3
         ValueOfHuffmanCode 1 = 4
       nHuffmanCodesOfLength 3 = 3
         ValueOfHuffmanCode 0 = 1
         ValueOfHuffmanCode 1 = 2
         ValueOfHuffmanCode 2 = 5
       nHuffmanCodesOfLength 4 = 1
         ValueOfHuffmanCode 0 = 8
       nHuffmanCodesOfLength 5 = 1
         ValueOfHuffmanCode 0 = 6
       nHuffmanCodesOfLength 6 = 1
         ValueOfHuffmanCode 0 = 7
       nHuffmanCodesOfLength 7 = 0
       nHuffmanCodesOfLength 8 = 0
       nHuffmanCodesOfLength 9 = 0
       nHuffmanCodesOfLength 10 = 0
       nHuffmanCodesOfLength 11 = 0
       nHuffmanCodesOfLength 12 = 0
       nHuffmanCodesOfLength 13 = 0
       nHuffmanCodesOfLength 14 = 0
       nHuffmanCodesOfLength 15 = 0

Offset 0x00bd Marker 0xffc4 DHT Define Huffman Table(s) length variable 0x47 
  JPEG_DHT_Parameters:
     TableClass = 1
     HuffmanTableIdentifier = 0
       nHuffmanCodesOfLength 0 = 1
         ValueOfHuffmanCode 0 = 0
       nHuffmanCodesOfLength 1 = 0
       nHuffmanCodesOfLength 2 = 2
         ValueOfHuffmanCode 0 = 1
         ValueOfHuffmanCode 1 = 2
       nHuffmanCodesOfLength 3 = 2
         ValueOfHuffmanCode 0 = 3
         ValueOfHuffmanCode 1 = 17
       nHuffmanCodesOfLength 4 = 0
       nHuffmanCodesOfLength 5 = 4
         ValueOfHuffmanCode 0 = 4
         ValueOfHuffmanCode 1 = 18
         ValueOfHuffmanCode 2 = 33
         ValueOfHuffmanCode 3 = 49
       nHuffmanCodesOfLength 6 = 2
         ValueOfHuffmanCode 0 = 5
         ValueOfHuffmanCode 1 = 65
       nHuffmanCodesOfLength 7 = 6
         ValueOfHuffmanCode 0 = 19
         ValueOfHuffmanCode 1 = 34
         ValueOfHuffmanCode 2 = 81
         ValueOfHuffmanCode 3 = 97
         ValueOfHuffmanCode 4 = 129
         ValueOfHuffmanCode 5 = 209
       nHuffmanCodesOfLength 8 = 8
         ValueOfHuffmanCode 0 = 20
         ValueOfHuffmanCode 1 = 50
         ValueOfHuffmanCode 2 = 113
         ValueOfHuffmanCode 3 = 145
         ValueOfHuffmanCode 4 = 147
         ValueOfHuffmanCode 5 = 161
         ValueOfHuffmanCode 6 = 193
         ValueOfHuffmanCode 7 = 240
       nHuffmanCodesOfLength 9 = 2
         ValueOfHuffmanCode 0 = 66
         ValueOfHuffmanCode 1 = 177
       nHuffmanCodesOfLength 10 = 6
         ValueOfHuffmanCode 0 = 6
         ValueOfHuffmanCode 1 = 21
         ValueOfHuffmanCode 2 = 35
         ValueOfHuffmanCode 3 = 82
         ValueOfHuffmanCode 4 = 225
         ValueOfHuffmanCode 5 = 241
       nHuffmanCodesOfLength 11 = 7
         ValueOfHuffmanCode 0 = 36
         ValueOfHuffmanCode 1 = 51
         ValueOfHuffmanCode 2 = 52
         ValueOfHuffmanCode 3 = 68
         ValueOfHuffmanCode 4 = 98
         ValueOfHuffmanCode 5 = 99
         ValueOfHuffmanCode 6 = 115
       nHuffmanCodesOfLength 12 = 7
         ValueOfHuffmanCode 0 = 83
         ValueOfHuffmanCode 1 = 84
         ValueOfHuffmanCode 2 = 100
         ValueOfHuffmanCode 3 = 131
         ValueOfHuffmanCode 4 = 146
         ValueOfHuffmanCode 5 = 148
         ValueOfHuffmanCode 6 = 178
       nHuffmanCodesOfLength 13 = 5
         ValueOfHuffmanCode 0 = 37
         ValueOfHuffmanCode 1 = 85
         ValueOfHuffmanCode 2 = 130
         ValueOfHuffmanCode 3 = 132
         ValueOfHuffmanCode 4 = 210
       nHuffmanCodesOfLength 14 = 0
       nHuffmanCodesOfLength 15 = 0

Offset 0x0106 Marker 0xffc4 DHT Define Huffman Table(s) length variable 0x19 
  JPEG_DHT_Parameters:
     TableClass = 0
     HuffmanTableIdentifier = 1
       nHuffmanCodesOfLength 0 = 1
         ValueOfHuffmanCode 0 = 0
       nHuffmanCodesOfLength 1 = 1
         ValueOfHuffmanCode 0 = 2
       nHuffmanCodesOfLength 2 = 1
         ValueOfHuffmanCode 0 = 1
       nHuffmanCodesOfLength 3 = 1
         ValueOfHuffmanCode 0 = 3
       nHuffmanCodesOfLength 4 = 1
         ValueOfHuffmanCode 0 = 4
       nHuffmanCodesOfLength 5 = 1
         ValueOfHuffmanCode 0 = 5
       nHuffmanCodesOfLength 6 = 0
       nHuffmanCodesOfLength 7 = 0
       nHuffmanCodesOfLength 8 = 0
       nHuffmanCodesOfLength 9 = 0
       nHuffmanCodesOfLength 10 = 0
       nHuffmanCodesOfLength 11 = 0
       nHuffmanCodesOfLength 12 = 0
       nHuffmanCodesOfLength 13 = 0
       nHuffmanCodesOfLength 14 = 0
       nHuffmanCodesOfLength 15 = 0

Offset 0x0121 Marker 0xffc4 DHT Define Huffman Table(s) length variable 0x22 
  JPEG_DHT_Parameters:
     TableClass = 1
     HuffmanTableIdentifier = 1
       nHuffmanCodesOfLength 0 = 1
         ValueOfHuffmanCode 0 = 0
       nHuffmanCodesOfLength 1 = 1
         ValueOfHuffmanCode 0 = 1
       nHuffmanCodesOfLength 2 = 0
       nHuffmanCodesOfLength 3 = 2
         ValueOfHuffmanCode 0 = 2
         ValueOfHuffmanCode 1 = 17
       nHuffmanCodesOfLength 4 = 2
         ValueOfHuffmanCode 0 = 33
         ValueOfHuffmanCode 1 = 49
       nHuffmanCodesOfLength 5 = 3
         ValueOfHuffmanCode 0 = 3
         ValueOfHuffmanCode 1 = 18
         ValueOfHuffmanCode 2 = 65
       nHuffmanCodesOfLength 6 = 0
       nHuffmanCodesOfLength 7 = 3
         ValueOfHuffmanCode 0 = 19
         ValueOfHuffmanCode 1 = 81
         ValueOfHuffmanCode 2 = 97
       nHuffmanCodesOfLength 8 = 1
         ValueOfHuffmanCode 0 = 4
       nHuffmanCodesOfLength 9 = 1
         ValueOfHuffmanCode 0 = 34
       nHuffmanCodesOfLength 10 = 1
         ValueOfHuffmanCode 0 = 145
       nHuffmanCodesOfLength 11 = 0
       nHuffmanCodesOfLength 12 = 0
       nHuffmanCodesOfLength 13 = 0
       nHuffmanCodesOfLength 14 = 0
       nHuffmanCodesOfLength 15 = 0

Offset 0x0145 Marker 0xffda SOS Start of Scan length variable 0x0c 
  JPEG_SOS_Parameters:
     nComponentsPerScan = 3
     component 0
       ScanComponentSelector = 1
       DCEntropyCodingTableSelector = 0
       ACEntropyCodingTableSelector = 0
       MappingTableSelector(LS) = 0
     component 1
       ScanComponentSelector = 2
       DCEntropyCodingTableSelector = 1
       ACEntropyCodingTableSelector = 1
       MappingTableSelector(LS) = 17
     component 2
       ScanComponentSelector = 3
       DCEntropyCodingTableSelector = 1
       ACEntropyCodingTableSelector = 1
       MappingTableSelector(LS) = 17
     StartOfSpectralOrPredictorSelection/NearLosslessDifferenceBound(LS) = 0
     EndOfSpectralSelection/InterleaveMode(LS) = 63
     SuccessiveApproximationBitPositionHigh = 0
     SuccessiveApproximationBitPositionLowOrPointTransform = 0
Offset 0x020d Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0230 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x02c9 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0306 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x030f Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0322 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0349 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0399 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x03a8 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0438 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x044b Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x045c Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0460 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0471 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0492 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x04da Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x04fb Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x052d Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0584 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x05a9 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x05ba Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x0a74 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x1271 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x132a Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x1344 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x15bc Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x179b Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x19e9 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x1d11 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x1dff Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x1e58 Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x1ecb Encoded 0xff in entropy-coded segment followed by stuffed zero byte
Offset 0x261d Marker 0xffd9 EOI End of Image (JPEG 2000 EOC End of codestream) 
End of file

Do you have some ideas how can I detect those images?

Thanks in advance!

  • If the tool is just looking at the file header, it won't see any problem. To see the problem of your sample image, the whole image must be decoded. This will increase the time of your "identify" process substantially. If you have the time, then... – BitBank Mar 25 '16 at 17:52

2 Answers2

0

The only way to tell for sure if a JPEG is corrupt is to decode it. I suspect that the programs you are using only check the structure of JPEG stream. That could be fine while the compressed data is screwed up.

user3344003
  • 20,574
  • 3
  • 26
  • 62
  • Any examples how to decode and find out that that image is corrupted? – Dimitry Dimitry Apr 04 '16 at 15:52
  • 1
    This is some JPEG source code that is designed to be easily modifiable. It includes a JPEG dumping program. http://www.colosseumbuilders.com/sourcecode/imagelib403.zip – user3344003 Apr 05 '16 at 00:53
  • Thanks for hint, however I've run it on damaged jpeg and it shows no error, bunch of info the same way it shows for non damaged files, I've updated my original question with the outup – Dimitry Dimitry Apr 06 '16 at 05:25
  • Try it on a file that works. I suspect the problem is that there is no APPn marker at the start defining the file format. That should not be a problem but it may fool some decoders. Does JPEGDUMP show an APPn marker after the SOI marker in the working files? – user3344003 Apr 06 '16 at 23:14
  • As I look at the file I think my suspicion is wrong. – user3344003 Apr 06 '16 at 23:54
0

I have the answer: That is a valid JPEG. The funny image is what is what is stored in the image file.

user3344003
  • 20,574
  • 3
  • 26
  • 62