5d957e7be9
На «Запускаем Ansible» 3-го изд. 10 из 593 картинок — блоки с b["ext"]=="png" и colorspace=4, но реальные байты — CMYK JPEG (FFD8, подтверждено file). Запись b["image"] как есть под именем .png давала файл, который pngquant и часть читалок отказывались декодировать. _image_png() декодирует сырые байты через pymupdf.Pixmap (MuPDF определяет формат по содержимому, не по чужому ext), при colorspace не Gray/RGB конвертирует в RGB, и всегда отдаёт настоящий PNG. На отказе декодирования — откат к исходным байтам, не падать. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>