TIFF не обов’язково має лише одне зображення: покадрова обробка не пропускатиме сторінки.

Після відкриття TIFF було оброблено лише першу сторінку. Програма не повідомила про помилку, але решту вмісту пропустили. Для багатокадрових форматів «успішне відкриття файлу» та «повна обробка файлу» — це дві різні речі. Портал має визначити кількість сторінок, перш ніж приймати рішення щодо посторінкової обробки, бюджетних обмежень і списків доставки.

TIFF може містити кілька сторінок із зображеннями, і те, що програма відкриває файл, не означає, що кожна сторінка була оброблена. Якщо прочитано лише першу сторінку, програма закінчується нормально, але решта вмісту втрачається. Ця стаття призначена для розробників і працівників, які працюють з документами, яким потрібно пакетно обробляти скановані зображення, багатокадрові зображення або багатосторінкові архіви. Тут пояснюється, як спочатку визначити кількість сторінок, обробити їх кадр за кадром і записати результати кожної сторінки.

Код у цій статті демонструється за допомогою синтетичних зразків і пройшов перевірку зразків в ізольованому середовищі, але це не є гарантією всіх реальних файлів або ефектів продукту. Перед обробкою важливих документів збережіть оригінали та перегляньте їх відповідно до меж і пунктів прийняття в тексті.

Як багатокадровий TIFF не пропускає сторінки? Висновок одним реченням

Спочатку прочитайте номер сторінки та обробіть його кадр за кадром. Результати кожної сторінки мають бути записані, а відсутні сторінки мають бути чітко позначені.

ваша ситуаціяРекомендовані практикипричина
Кожну сторінку потрібно використовувати окремоСкопіюйте поточне зображення під час ітерації або обробіть його негайноОб’єкти фрейму можуть бути пов’язані з основним станом декодування, і пряме збереження посилань може легко впливати одне на одного.
Файл має велику кількість сторінок або високу роздільну здатністьОбробляйте сторінку за сторінкою або використовуйте контрольовані партіїЗберігання всіх кадрів у пам’яті й надалі споживатиме ресурси
Технічні характеристики можуть відрізнятися від сторінки до сторінкиРозмір документа, шаблон і орієнтація сторінка за сторінкоюСторінки в одному документі не обов’язково мають однаковий розмір, і чорно-білі та кольорові сторінки можуть бути змішаними.
Не вдалося обробити сторінкуПерелічіть у списку відсутні сторінки та причиниНе можна просто повернути документ і позначити його як виконане

Копіювати поточне зображення під час ітерації кадрів

ImageSequence.Iterator підходить для повторення кількох кадрів, але об’єкти кадру можуть бути пов’язані з основним станом декодування. Якщо кожна сторінка буде використовуватися окремо, її слід скопіювати під час ітерації або негайно обробити. Не зберігайте посилання на один і той самий змінний об’єкт повторно та очікуйте, що ви отримаєте сторінки, які не впливатимуть одна на одну.

Створіть два кадри TIFF, щоб переконатися, що жодна сторінка не пропущена

from io import BytesIO
from PIL import Image, ImageSequence

first = Image.new("RGB", (12, 8), "white")
second = Image.new("RGB", (12, 8), "black")
stream = BytesIO()
first.save(stream, format="TIFF", save_all=True, append_images=[second])
stream.seek(0)
with Image.open(stream) as document:
    assert document.n_frames == 2
    pages = [frame.copy() for frame in ImageSequence.Iterator(document)]
assert len(pages) == 2
assert pages[0].getpixel((0, 0)) == (255, 255, 255)
assert pages[1].getpixel((0, 0)) == (0, 0, 0)
pages[0].putpixel((0, 0), (255, 0, 0))
assert pages[1].getpixel((0, 0)) == (0, 0, 0)

Тут усі дві сторінки зберігаються в пам’яті, що підходить лише для цього дуже маленького прикладу синтезу. Файли справжнього сканування слід обробляти посторінково або використовувати контрольовані пакети, а результати кожної сторінки слід записувати. Усі кадри високої роздільної здатності не можна копіювати та накопичувати нескінченно довго.

Окрім номера сторінки, існують відмінності між сторінками

В тому самому файлі з кількома кадрами відмінності між сторінками часто більші, ніж можна собі уявити. При посторінковій перевірці рекомендується записувати такі елементи:

