Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: Alternatives for Extracting EXIF and JPEG Data from Images

Reply
Thread Tools

Re: Alternatives for Extracting EXIF and JPEG Data from Images

 
 
Max Erickson
Guest
Posts: n/a
 
      03-05-2007
Roger <(E-Mail Removed)> wrote:

> Does anybody have a pointer to a Python library/utility that will
> extract the chrominance and luminance quantization tables from
> JPG images?
>
> I have been using the _getexif method from PIL, which works fine,
> but doesn't extract the quantization data. I am a bit fuzzy on
> the terminology, but the quantization data seems to be JPEG data
> rather than EXIF data. One utility that extracts the
> quantization tables is JPEGsnoop -- there is a link to download
> the utility here:
> http://www.impulseadventure.com/phot...ntization.html
>
> The source code for the above isn't available and may not be
> callable from a Python script even if it were available.
>
> Roger
>


I don't know what the format is, etc, but jpegs I open with PIL have a
quantization attribute, e.g:

>>> im.quantization

{0: array('b', [6, 4, 4, 5, 4, 4, 6, 5, 5, 5, 6, 6, 6, 7, 9, 14, 9, 9,
8, 8, 9, 18, 13, 13, 10, 14, 21, 18, 22, 22, 21, 18, 20, 20, 23, 26,
33, 28,
<snip a bunch more numbers>


max

 
Reply With Quote
 
 
 
 
Roger
Guest
Posts: n/a
 
      03-05-2007
Max Erickson wrote:
> Roger <(E-Mail Removed)> wrote:
>
>> Does anybody have a pointer to a Python library/utility that will
>> extract the chrominance and luminance quantization tables from
>> JPG images?
>>
>> I have been using the _getexif method from PIL, which works fine,
>> but doesn't extract the quantization data. I am a bit fuzzy on
>> the terminology, but the quantization data seems to be JPEG data
>> rather than EXIF data. One utility that extracts the
>> quantization tables is JPEGsnoop -- there is a link to download
>> the utility here:
>> http://www.impulseadventure.com/phot...ntization.html
>>
>> The source code for the above isn't available and may not be
>> callable from a Python script even if it were available.
>>
>> Roger
>>

>
> I don't know what the format is, etc, but jpegs I open with PIL have a
> quantization attribute, e.g:
>
>>>> im.quantization

> {0: array('b', [6, 4, 4, 5, 4, 4, 6, 5, 5, 5, 6, 6, 6, 7, 9, 14, 9, 9,
> 8, 8, 9, 18, 13, 13, 10, 14, 21, 18, 22, 22, 21, 18, 20, 20, 23, 26,
> 33, 28,
> <snip a bunch more numbers>
>
>
> max
>


Thank you, I wasn't aware of the quantization method. I was unable to
find any documentation for it.

The 0: array() output would appear to be the luminance 8x8 array and the
1: array() to be the chrominance 8x8 array. A curiosity is the values
disagree with the output of the JPEGsnoop utility. For my Canon
Powershot S2 IS set to "fine", im.quantization yields (after formatting):

{0: array('b', [
1, 1, 1, 2, 1, 1, 2, 2,
2, 2, 3, 2, 2, 3, 3, 6,
4, 3, 3, 3, 3, 7, 5, 8,
4, 6, 8, 8, 10, 9, 8, 7,
11, 8, 10, 14, 13, 11, 10, 10,
12, 10, 8, 8, 11, 16, 12, 12,
13, 15, 15, 15, 15, 9, 11, 16,
17, 15, 14, 17, 13, 14, 14, 14
]),

1: array('b', [
4, 4, 4, 5, 4, 5, 9, 5,
5, 9, 15, 10, 8, 10, 15, 26,
19, 9, 9, 19, 26, 26, 26, 26,
13, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26])}

The JPEGsnoop output for the same jpg file is (pardon the line wrap):

Precision=0 bits
Destination ID=0 (Luminance)
DQT, Row #0: 1 1 1 2 3 6 8 10 AnnexRatio: 16.0
11.0 10.0 8.0 8.0 6.7 6.4 6.1
DQT, Row #1: 1 1 2 3 4 8 9 8 AnnexRatio: 12.0
12.0 7.0 6.3 6.5 7.3 6.7 6.9
DQT, Row #2: 2 2 2 3 6 8 10 8 AnnexRatio: 7.0
6.5 8.0 8.0 6.7 7.1 6.9 7.0
DQT, Row #3: 2 2 3 4 7 12 11 9 AnnexRatio: 7.0
8.5 7.3 7.3 7.3 7.3 7.3 6.9
DQT, Row #4: 3 3 8 11 10 16 15 11 AnnexRatio: 6.0
7.3 4.6 5.1 6.8 6.8 6.9 7.0
DQT, Row #5: 3 5 8 10 12 15 16 13 AnnexRatio: 8.0
7.0 6.9 6.4 6.8 6.9 7.1 7.1
DQT, Row #6: 7 10 11 12 15 17 17 14 AnnexRatio: 7.0
6.4 7.1 7.3 6.9 7.1 7.1 7.2
DQT, Row #7: 14 13 13 15 15 14 14 14 AnnexRatio: 5.1
7.1 7.3 6.5 7.5 7.1 7.4 7.1
Approx quality factor = 92.96 (scaling=14.08 variance=5.2
----
Precision=0 bits
Destination ID=1 (Chrominance)
DQT, Row #0: 4 4 5 9 15 26 26 26 AnnexRatio: 4.3
4.5 4.8 5.2 6.6 3.8 3.8 3.8
DQT, Row #1: 4 4 5 10 19 26 26 26 AnnexRatio: 4.5
5.3 5.2 6.6 5.2 3.8 3.8 3.8
DQT, Row #2: 5 5 8 9 26 26 26 26 AnnexRatio: 4.8
5.2 7.0 11.0 3.8 3.8 3.8 3.8
DQT, Row #3: 9 10 9 13 26 26 26 26 AnnexRatio: 5.2
6.6 11.0 7.6 3.8 3.8 3.8 3.8
DQT, Row #4: 15 19 26 26 26 26 26 26 AnnexRatio: 6.6
5.2 3.8 3.8 3.8 3.8 3.8 3.8
DQT, Row #5: 26 26 26 26 26 26 26 26 AnnexRatio: 3.8
3.8 3.8 3.8 3.8 3.8 3.8 3.8
DQT, Row #6: 26 26 26 26 26 26 26 26 AnnexRatio: 3.8
3.8 3.8 3.8 3.8 3.8 3.8 3.8
DQT, Row #7: 26 26 26 26 26 26 26 26 AnnexRatio: 3.8
3.8 3.8 3.8 3.8 3.8 3.8 3.8
Approx quality factor = 88.24 (scaling=23.52 variance=21.42)

I don't understand the "AnnexRatio" data JPEGsnoop is adding to each
row. Anyone have an explanation on how to translate the im.quantization
values to the JPEGsnoop values? Or am I looking at two different types
of "quantization" tables?

Roger
 
Reply With Quote
 
 
 
 
Roger
Guest
Posts: n/a
 
      03-05-2007
Max Erickson wrote:
> Roger <(E-Mail Removed)> wrote:
>
>> Does anybody have a pointer to a Python library/utility that will
>> extract the chrominance and luminance quantization tables from
>> JPG images?
>>
>> I have been using the _getexif method from PIL, which works fine,
>> but doesn't extract the quantization data. I am a bit fuzzy on
>> the terminology, but the quantization data seems to be JPEG data
>> rather than EXIF data. One utility that extracts the
>> quantization tables is JPEGsnoop -- there is a link to download
>> the utility here:
>> http://www.impulseadventure.com/phot...ntization.html
>>
>> The source code for the above isn't available and may not be
>> callable from a Python script even if it were available.
>>
>> Roger
>>

>
> I don't know what the format is, etc, but jpegs I open with PIL have a
> quantization attribute, e.g:
>
>>>> im.quantization

> {0: array('b', [6, 4, 4, 5, 4, 4, 6, 5, 5, 5, 6, 6, 6, 7, 9, 14, 9, 9,
> 8, 8, 9, 18, 13, 13, 10, 14, 21, 18, 22, 22, 21, 18, 20, 20, 23, 26,
> 33, 28,
> <snip a bunch more numbers>
>
>
> max
>


Thank you, I wasn't aware of the quantization method. I was unable to
find any documentation for it.

The 0: array() output would appear to be the luminance 8x8 array and the
1: array() to be the chrominance 8x8 array. A curiosity is the values
disagree with the output of the JPEGsnoop utility. For my Canon
Powershot S2 IS set to "fine", im.quantization yields (after formatting):

{0: array('b', [
1, 1, 1, 2, 1, 1, 2, 2,
2, 2, 3, 2, 2, 3, 3, 6,
4, 3, 3, 3, 3, 7, 5, 8,
4, 6, 8, 8, 10, 9, 8, 7,
11, 8, 10, 14, 13, 11, 10, 10,
12, 10, 8, 8, 11, 16, 12, 12,
13, 15, 15, 15, 15, 9, 11, 16,
17, 15, 14, 17, 13, 14, 14, 14
]),

1: array('b', [
4, 4, 4, 5, 4, 5, 9, 5,
5, 9, 15, 10, 8, 10, 15, 26,
19, 9, 9, 19, 26, 26, 26, 26,
13, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26])}

The JPEGsnoop output for the same jpg file is (pardon the line wrap):

Precision=0 bits
Destination ID=0 (Luminance)
DQT, Row #0: 1 1 1 2 3 6 8 10 AnnexRatio: 16.0
11.0 10.0 8.0 8.0 6.7 6.4 6.1
DQT, Row #1: 1 1 2 3 4 8 9 8 AnnexRatio: 12.0
12.0 7.0 6.3 6.5 7.3 6.7 6.9
DQT, Row #2: 2 2 2 3 6 8 10 8 AnnexRatio: 7.0
6.5 8.0 8.0 6.7 7.1 6.9 7.0
DQT, Row #3: 2 2 3 4 7 12 11 9 AnnexRatio: 7.0
8.5 7.3 7.3 7.3 7.3 7.3 6.9
DQT, Row #4: 3 3 8 11 10 16 15 11 AnnexRatio: 6.0
7.3 4.6 5.1 6.8 6.8 6.9 7.0
DQT, Row #5: 3 5 8 10 12 15 16 13 AnnexRatio: 8.0
7.0 6.9 6.4 6.8 6.9 7.1 7.1
DQT, Row #6: 7 10 11 12 15 17 17 14 AnnexRatio: 7.0
6.4 7.1 7.3 6.9 7.1 7.1 7.2
DQT, Row #7: 14 13 13 15 15 14 14 14 AnnexRatio: 5.1
7.1 7.3 6.5 7.5 7.1 7.4 7.1
Approx quality factor = 92.96 (scaling=14.08 variance=5.2
----
Precision=0 bits
Destination ID=1 (Chrominance)
DQT, Row #0: 4 4 5 9 15 26 26 26 AnnexRatio: 4.3
4.5 4.8 5.2 6.6 3.8 3.8 3.8
DQT, Row #1: 4 4 5 10 19 26 26 26 AnnexRatio: 4.5
5.3 5.2 6.6 5.2 3.8 3.8 3.8
DQT, Row #2: 5 5 8 9 26 26 26 26 AnnexRatio: 4.8
5.2 7.0 11.0 3.8 3.8 3.8 3.8
DQT, Row #3: 9 10 9 13 26 26 26 26 AnnexRatio: 5.2
6.6 11.0 7.6 3.8 3.8 3.8 3.8
DQT, Row #4: 15 19 26 26 26 26 26 26 AnnexRatio: 6.6
5.2 3.8 3.8 3.8 3.8 3.8 3.8
DQT, Row #5: 26 26 26 26 26 26 26 26 AnnexRatio: 3.8
3.8 3.8 3.8 3.8 3.8 3.8 3.8
DQT, Row #6: 26 26 26 26 26 26 26 26 AnnexRatio: 3.8
3.8 3.8 3.8 3.8 3.8 3.8 3.8
DQT, Row #7: 26 26 26 26 26 26 26 26 AnnexRatio: 3.8
3.8 3.8 3.8 3.8 3.8 3.8 3.8
Approx quality factor = 88.24 (scaling=23.52 variance=21.42)

I don't understand the "AnnexRatio" data JPEGsnoop is adding to each
row. Anyone have an explanation on how to translate the im.quantization
values to the JPEGsnoop values? Or am I looking at two different types
of "quantization" tables?

Roger

 
Reply With Quote
 
Terry Reedy
Guest
Posts: n/a
 
      03-05-2007

"Roger" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
| Max Erickson wrote:
| > I don't know what the format is, etc, but jpegs I open with PIL have a
| > quantization attribute, e.g:
| >
| >>>> im.quantization

| Thank you, I wasn't aware of the quantization method. I was unable to
| find any documentation for it.

The builtin dir(ob) function returns a list of attributes of ob. Great for
discovering things that are not documented.

tjr



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Windows freeware to edit & create EXIF data for JPEG photos Crusader Digital Photography 23 07-10-2007 06:09 PM
How to add GPS data to a JPEG file (Exif) PGPS Digital Photography 3 06-10-2007 10:52 AM
Alternatives for Extracting EXIF and JPEG Data from Images Roger Python 0 03-04-2007 09:03 PM
Can the EXIF data in a JPEG be nulled out? secheese Digital Photography 7 12-16-2004 08:19 AM
Converting JPEG to TIFF...keep EXIF data? Paul Crowder Digital Photography 7 07-28-2004 07:54 PM



Advertisments