Извлечь изображения из PDF
Извлеките все встроенные изображения из PDF и скачайте их по отдельности или одним .zip. Без загрузки.
- Перетащите PDF или нажмите «выбрать файл».
- Нажмите «Извлечь изображения» — появится сетка миниатюр.
- Нажмите на любую миниатюру, чтобы скачать это изображение, или «Скачать все как .zip» для архива.
- Изображения сохраняются в 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 и обрабатывайте каждую часть отдельно.