From 3e8fc078db1aeedd104b7a4af4444cb38769da26 Mon Sep 17 00:00:00 2001 From: Niles Rogoff Date: Sat, 4 Feb 2017 19:57:56 -0500 Subject: [PATCH] 1.1 released, comes with damaged flag --- .gitignore | 0 libpme.py | 23 ++++++++++++++--------- readme.md | 5 +++++ setup.cfg | 0 setup.py | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 libpme.py mode change 100644 => 100755 readme.md mode change 100644 => 100755 setup.cfg diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/libpme.py b/libpme.py old mode 100644 new mode 100755 index 940405b..fecc5ee --- a/libpme.py +++ b/libpme.py @@ -3,34 +3,39 @@ # Niles Rogoff 2016 import zlib, copy class color_types(object): - GREYSCALE = 0 - RGB = 2 - PALETTE = 3 - GREYSCALE_WITH_ALPHA = 4 - RGB_WITH_ALPHA = 6 + GREYSCALE = 0 + RGB = 2 + PALETTE = 3 + GREYSCALE_WITH_ALPHA = 4 + RGB_WITH_ALPHA = 6 class PME(object): + def _assert(self, statement): + if not self._damaged: + assert(statement) def _int(self, binary): return int.from_bytes(binary, byteorder="big") def _bytes(self, integer, length): return integer.to_bytes(length, "big") - def __init__(self, filename=False): + def __init__(self, filename=False, damaged=False): + self._damaged = damaged self._init = False self._magic_number = b'\x89PNG\r\n\x1a\n' self.filename = filename self.chunks = [] if filename: f = open(self.filename, "rb") - assert(f.read(8) == self._magic_number) + self._assert(f.read(8) == self._magic_number) while True: length = f.read(4) label = f.read(4) data = f.read(self._int(length)) crc = f.read(4) - self._verify_crc(label, data, crc) + if not self._damaged: + self._verify_crc(label, data, crc) self.chunks.append([length, label, data, crc]) if label == b"IEND": break - assert(self.chunks[0][1] == b"IHDR") + self._assert(self.chunks[0][1] == b"IHDR") self.recalculate_properties() else: self.chunks = [ diff --git a/readme.md b/readme.md old mode 100644 new mode 100755 index 80043a7..4e45c19 --- a/readme.md +++ b/readme.md @@ -128,3 +128,8 @@ In this example, we will draw a red sine wave on a new 100x100 file The output should look something like this: ![](http://i.imgur.com/vfa6lOR.png) + +## Changelog + +### 1.1 +Added the damaged argument to the constructor. If damaged is set to true, it will allow you to open potentially damaged png files, which maybe don't have IDAT as the first chunk, or have invalid CRCs diff --git a/setup.cfg b/setup.cfg old mode 100644 new mode 100755 diff --git a/setup.py b/setup.py index 3a13547..4bb4cd9 100755 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ #from distutils.core import setup from setuptools import setup setup(name='libpme', - version='1.0', + version='1.1', description="PNG metadata editor library", author="Niles Rogoff", author_email="me@niles.xyz",