aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/contentviews/image/image_parser.py
blob: e523def563db8ac0e886e5952837568fc3df6fbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import typing

from kaitaistruct import KaitaiStream

from . import png

Metadata = typing.List[typing.Tuple[str, str]]

def parse_png(data: bytes) -> Metadata:
    img = png.Png(KaitaiStream(data))
    parts = [tuple(['Format', 'Portable network graphics'])]
    parts.append(tuple(['Size', str(img.ihdr.width) + " x " + str(img.ihdr.height) + " px"]))
    for chunk in img.chunks:
        if chunk.type == 'gAMA':
            parts.append(tuple(['gamma', str(chunk.body.gamma_int / 100000)]))
        elif chunk.type == 'pHYs':
            aspectx = chunk.body.pixels_per_unit_x
            aspecty = chunk.body.pixels_per_unit_y
            parts.append(tuple(['aspect', str(aspectx) + " x " + str(aspecty)]))
        elif chunk.type == 'tEXt':
            parts.append(tuple([chunk.body.keyword, chunk.body.text]))
    return parts