Извлечь изображения из PDF

Извлеките все встроенные изображения из PDF и скачайте их по отдельности или одним .zip. Без загрузки.

Перетащите PDF сюда или
  1. Перетащите PDF или нажмите «выбрать файл».
  2. Нажмите «Извлечь изображения» — появится сетка миниатюр.
  3. Нажмите на любую миниатюру, чтобы скачать это изображение, или «Скачать все как .zip» для архива.
  4. Изображения сохраняются в PNG; исходная кодировка сначала декодируется в canvas.
Что это делает?

Обходит каждую страницу PDF, находит каждую операцию paintImageXObject и извлекает базовый битмап изображения. Каждое извлечённое изображение нормализуется в PNG через canvas — JPEG-источники теряют исходное сжатие, но выходные пиксели идентичны тому, что отрендерил PDF. Изображения, хранящиеся в неподдерживаемых кодеках (JBIG2, CCITT для факсов, JPX для JPEG 2000), учитываются в счётчике, но не декодируются — для них потребовались бы специализированные кодек-библиотеки помимо pdfjs-dist.

Распространённые проблемы

Извлечение изображений из PDF фундаментально зависит от кодека. Большинство PDF работают — это шаблоны, где извлечение может дать неожиданные результаты.

  • Неподдерживаемые кодеки изображений. JBIG2 (некоторые отсканированные документы), CCITT (факс-стиль сканирования) и JPEG 2000 (JPX) не декодируются. Строка статуса сообщает, сколько было пропущено. Чтобы извлечь их, рендерите через /pdf-to-images — он растеризует всю страницу, включая изображение.
  • Исходное качество JPEG потеряно. Изображения экспортируются в PNG, чтобы сохранить прозрачность и избежать артефактов двойного сжатия. Если ваш источник был JPEG, встроенным в PDF, вывод PNG больше, но идентичен по пикселям тому, что декодировал pdf-lib.
  • Встроенные изображения пропущены. Некоторые PDF используют данные встроенных изображений (операторы BI/ID/EI) вместо XObjects — обычно очень маленькие изображения. v1 не извлекает их. Большинство фотографий и скриншотов — XObjects, и они извлекаются корректно.
  • Одно изображение, несколько раз. PDF часто ссылаются на один XObject изображения с нескольких страниц. v1 извлекает изображение один раз на каждый вызов paintImageXObject, поэтому дублированный логотип появится один раз на использование. Дедуплицируйте по имени файла или хешу при необходимости.
  • Зашифрованные PDF. PDF, защищённые паролем, нельзя открыть без пароля. Прогоните их через /pdf-unlock сначала, если у вас есть пароль владельца.
  • Очень большие PDF. Каждое извлечённое изображение остаётся в памяти браузера, пока вы не очистите или не уйдёте со страницы. PDF с сотнями изображений высокого разрешения могут использовать сотни МБ ОЗУ. Используйте загрузку .zip оперативно и нажимайте Очистить по завершении.
Часто задаваемые вопросы

Почему мои изображения PNG, а не JPG?

PNG сохраняет прозрачность и избегает артефактов перекодирования. Пиксели те же, что и в оригинале; файл больше, потому что PNG — без потерь. Чтобы сэкономить место, прогоните результат через /image-compress в режиме WebP.

Как узнать, с какой страницы каждое изображение?

Имена файлов следуют шаблону `pageN-imgM.png` — N — номер исходной страницы, M — порядковый номер на этой странице. Сортируйте по имени файла, чтобы увидеть порядок их появления в PDF.

Будут ли зашифрованные изображения выходить искажёнными?

Данные изображений внутри незашифрованного PDF не зашифрованы отдельно — они декодируются нормально. Если сам PDF зашифрован, инструмент не сможет его прочитать вообще (см. примечание о зашифрованных PDF выше).

Почему счётчик выше, чем видимые изображения?

Некоторые PDF используют несколько XObjects изображений на одно видимое изображение (например, альфа-канал soft-mask, хранящийся как отдельное полутоновое изображение). v1 извлекает каждое — soft-mask делает основное изображение правильным при композитинге, но сам по себе выглядит как чёрно-белый силуэт.

Загружается ли мой PDF?

Нет. Всё работает в вашем браузере — ваш PDF парсится pdfjs-dist, а битмапы изображений рендерятся через canvas, всё на стороне клиента. Никаких сетевых запросов не делается.

PDF какого размера я могу извлекать?

До примерно 100 МБ PDF, прежде чем браузер начнёт работать медленно. Жёсткое ограничение — память вашей вкладки; если извлечение упадёт по OOM, разделите PDF через /pdf-split и обрабатывайте каждую часть отдельно.