Зображення PNG (.png)
Рекомендація СтандартPortable Network Graphics (PNG): це растровий формат зображень без патентних обмежень, який підтримує стиснення без втрат, індексовані кольори й альфа-канал зі змінним рівнем прозорості.
Конвертувати з PNG у JPG
Безкоштовний конвертер з PNG у JPG у браузері. Миттєво конвертуйте файли на своєму пристрої.
Стиснути PNG онлайн
Приватно - файли ніколи не залишають ваш пристрій
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли PNG, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли PNG, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
89 50 4E 47 0D 0A 1A 0AПОДАННЯ В ASCII: .PNG....
Стандартизація: Рекомендація W3C (1996) / ISO/IEC 15948:2004
Технічні характеристики
| Архітектура контейнера | Двійковий контейнер на основі блоків; кожен блок має 4-байтову контрольну суму CRC32. |
| Стиснення | Deflate (LZ77 + кодування Хаффмана) із 5 предиктивними фільтрами рядків (None, Sub, Up, Average, Paeth) |
| Порядок байтів (Endianness) | Порядок байтів від старшого до молодшого (Big-Endian) для довжин блоків, розмірів і контрольних сум CRC |
| Колірні простори | sRGB, Display P3, Індексована палітра (1-8 біт), Відтінки сірого, Повноколірний режим (24/48 біт) |
| Канали та структура | RGB + Альфа (до 16 біт на канал / 64-бітний RGBA) |
| Максимальні розміри | 2,147,483,647 x 2,147,483,647 пікселів (4-байтові беззнакові цілі числа) |
| Прозорість | Змінний канал прозорості альфа з глибиною 8 або 16 біт |
| Потокове та прогресивне завантаження | Алгоритм чергування Adam7 із 7 проходами забезпечує поступове відображення двовимірного зображення по рядках сканування. |
Технічна матриця порівняння: PNG проти конкурентів
| Технічний атрибут | PNG (Поточний) | WebP | AVIF | JPEG |
|---|---|---|---|---|
| Тип стиснення | Повністю без втрат (Deflate + 2D предиктивні фільтри) | З втратами (VP8) та без втрат (VP8L) | З втратами (AV1 intra) та без втрат | Лише зі втратами (дискретне косинусне перетворення) |
| Альфа-прозорість | Повний 8-бітний / 16-бітний змінний альфа-канал | Підтримується 8-бітний альфа-канал | Підтримується 8-бітний / 10-бітний / 12-бітний альфа-канал | Підтримка каналу прозорості відсутня |
| Розмір файлу (фотографії) | Для фотографій часто більший за формати зі втратами; відносний розмір залежить від зображення й кодера. | Може бути меншим за JPEG; результат залежить від зображення та кодера. | Може бути меншим за JPEG; результат залежить від зображення та кодера. | Середній базовий рівень |
| Розмір файлу (графіка/UI) | Вкрай компактний для знімків екрана, лінійної графіки та тексту | Чудовий режим без втрат | Хороший, але кодування повільніше | Низька якість (створює ореоли вздовж різких меж) |
| Сумісність з браузерами | 100% універсальна у всіх браузерах з 1998 року | 97%+ підтримка сучасними браузерами | 93%+ підтримка сучасними браузерами | 100% універсальна |
Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі
Переглядач зображень виводить повідомлення «Fatal error: Not a valid PNG file» або не може відкрити файл.
Першопричина: Перші 8 байтів були змінені режимом передачі ASCII (перетворення 0x0D 0x0A на 0x0A або 0x0D 0x0D 0x0A).
Відновлення: Відкрийте файл у шістнадцятковому редакторі та перевірте, чи відповідають перші 8 байтів послідовності «89 50 4E 47 0D 0A 1A 0A». Відновлення цих точних 8 байтів заголовка часто дає змогу відновити зображення.
Утиліта pngcheck повідомляє «CRC error in chunk IDAT» або зображення завантажується частково, з пошкодженими нижніми рядками.
Першопричина: Пошкодження бітів у стисненому потоці даних zlib або недійсна контрольна сума CRC32 у блоці IDAT.
Відновлення: Використовуйте pngcheck -f або утиліти відновлення потоку Deflate, щоб повторно обчислити правильні значення CRC32 або розпакувати вцілілі рядки до пошкодженого блоку.
Зображення без проблем відображається в програмах для настільних комп’ютерів, але не відображається в програмах для iOS.
Першопричина: iOS очікує формат із переставленими байтами CgBI від Apple або нестандартні блоки колірного простору.
Відновлення: Нормалізуйте зображення за допомогою команди 'pngcrush -revert-iphone-optimizations', щоб відновити стандартний порядок RGBA від W3C.
Аналіз безпеки та векторів атак на парсери
PNG підтримується багатьма операційними системами та програмами. До загроз безпеці належать вичерпання пам’яті декодера та зловмисні допоміжні блоки.
Відомі вектори атак
- Завеликі блоки метаданих tEXt і zTXt, що викликають відмову в обслуговуванні через вичерпання пам'яті (OOM) у декомпресорах без пісочниці.
- Вразливості переповнення буфера купи в застарілих версіях libpng (наприклад, CVE-2015-8126 у png_set_PLTE).
- Атаки декомпресії шляхом піксельної повені (pixel flood), коли зображення з маленьким розміром файлу заявляє величезні розміри (наприклад, 100 000 x 100 000 пікселів).
- Стеганографічна ексфільтрація із приховуванням зашифрованих корисних навантажень у допоміжних приватних блоках (наприклад, eXIf або користувацькі типи блоків).
Рекомендації щодо захисту: Завжди перевіряйте розміри зображення перед виділенням буферів пікселів у пам’яті. Під час завантаження користувачами видаляйте несуттєві допоміжні блоки (eXIf, tEXt) за допомогою засобу очищення, безпечного для пам’яті.
Історичне походження та віхи
Основні переваги
- PNG використовує стиснення без втрат, тому кодування незміненого зображення не спричиняє втрат від стиснення; редагування або перетворення кольорів усе ж може змінити значення пікселів.
- Плавна 8-бітна прозорість альфа-каналу дає змогу акуратно накладати зображення на складний фон.
- Блоки корекції гами й кольоровості забезпечують однакове відображення на різних моніторах.
Технічні обмеження та недоліки
- Значно більший розмір файлів порівняно з сучасними форматами з втратами, такими як WebP або AVIF, для фотографічного контенту.
- Відсутність вбудованої підтримки багатокадрової анімації у стандартному PNG (потрібне розширення APNG).
- Висока глибина кольору (16 біт на канал) створює величезні нестиснені буфери декодування в пам'яті.
Цікаві технічні факти
- 8-байтний магічний заголовок був спеціально розроблений для виявлення пошкоджень закінчень рядків CR/LF під час FTP-передач.
- Неофіційна рекурсивна розшифровка PNG: «PNG’s Not GIF».
- Apple використовує власний блок CgBI у PNG-файлах застосунків iOS. Він переставляє канали RGBA у формат BGRA для безпосереднього відображення зображення на GPU.
Поширені технічні запитання
Чому розмір файлу PNG іноді збільшується після збереження в редакторах зображень?
Різні програмні пакети використовують різні рівні стиснення Deflate та евристику предиктивних фільтрів рядків. Програми на кшталт Photoshop часто додають нестиснені колірні профілі, блоки метаданих XMP та неоптимальні розміри блоків IDAT. Спеціалізовані інструменти, такі як File2File.app Compressor, повторно оцінюють усі 5 фільтрів рядків для досягнення мінімального розміру файлу.
У чому різниця між PNG-8 та PNG-24?
PNG-8 використовує індексовану колірну палітру до 256 кольорів (подібно до GIF), завдяки чому файли дуже малі й придатні для простих іконок. PNG-24 підтримує 16,7 мільйона кольорів (повноколірне зображення, 8 біт на канал), а PNG-32 додає 8-бітний канал альфа-прозорості.
Чому PNG має 5 предиктивних фільтрів рядків?
Deflate стискає повторювані послідовності байтів. Оскільки значення пікселів на фотографіях або градієнтах змінюються поступово, PNG фільтрує кожен рядок (None, Sub, Up, Average, Paeth), обчислюючи різниці між сусідніми пікселями. Так дані градієнта перетворюються на послідовності байтів, значення яких близькі до нуля та які значно краще стискаються за допомогою Deflate.
Чи підтримує PNG колірний простір CMYK для комерційного друку?
Ні. Офіційна специфікація W3C PNG навмисно обмежує типи кольорів градаціями сірого (Grayscale), індексованими (Indexed) та RGB. Професійні робочі процеси друку, що вимагають CMYK, повинні використовувати контейнери TIFF або PDF.
Пов'язані пари конвертації PNG
Конвертація растрових зображень PNG у формат JPEG зменшує розмір файлу за рахунок застосування стиснення з втратами, що прискорює завантаження зображень на вебсайтах і економить місце на дисках.
Конвертування растрового зображення JPEG із втратами у растрове зображення PNG без втрат запобігає подальшому погіршенню якості під час повторного збереження та додає підтримку прозорості альфа-каналу.
Перетворення PNG на WebP може зменшити розмір файлу зі збереженням прозорості; результат залежить від стиснення з втратами чи без них і вмісту зображення.
Перетворення WebP на PNG створює нерухоме зображення для програм із підтримкою PNG; анімація WebP не зберігається, а втрачені деталі джерела зі стисненням із втратами не відновлюються.
Конвертація HEIC у PNG перетворює фотографії зі стисненням HEVC (з втратами) у широко підтримувані графічні файли без втрат.
Перетворення файлів векторної графіки SVG у растрові зображення PNG перетворює масштабовану графіку на основі коду на фіксовану сітку пікселів для універсальної сумісності з додатками.
Вбудуйте растрові зображення PNG у векторний контейнер SVG з XML-розміткою для адаптивного масштабування на вебсторінках і роботи з векторними макетами.
Конвертуйте графіку Adobe Photoshop PSD у файли PNG без втрати якості зі збереженням повної прозорості альфа-каналу - безпосередньо у браузері, без передавання даних на сервер.