демонструватиНавіщо перевіряти сторінку за сторінкоюЩо можна записати
розмірСторінки одного файлу не обов’язково мають однаковий розмірШирина, висота та кількість пікселів
модельЧорно-білі та кольорові сторінки можуть змішуватисяОригінальний режим і стратегія перетворення
напрямокМоже відрізнятися на різних сторінкахЗміна орієнтації на сторінку
статус несправностіПошкодження сторінки не слід ігноруватиНомер сторінки, категорія помилки

Частковий успіх має бути написано чітко

Ви не можете просто повернутися до документа й позначити його як завершене, якщо ви обробили лише дев’ять із десяти сторінок. У списку доставки має бути перераховано сторінки та причини відсутності, що дозволить користувачеві вирішити повторити передачу, обробити їх окремо або прийняти часткову доставку. Найкраще залишити вихідний номер для номера сторінки і не перенумеровувати його через те, що певна сторінка виходить з ладу, інакше користувачеві буде важко повернутися до вихідної сторінки.

Повнота перекладу починається з номера введеної сторінки

Використовуючи робочий процес OmniDoc (портал продуктів) для обробки багатосторінкових сканованих даних, ви можете порівняти список введених сторінок із діапазоном перекладеного вмісту. Однакова кількість сторінок автоматично не підтверджує, що вміст повний, але відсутні сторінки або номери сторінок є цінними попередженнями. Перевірка правильності повинна передувати мовному поліруванню.

📊 Основне порівняння

практикаЗастосовні сценаріїОсновні ризики
Читати тільки першу сторінкунемаєРешта сторінок втрачаються мовчки, і програма не повідомляє про помилку.
Зберігайте посилання на кадр безпосередньо під час ітераціїТільки тимчасовий переглядВміст на різних сторінках може впливати один на одного
Копіюйте сторінку за сторінкою або обробіть негайноКожну сторінку потрібно використовувати окремоПотрібен додатковий запис результатів на сторінку
Зберігайте всі кадри в пам'ятіНевеликий зразок із кількома сторінками та низькою роздільною здатністюБагатосторінкові файли високої роздільної здатності продовжують займати пам’ять

🎯 Який спосіб вам підходить?

Якщо вам потрібно експортувати чи перекладати сторінку за сторінкою

Спочатку підрахуйте кількість сторінок, потім обробіть їх одну за одною та запишіть розмір, режим і результати обробки для кожної сторінки.

Якщо ви маєте справу з великою кількістю сканів із високою роздільною здатністю

Використовуйте контрольовану пакетну обробку, щоб уникнути копіювання всіх кадрів і нескінченного накопичення їх у пам’яті.

Якщо ви хочете доставити іншим

Додайте список відсутніх сторінок і пояснення, чому вони відсутні, а не просто позначайте їх як завершені.

❓ Часті запитання (FAQ)

1. Якщо програма не повідомляє про помилку, чи означає це, що TIFF повністю оброблено?

невизначений. Приклад у статті показує, що програма може закінчитися нормально, коли прочитано лише першу сторінку, а решту сторінок пропущено. Успішне відкриття файлу та його повна обробка — це дві різні речі.

2. Чому посилання кожного кадру не можна зберегти безпосередньо?

Об’єкти фрейму можуть бути пов’язані з основним станом декодування. Щоб використовувати кожну сторінку окремо, копіюйте або обробляйте її відразу під час ітерації та не зберігайте посилання на той самий змінний об’єкт повторно.

3. Чи однакова кількість сторінок означає повний вміст?

Це не можна зробити такий висновок. Однакова кількість сторінок автоматично не доводить, що вміст є повним, але відсутність сторінок або номерів сторінок є ознакою того, що вам потрібно бути пильними, і перевірки цілісності мають передувати поліровці мови.

4. Що робити, якщо не вдається обробити сторінку?

Перелічіть відсутні сторінки та причини помилок у списку доставки та збережіть номер джерела для номера сторінки, дозволяючи користувачеві вирішувати повторно передати, обробити його окремо або прийняти часткову доставку.

📝 Підсумок

Ключ до багатокадрового TIFF полягає в тому, щоб спочатку підтвердити номер сторінки, потім обробити його сторінка за сторінкою та записати результати. Кожна сторінка повинна мати чіткий статус, а відсутні сторінки необхідно виписати.

Спробуйте зараз: завантажте документ, щоб розпочати переклад, зберігаючи вихідний макет

Джерела: Pillow ImageSequence.

Оновлено 2026-11-13