Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .github/workflows/github-ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@ jobs:
runs-on: ubuntu-22.04
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14-dev"]
use-crypto-lib: ["cryptography"]
include:
- python-version: "3.8"
- python-version: "3.9"
use-crypto-lib: "pycryptodome"
- python-version: "3.8"
- python-version: "3.9"
use-crypto-lib: "none"
steps:
- name: Update APT packages
Expand All @@ -83,14 +83,14 @@ jobs:
key: cache-downloaded-files
- name: Setup Python
uses: actions/setup-python@v5
if: matrix.python-version == '3.8' || matrix.python-version == '3.9' || matrix.python-version == '3.10'
if: matrix.python-version == '3.9' || matrix.python-version == '3.10'
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: '**/requirements/ci.txt'
- name: Setup Python (3.11+)
uses: actions/setup-python@v5
if: matrix.python-version == '3.11' || matrix.python-version == '3.12' || matrix.python-version == '3.13'
if: matrix.python-version != '3.9' && matrix.python-version != '3.10'
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
Expand All @@ -102,11 +102,11 @@ jobs:
- name: Install requirements (Python 3)
run: |
pip install -r requirements/ci.txt
if: matrix.python-version == '3.8' || matrix.python-version == '3.9' || matrix.python-version == '3.10'
if: matrix.python-version == '3.9' || matrix.python-version == '3.10'
- name: Install requirements (Python 3.11+)
run: |
pip install -r requirements/ci-3.11.txt
if: matrix.python-version == '3.11' || matrix.python-version == '3.12' || matrix.python-version == '3.13'
if: matrix.python-version != '3.9' && matrix.python-version != '3.10'
- name: Remove pycryptodome and cryptography
run: |
pip uninstall pycryptodome cryptography -y
Expand Down
4 changes: 2 additions & 2 deletions requirements/ci-3.11.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#
cffi==1.17.1
# via cryptography
coverage[toml]==7.6.4
coverage[toml]==7.10.1
# via
# -r requirements/ci.in
# pytest-cov
Expand All @@ -30,7 +30,7 @@ mypy-extensions==1.0.0
# via mypy
packaging==24.1
# via pytest
pillow==11.0.0
pillow==11.3.0
# via
# -r requirements/ci.in
# fpdf2
Expand Down
2 changes: 1 addition & 1 deletion tests/bench.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ def image_new_property(data):
]
assert len(reader.pages[0].images.items()) == 36
assert reader.pages[0].images[0].name == "I0.png"
assert len(reader.pages[0].images[-1].data) == 15168
assert len(reader.pages[0].images[-1].data) > 10000
assert reader.pages[0].images["/TPL1", "/Image5"].image.format == "JPEG"
assert (
reader.pages[0].images["/I0"].indirect_reference.get_object()
Expand Down
11 changes: 5 additions & 6 deletions tests/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,8 +348,8 @@ def test_pa_image_extraction():
assert images[0].name == "Im1.png"

# Ensure visual appearance
data = get_data_from_url(name="issue-1801.png")
assert data == images[0].data
expected_data = BytesIO(get_data_from_url(name="issue-1801.png"))
assert image_similarity(expected_data, images[0].image) == 1


@pytest.mark.enable_socket
Expand Down Expand Up @@ -702,13 +702,12 @@ def test_flate_decode__not_rectangular(caplog):
decode_parms[NameObject("/Predictor")] = NumberObject(15)
decode_parms[NameObject("/Columns")] = NumberObject(4881)
actual = FlateDecode.decode(data=data, decode_parms=decode_parms)
actual_image = BytesIO()
Image.frombytes(mode="1", size=(4881, 81), data=actual).save(actual_image, format="png")
actual_image = Image.frombytes(mode="1", size=(4881, 81), data=actual)

url = "https://github.com/user-attachments/assets/c5695850-c076-4255-ab72-7c86851a4a04"
name = "issue3241.png"
expected = get_data_from_url(url, name=name)
assert actual_image.getvalue() == expected
expected_data = BytesIO(get_data_from_url(url, name=name))
assert image_similarity(expected_data, actual_image) == 1
assert caplog.messages == ["Image data is not rectangular. Adding padding."]


Expand Down
10 changes: 9 additions & 1 deletion tests/test_images.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,15 @@ def test_image_new_property():
]
assert len(reader.pages[0].images.items()) == 36
assert reader.pages[0].images[0].name == "I0.png"
assert len(reader.pages[0].images[-1].data) == 15168

expected_image_url = "https://github.com/user-attachments/assets/3bf25760-2113-4e25-b4c2-fc1d3a84a263"
expected_image_name = "pdf_font_garbled_image30.png"
expected_image_data = BytesIO(get_data_from_url(url=expected_image_url, name=expected_image_name))
assert image_similarity(
expected_image_data,
reader.pages[0].images[-1].image
) == 1

assert reader.pages[0].images["/TPL1", "/Image5"].image.format == "JPEG"
assert (
reader.pages[0].images["/I0"].indirect_reference.get_object()
Expand Down
Loading