diff --git a/pypdf/filters.py b/pypdf/filters.py index 5e6a10f782..137e3603a3 100644 --- a/pypdf/filters.py +++ b/pypdf/filters.py @@ -190,16 +190,19 @@ def _decode_png_prediction(data: bytes, columns: int, rowlength: int) -> bytes: filter_byte = rowdata[0] if filter_byte == 0: + # PNG None Predictor pass elif filter_byte == 1: + # PNG Sub Predictor for i in range(bpp + 1, rowlength): rowdata[i] = (rowdata[i] + rowdata[i - bpp]) % 256 elif filter_byte == 2: + # PNG Up Predictor for i in range(1, rowlength): rowdata[i] = (rowdata[i] + prev_rowdata[i]) % 256 elif filter_byte == 3: + # PNG Average Predictor for i in range(1, bpp + 1): - # left = 0 floor = prev_rowdata[i] // 2 rowdata[i] = (rowdata[i] + floor) % 256 for i in range(bpp + 1, rowlength): @@ -207,12 +210,9 @@ def _decode_png_prediction(data: bytes, columns: int, rowlength: int) -> bytes: floor = (left + prev_rowdata[i]) // 2 rowdata[i] = (rowdata[i] + floor) % 256 elif filter_byte == 4: + # PNG Paeth Predictor for i in range(1, bpp + 1): - # left = 0 - up = prev_rowdata[i] - # up_left = 0 - paeth = up - rowdata[i] = (rowdata[i] + paeth) % 256 + rowdata[i] = (rowdata[i] + prev_rowdata[i]) % 256 for i in range(bpp + 1, rowlength): left = rowdata[i - bpp] up = prev_rowdata[i]