Разное

Структура png файла: Sorry, this page can’t be found.

Содержание

Форматы: PNG

Форматы: PNG


Также известен как: Portable Network Graphics Format












ТипРастровый
ЦветаОт 1-бита до 48-бит
СжатиеРазновидность LZ77
Максимальный размер изображения2Г x 2Г пикселей
Формат чисел«Старший в младшем»
Больше одного изображения в файлеНет
РазработчикТомас Бутелл, Том Лейн и многие другие
ПлатформыВсе
Поддерживается приложениямиМногими коммерческими пакетами и бесплатными пакетами с коммерческой лицензией
См. такжеGIF

Применение:

Формат PNG позволяет хранить без потерь изображения от двухуровневых до 48-битовых
полноцветных. Он специально предназначен для передачи графических данных в сети.


Комментарии:

Формат PNG хорошо продуман и разработан, и скорее всего он заменит формат GIF
от фирмы CompuServe.


Спецификация формата PNG


Исходники



PNG (произносится «Пинг») — растровый формат, предназначенный для хранения и
передачи растровых изображений: черно-белых и альфа данных — до 16 бит, а цветных
— до 48 бит (truecolor). Он использует прогрессивный метод сжатия без потерь,
позволяет сохранять в файле палитру, текстовую информацию и обеспечивает
прозрачность.


Содержание:
Организация файла
Детальное описание
Дополнительная информация


Формат PNG создан, как альтернатива формату GIF от CompuServe, потому что фирма
CompuServe, владея правами на этот формат, запрещало свободное использование
метода сжатия LZW (сжатие, используемое в GIF — файле) в программных продуктах.
(См. статьи на тему юридических
аспектов метода сжатия LZW в Главе 9,
Сжатие Данных
.) В шутку аббревиатуру PNG рекурсивно расшифровывают
— «PNG’s Not GIF» («ПНГ — Не ГИФ»).


PNG создавался как простой и легко распространяемый формат, содержащий в себе
все преимущества формата GIF, абсолютно бесплатный и без всяких лицензионных
прав и разногласий.


PNG и GIF89a обладают следующими свойствами:

  • Формат организован в виде потока данных
  • «Сжатие без потерь»
  • Позволяет хранить индексированные изображения с палитрой до 256 цветов
  • Прогрессивное отображение чересстрочных данных
  • Поддержка «прозрачного цвета»
  • Возможность хранить данные общего и ограниченного доступа.
  • Не зависят от «железа» и платформы


Ниже перечислены преимущества PNG над GIF в общих чертах:

  • Метод сжатия данных не обременён юридическими проблемами
  • Более быстрое прогрессивное отображение чересстрочных схем
  • Расширенные возможности хранения пользовательских данных


А следующие возможности PNG в формате GIF вообще отсутствуют:

  • Хранение полноцветных 48-битовых изображений.
  • Хранение 16-битовых чёрно-белых изображений
  • Полный Альфа-канал
  • Указатель на контрастность
  • CRC — метод обнаружения ошибок в потоке данных
  • Стандартный инструментарий для разработки приложений чтения и записи PNG
  • Стандартный набор тестовых изображений для проверки этих приложений


Но, всё же, некоторые особенности GIF не найдены в PNG версии 1. 0:

  • Возможность хранения нескольких изображений в одном файле.
  • Анимация


В отличие от многих других форматов, создатели которых (2-3 программиста) не
заботятся о дальнейшем его развитии, PNG был создан особым комитетом, в состав
которого вошли заинтересованные в этом специалисты и противники GIF (в список
авторов спецификации PNG версии 1.0 вошли 23 фамилии) во главе с Томасом Бутеллом.


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


PNG файл или поток данных состоит из 8-байтовой опознавательной подписи,
за которой следуют 3 или более независимых блоков данных, соответствующих
определённой структуре. Каждый блок имеет своё собственное определение
внутреннего формата. Они читаются по очереди, от начала к концу файла или
потока данных.


Некоторые другие форматы также используют структуру из блоков данных.
Наиболее известные среди них: GIF, IFF и RIFF. Данные в этих форматах
читаются от начала к концу. Это избавляет от надобности прыгать по файлу,
используя начальную адресацию. Это также позволяет без проблем
использовать эти форматы с сетевыми протоколами и протоколами передачи
данных. Несмотря на то, что эти форматы обычно описываются, как форматы
файлов, более точным определением будет поток данных, сохранённый в файле.


В формате PNG определено 4 типа стандартных блоков, иначе именуемых
критические блоки, которые должны поддерживаться любой программой
чтения и записи PNG. Далее следует перечень этих блоков:

Заголовочный блок (IHDR)


Заголовочный блок содержит основную информацию о данных
изображения и должен быть первым блоком в потоке данных PNG (не
допускается более одного заголовочного блока).

Блок палитры (PLTE)


Палитра несёт в себе данные таблицы цветов, связанный с данными
изображения. Этот блок присутствует только если данные изображения
используют палитру и должен находиться перед этими данными.

Данные изображения (IDAT)


Блок данных изображения содержит в себе само изображение, и допускается
несколько таких блоков в потоке данных, причём все они должны вплотную
примыкать друг к другу.

Замыкающий блок изображения (IEND)


Замыкающий блок изображения должен находиться в конце файла или потока
данных PNG.


Среди этих блоков, IHDR, IDAT и IEND должны присутствовать в любом потоке
данных PNG.


Рассмотрим 2 типичных вида PNG файлов: один с цветовой палитрой, один
без.






Подпись


Блок IHDR


Блок IDAT


Блок IEND







Подпись


Блок IHDR


Блок PLTE


Блок IDAT


Блок IEND


Как видите, разница межу 2 типичными форматами PNG лишь в наличии блока с
палитрой.


Необязательные блоки, именуемые вспомогательные блоки, могут быть
игнорированы программой чтения и необязательны для включения в файл
программами записи PNG файлов. Тем не менее, отсутствие поддержки
вспомогательных блоков может сказаться на непрвальном отображении
изображения PNG. Оно может быть слишком затемнённым, слишком светлым или
вообще отображаться в совершенно другом виде, не задуманном создателем
этого изображения. Рекомендуется поддержка и использование большинства
стандартных и вспомогательных блоков (в частности, блока Контрастности
Изображения) программами, работающими с PNG.


Вместе критические и вспомогательные блоки, определённые в спецификации
PNG, соответствуют термину стандартные блоки. Люди, создающие
разные спецификации PNG, ведут список дополнительных блоков, именуемых иначе
специальные блоки, подлежащие огласке. Эти блоки имеют
специальное применение и используются гораздо реже стандартных блоков.
Список этих специальных блоков время от времени должен обновляться.
Некоторые приложения могут создавать частные, закрытые для общего
доступа блоки
для данных, которые не должны читаться другими
приложениями.


Ниже вкратце описаны все стандартные и специальные блоки, объявленные в
издании 1.0 спецификации PNG и связанной с ней документации. Блоки
распределены в относительном (но не единственно возможном) порядке, в
котором они могут быть организованы в потоке данных PNG.





















Таблица PNG-1: Блоки PNG


Тип блока


Многократный


Необязательный


Положение в файле


IHDR


Нет


Нет


Первый блок


cHRM


Нет


Да


Перед PLTE и IDAT


gAMA


Нет


Да


Перед PLTE и IDAT


sBIT


Нет


Да


Перед PLTE и IDAT


PLTE


Нет


Да


Перед IDAT


bKGD


Нет


Да


После PLTE и перед IDAT


hIST


Нет


Да


После PLTE и перед IDAT


tRNS


Нет


Да


После PLTE и перед IDAT


oFFs


Нет


Да


Перед IDAT


pHYs


Нет


Да


Перед IDAT


sCAL


Нет


Да


Перед IDAT


IDAT


Да


Нет


Вместе с остальными блоками IDAT


tIME


Нет


Да


В любом месте


tEXt


Да


Да


В любом месте


zTXt


Да


Да


В любом месте


fRAc


Да


Да


В любом месте


gIFg


Да


Да


В любом месте


gIFt


Да


Да


В любом месте


gIFx


Да


Да


В любом месте


IEND


Нет


Нет


Последний блок



Подпись PNG длиной в 8 байт содержит информацию для определения файла или
потока данных, в согласии со спецификацией PNG.


typedef struct _PngSignature
{
    BYTE Signature[8];  /* Идентификатор (всегда 89504E470D0A1A0Ah) */
} PNGSIGNATURE;


Подпись содержит 8 байт со значениями: 89h 50h 4Eh 47h 0Dh 0Ah 1Ah 0Ah
(«‰PNG\r\n\n»). Эта на вид беспорядочная последовательность значений
имеет довольно много практических назначений. Значение первого байта — 89h
— 8-битовое значение, указывающее на то, что файл содержит двоичные
данные. Если бы каждый 8-й бит был бы вырван из файла (7-битовый канал
данных), то первый байт принял бы значение 09h, что указало бы на причину,
по которой испорчен файл.


Остальные байты имеют следующее назначение:

  • Позволяют визуально определить поток данных (50h 4Eh 47h — «PNG»)
  • Определяют передачу файла, изменяющую последовательность символов
    «новой строки» («\r\n» становится «\r», «\n» или «\n\r»)
  • Останавливает чтение потока данных PNG в операционной системе MS-DOS
    (Control-Z [«»])
  • Определяет CR/LF преобразовательные ошибки передачи файлов
    (завершающий символ новой строки)


После подписи следуют 3 или более блоков данных PNG. Все блоки PNG имеют
одинаковый основной формат и могут содержать переменное количество данных.


typedef struct _PngChunk
{
    DWORD DataLength;   /* Размер поля данных в байтах */
    DWORD Type;         /* Код, идентифицирующий тип блока */
    BYTE  Data[];       /* Собственно данные, хранящиеся в блоке */
    DWORD Crc;          /* CRC-32 значение полей Type и Data */
} PNGCHUNK;


DataLength — число байтов в поле Data. Это значение может варьироваться от
0 до 231-1.


Type — 4-х байтовый код, идентифицирующий тип хранящихся данных в блоке.
Каждый байт в этом поле может содержать значение заглавного или прописного
латинского символа таблицы ASCII (A-Z, a-z). На пример, тип блока IHDR
будет выражен значением 69484452h в поле Type. Программа чтения PNG
должна рассматривать коды Type как 32-битовые буквенные значения, не
являющиеся символьными строками. Возможность чтения кодов типов как
символов таблицы ASCII существует лишь для удобства человеку.


Поле Data — собственно данные, хранящиеся в блоке. Это поле может иметь
нулевую длину, если не существует связанных с ним данных.


Crc — CRC-32 значение, просчитываемое для полей Type и Data. Это значение
используется для определения, являются ли данные повреждёнными. В PNG
используется алгоритм CRC, определённый в ISO 3309 и ITU-T V.42.


Блоки бывают размером от 12 байт (не содержат данных) до (231-1)+12
байт. Блоки всегда выравниваются по границам байтов, и поэтому никогда не
требуется выравнивание заполнением.

Критические блоки



Этот раздел описывает стандартные блоки, которые должны поддерживаться
любой программой чтения и записи PNG.

Заголовочный блок



Заголовочный блок содержит информацию о данных изображения в PNG файле.
Этот блок должен быть первым блоком в потоке данных PNG и следует
непосредственно за подписью PNG. Область данных заголовочного блока
составляет 13 байт и имеет следующий формат:


typedef struct _IHDRChunk
{
    DWORD Width;        /* Ширина изображения в пикселях */
    DWORD Height;       /* Высота изображения в пикселях */
    BYTE BitDepth;      /* Количество битов на пиксель и образец */
    BYTE ColorType;     /* Индикатор интерпретации цвета */
    BYTE Compression;   /* Индикатор типа сжатия */
    BYTE Filter;        /* Индикатор типа фильтра */
    BYTE Interlace;     /* Тип использованной схемы чересстрочной развёртки */
} IHDRCHUNK;


Поля Width и Height — высота и ширина растрового изображения в пикселях.
Принимают значения от 1 до 231-1.


BitDepth — количество битов на пиксель для изображений с индексированными
цветами и количество битов на образец для чёрно-белых изображений и
полноцветных изображений (24 бита). У индексированных изображений
BitDepth может принимать значения 1, 2, 4 и 8. У чёрно-белых — 1, 2, 4, 8
и 16. У полноцветных изображений без альфа данных, а также у чёрно-белых
изображений с альфа данными, BitDepth может принимать только значения 8 и 16.


ColorType определяет способ интерпретации данных изображения.
Принимаемые значения (вид изображения): 0 (чёрно-белое), 2
(полноцветное), 3 (индексированное изображение), 4 (чёрно-белое с
альфа данными) и 6 (полносветное с альфа данными).


Compression определяет вид сжатия данных изображения. В настоящее время
единственное допустимое значение — 0, означающее, что использован метод
сжатия Defalte. Другие методы сжатия будут определены в будущих
добавлениях PNG.


Filter определяет вид фильтрования, применённый к данным изображения перед
сжатием. На сегодняшний день, единственное допустимое значение — 0,
означающее, что был применён метод фильтрования adaptive, описанный в
спецификации PNG. Другие методы фильтрования будут определены в будущих
добавлениях PNG. Значение поля filter не указывает, были ли данные
изображения профильтрованы; на это указывает байт filter type в начале
каждой строки развёртки. Данные изображения не обязательно должны быть
профильтрованы перед сжатием.


Interlace определяет чересстрочный алгоритм, используемый для хранения
данных изображения, или, если быть более точным, порядок передачи
пиксельных данных. Принимаемые значения — 0 (нет чересстрочности) и 1
(чересстрочность Adam7).

Палитра



Палитра (PLTE) всегда присутствует в потоках данных PNG, содержащих
изображения с индексированными цветами (когда поле Color заголовочного
блока имеет значение 3). Полноцветные потоки данных PNG (значения поля
Color — 2 и 6) также могут содержать палитру, предназначенную для разбития
данных изображения на подгруппы приложениями, не поддерживающими
полноцветную палитру. Поток данных PNG не может содержать более одной палитры.


Палитра может быть размером от 3 до 768 байт и имеет следующий формат:


typedef struct _PLTEChunkEntry
{
    BYTE Red;           /* Красный компонент (0 = чёрный, 255 = максимум оттенка) */
    BYTE Green;         /* Зелёный компонент (0 = чёрный, 255 = максимум оттенка) */
    BYTE Blue;          /* Синий компонент (0 = чёрный, 255 = максимум оттенка) */
} PLTECHUNKENTRY;
PLTECHUNKENTRY PLTEChunk[];


PLTEChunk — массив, содержащий от 1 до 256 элементов, каждый из которых
содержит 3 поля: Red, Green и Blue, хранящие соответственно значения
красного, зелёного и синего цветов для данного элемента палитры.

Блок данных изображения



блок данных изображения (IDAT) содержит собственно данные изображения. В
соответствии со спецификацией PNG эти данные всегда хранятся в сжатом
виде. Данные изображения могут быть разбиты на несколько IDAT блоков,
чтобы программе записи PNG было легче буферизировать сжатые данные
изображения. У сжатого потока данных нет пределов, потому IDAT блок
может быть в размере от 0 до 231-1 байт.

Замыкающий блок изображения



Последний блок потока данных PNG — замыкающий блок изображения (IEND).
Этот блок не содержит никаких данных.

Вспомогательные блоки



В PNG v1.0 определено 10 вспомогательных блоков, которые могут
присутствовать в потоке данных PNG. Информация некоторых из этих блоков
обеспечивает правильную интерпретацию данных изображения (например, Image
Gamma — контрастность изображения). Краткое описание формата поля Data каждого их
таких блоков приведено ниже. Полная информация об этих блоках содержится
в спецификации формата PNG.

Блок Фонового Цвета



Блок Фонового Цвета определяет цвет фона изображения. Замечание:
некоторые программы чтения PNG могут игнорировать этот блок и использовать
цвет фона по их усмотрению.


Формат данных этого блока зависит от формата данных изображения,
определяемого значением поля ColorType блок IHDR. Для изображений с
индексированными цветами (ColorType = 3), данные длиной 1 байт содержат
индекс цвета палитры, используемого в качестве фона.


typedef struct _bKGDChunkEntry
{
    BYTE Index;    /* Индекс цвета фона в палитре */
} BKGDCHUNKENTRY;


В чёрно-белых изображениях с данными или без данных альфа канала (ColorType =
0 или 4), блок цвета фона длиной 2 байта содержит уровень оттенка серого,
используемого в качестве цвета фона.


typedef struct _bKGDChunkEntry
{
    WORD Value;   /* Значение уровня серого у фона */
} BKGDCHUNKENTRY;


У полноцветных изображений с данными или без данных альфа канала
(ColorType = 2 и 6), блок цвета фона три 2-байтовых значений, определяющих
цвет фона в формате RGB.


typedef struct _bKGDChunkEntry
{
    WORD Red;   /* Уровень красного в цвете фона */
    WORD Green; /* Уровень зелёного в цвете фона */
    WORD Blue;  /* Уровень синего в цвете фона */
} BKGDCHUNKENTRY;

Блок Основных Цветов и Белой Точки



Блок Основных Цветов и Белой Точки содержит информацию о RGB значениях,
основанных на 1931 CIE цветовом координатном пространстве XYZ. Определены
цвета только по осям x и y, и они представлены в виде значений,
помноженных на 100 000.


typedef struct _cHRMChunkEntry
{
    DWORD WhitePointX;   /* Значение Белой Точки по x */
    DWORD WhitePointY;   /* Значение Белой Точки по y  */
    DWORD RedX;          /* Значение Красного по x */
    DWORD RedY;          /* Значение Красного по y */
    DWORD GreenX;        /* Значение Зелёного по x */
    DWORD GreenY;        /* Значение Зелёного по y */
    DWORD BlueX;         /* Значение Синего по x */
    DWORD BlueY;         /* Значение Синего по y */
} CHRMCHUNKENTRY;

Блок Контрастности Изображения



Блок контрастности изображения содержит значение изначальной контрастности
в соответствии с изначальным изображением. Это значение — контрастность,
помноженная на 100 000. Замечание: настоятельно рекомендуется авторами
PNG обрабатывать блок контрастности.


typedef struct _gAMAChunkEntry
{
    DWORD Gamma;    /* Значение контрастности */
} GAMACHUNKENTRY;

Блок Гистограммы Изображения



Блок Гистограммы изображения содержит данные о приблизительной частоте
использования каждого цвета в палитре. Этот блок содержит массив
2-байтовых элементов, по одному на каждый элемент палитры.


typedef struct _hISTChunkEntry
{
    WORD Histogram[];    /* Данные гистограммы */
} HISTCHUNKENTRY;

Блок Фактического Размера в Пикселях



Блок Фактического Размера в Пикселях определяет разрешение,
предназначенное для отображения изображения.


typedef struct _pHYsChunkEntry
{
   DWORD PixelsPerUnitX;    /* Пикселей на единицу измерения, ось X */
   DWORD PixelsPerUnitY;    /* Пикселей на единицу измерения, ось X */
   BYTE  UnitSpecifier;     /* 0 = неизвестная, 1 = метрическая единица измерения */
} PHYSCHUNKENTRY;

Блок Значимых Битов



Блок Значимых Битов определяет битовую глубину данных изображения. Если
программе записи PNG необходимо сохранить данные изображения с
неподдерживаемой битовой глубиной, данные нужно дополнить до следующей
ближайшей поддерживаемой битовой глубины. Например, стобы сохранить RGB
данные с разрешением 5 бит на пиксель в формате PNG (RGB555), данные
изображения необходимо дополнить до 8-битовой глубины (RGB888). Блок
значимых битов будет содержать битовую глубину изначальных данных.


Формат данных этого блока может быть 4 разных видов в зависимости от
данных изображения, определённых в поле ColorType блока IHDR:


/* Чёрно-белое изображение (ColorType = 0) */
typedef struct _sBITChunkEntry
{
    BYTE GrayscaleBits;    /* Значимые биты чёрно-белого изображения (ColorType 0) */
} SBITCHUNKENTRY;


/* Полноцветное изображение или изображение с индексированными цветами (ColorType = 2 или 3) */
typedef struct _sBITChunkEntry
{
    BYTE RedBits;     /* Значимые биты Красного */
    BYTE GreenBits;   /* Значимые биты Зелёного */
    BYTE BlueBits;    /* Значимые биты Синего */
} SBITCHUNKENTRY;


/* Чёрно-белое изображение с данными альфа канала (ColorType = 4) */
typedef struct _sBITChunkEntry
{
    BYTE GrayscaleBits; /* Значимые биты чёрно-белых данных */
    BYTE AlphaBits;     /* Значимые биты альфа канала */
} SBITCHUNKENTRY;


/* Полноцветное изображение с данными альфа канала (ColorType = 6) */
typedef struct _sBITChunkEntry
{
    BYTE RedBits;     /* Значимые биты Красного */
    BYTE GreenBits;   /* Значимые биты Зелёного */
    BYTE BlueBits;    /* Значимые биты Синего  */
    BYTE AlphaBits;   /* Значимые биты Альфа Канала */
} SBITCHUNKENTRY;

Блок Текстовых Данных



Блок Текстовых Данных обычно используется для хранения информации,
предназначенной для чтения человеком, (как, например, название и автор
изображения, уведомление об авторских правах и т. п.) хранящейся внутри PNG
файла. Данные этого блока имеют следующий формат:


typedef struct _tEXtChunkEntry
{
    char Keyword[];      /* Тип информации, содержащейся в поле Text */
    BYTE NullSeparator;  /* Нулевой разделительный символ (NULL) */
    char Text[];         /* Текстовые данные */
} TEXTCHUNKENTRY;


Поле Keyword может быть размером от 1 до 79 байт и может содержать любые
печатаемые символы кодовой страницы Latin-1 включая пробелы, кроме
нулевого символа (NULL).


Поле NullSeparator — 1 байт со значением 0. Это поле разделяет поля
Keyword и Text.


Поле Text — собственно символьные данные, хранящиеся в блоке. Длина этого
символа определяется из значения поля DataLength в заголовке блока.


Значение поля Keyword содержит ключевые слова, связанные с данными поля Text.
Ниже приведён список ключевых слов, содержащихся в поле Keyword в PNG 1.0:











Название
Автор
Описание
Авторские права
Время создания
Программное обеспечение
Отказ от права
Предупреждение
Исходник
Комментарии



Дополнительные ключевые слова могут быть объявлены через общедоступную
регистрацию или могут создаваться отдельными приложениями.

Блок Времени Последнего Изменения Изображения



Блок Времени Последнего Изменения Изображения содержит время последнего
изменения изображения (а не время создания) и имеет следующий формат:


typedef struct tIMEChunkEntry
{
    WORD Year;      /* Значение года (например 1996) */
    BYTE Month;     /* Значение месяца (1-12) */
    BYTE Day;       /* Значение дня (1-31) */
    BYTE Hour;      /* Значение часа (0-23) */
    BYTE Minute;    /* Значение минуты (0-59) */
    BYTE Second;    /* Значение секунды (0-60) */
} TIMECHUNKENTRY;

Блок Прозрачности



Блок Прозрачности содержит значение прозрачного (ключевого) PNG
изображения, не содержащего соответствующих альфа данных. Значения
пикселей для полноцветных и чёрно-белых изображений, совпадающих с
прозрачным цветом, считаются прозрачными (альфа значение — 0), остальные
же считаются непрозрачными.


Изображения с индексированными цветами содержат массив альфа значений,
максимум по одному на элемент палитры. Эти значения прозрачности
обрабатываются абсолютно как альфа значения. Элементам палитры, не
имеющим значений прозрачности, присваивается значение по умолчанию 255
(абсолютно непрозрачные).


Допустимы 3 формата данных в этом блоке, в зависимости от формата данных
изображения, на которые указывает поле ColorType блока IHDR:


/* Чёрно-белое изображение (ColorType = 0) */
typedef struct _tRNSChunkEntry
{
    WORD TransparencyValue;    /* Цвет прозрачности */
} TRNSCHUNKENTRY;


/* Полноцветное изображение (ColorType = 2) */
typedef struct _tRNSChunkEntry
{
    WORD RedTransValue;        /* Красная составляющая цвета прозрачности */
    WORD GreenTransValue;      /* Зелёная составляющая цвета прозрачности */
    WORD BlueTransValue;       /* Синяя составляющая цвета прозрачности */
} TRNSCHUNKENTRY;


/* Изображение с индексированными цветами (ColorType = 3) */
typedef struct _tRNSChunkEntry
{
    BYTE TransparencyValues[];  /* Цветы прозрачности */
} TRNSCHUNKENTRY;

Блок Сжатых Текстовых Данных



Блок Сжатых Текстовых Данных используется для хранения больших по размеру
текстовых данных в сжатом формате. Формат этого блока такой же, как и у
блока текстовых данных, с тем лишь отличием, что поле Text содержит
данные, сжатые методом Deflate, используемым в формате PNG для сжатия
данных изображения.

Данные Изображения



Данные Изображения PNG представлены в растровом виде со строками развёртки,
направленными слева направо и сверху вниз. Пиксели всегда уплотнены в
этих строках и не дополняются битами для выравнивания границы байтов между
пикселями. Пиксели размером менее 8 бит упакованы в байт крайнего
левого пикселя, занимая наиболее значимые биты в байте.


Строки развёртки всегда начинаются на стыках байтов и всегда должны
дополняться до ближайшего стыка байтов в конце. Перед каждой строкой развёртки
также находится байт типа фильтра, который используется при сжатии и
извлечении изображения. Этот байт определяет тип алгоритма фильтрования,
использованного при обработке данной линии развёртки. Этот байт
присутствует всегда, даже когда фильтрование не было применено.


Значения данных изображения глубиной цвета до 8 бит могут быть
преобразованы в цветовую палитру либо сохранены в растровых данных в виде
чёрно-белых значений. Полноцветные пиксели всегда хранятся в виде 3-х
составляющих (красный, зелёный, синий соответственно). Также 4-я
составляющая (Альфа канал) может быть включена в каждый полноцветный
пиксель.


Чёрно-белые и цветные индексированные растровые изображения содержат по одной
составляющей на пиксель, образуя односоставные пиксели. Каждая
составляющая в изображении всегда одного и того же размера. Этот размер
называется битовой глубиной, равной количеству битов в составляющей.
Одиночная составляющая может быть глубиной от 1 до 16 битов. Для
изображений с индексированными цветами, битовая глубина определяет
максимальное количество цветов в палитре. Форматом PNG не определяется,
но и не устраняется двухуровневое растровое отображение.


Многосоставные пиксели содержат 2 или более составляющих на пиксель. Эти
составляющие могут быть 8 и 16 битовые, но все составляющие изображения
должны быть одного и того же размера. Многосоставные пиксели могут быть
от 16 до 64 битов.


Например, типичный чёрно-белый пиксель содержит одну составляющую.
Типичный 24-битовый пиксель в формате RGB — три 8-битовых составляющих, а
нетипичный 64-битовый пиксель в формате RGBA будет содержать 4 16-битовых
пикселя. Обратите внимание, что односоставные и многосоставные пиксели,
использующие отличные от 8- и 16-битовых составляющие, должны
использовать составляющие ближайшей допустимой глубины. Например, для
хранения 10-битовой составляющей, вы должны использовать 16-битовую.
Неиспользуемые биты либо забиваются нолями (не рекомендовано для
составляющих глубиной менее 8 бит, но для больших глубин забивание нолями
позволит значительно улучшить сжатие), либо линейным увеличением масштаба
заполняют диапазон допустимых значений (рекомендовано). Создатели PNG
рекомендуют быстрый метод увеличения масштаба путём дублирования самых
крайних слева значащих битов.

Альфа канал



Чёрно-белые и полноцветные изображения глубиной от 8 до 16 битов также
могут содержать не сопоставленные данные альфа канала, называемые альфа
маской
. Если используются данные альфа маски, каждый чёрно-белый или
полноцветный пиксель содержит дополнительно значение альфа канала для
данного пикселя. Изображения с индексированными цветами могут содержать
альфа канал в блоке прозрачности.


Альфа значение определяет уровень прозрачности пикселя. Минимальное
значение битовой глубины (всегда 0) указывает на абсолютную прозрачность,
а максимальное значение либо отсутствие как таковое альфа маски указывает
на полную непрозрачность.

Чересстрочность



Данные изображения PNG обычно хранятся в виде последовательности линий
развёртки, начинающейся от первой строки вверху изображения и
заканчивающейся последней строкой внизу изображения. Данные изображения
PNG также могут храниться в специальной чересстрочной структуре для
прогрессивного отображения этих данных от низкого полного разрешения.


Прогрессивное отображение очень удобно при получении PNG файла через
медленный канал связи (например, канал, соединяющий ваш Web-браузер с
Интернетом). Эффект постепенного прояснения обычно позволяет пользователю
разглядеть изображение до его окончательного отображения. Это свойство
очень полезно для изображений-меню на Web-странице или для изображения,
нестоящего времени, затраченного на его загрузку.


Все программы чтения PNG должны интерпретировать чересстрочные данные
изображения, хотя программе просмотра совсем не обязательно уметь
осуществлять прогрессивное отображение.


Типичная чересстрочная схема, также используемая в формате GIF, просто
реорганизует порядок хранения строк развёртки. Например, строки файла
будут хранится не в последовательном порядке (0, 1, 2, 3, 4, 5, 6,…), а
в чересстрочном (0, 8, 4, 9, 2, 10, 5,…). Формат GIF использует такую
же чересстрочную схему, и данные сохраняются (или передаются) в 4 этапа:
1/8, 1/8, 1/4 и 1/2.


В PNG несколько иной подход: создание чересстрочного изображения в 7
этапов по схеме Adam7 (в честь создателя Адама М. Костелло). Первые 6
этапов в этой схеме предназначены для интерпретации всех чётных строк (0,
2, 4, 6,…), а последний 7-й для заполнения оставшихся нечётных сток (1, 3,
5, 7…).


Вместо того, чтобы содержать пиксели для всей строки, исходные 6 этапов
содержат лишь некоторые определённые пиксели через строку. В первых 2
этапах содержится 1/64-я всех пикселей изображения, в 3-ем — 1/32-я, в
4-ом — 1/16-я, в 5-м — 1/8, в 6-м — 1/4, а в заключительном 7-м этапе — 1/2
данных изображения.


Изображение на экране постепенно создаётся сначала из квадратов 8×8, затем
из прямоугольников 4×8, затем из квадратов 4×4, затем из прямоугольников 2×4,
затем из квадратов 2×2 и затем из прямоугольников 1×2. В заключительном
этапе заполняются все пиксели нечётных строк.


Чересстрочность Adam7 позволяет намного быстрее прогрессивно отображать
пиксели на экране, чем если бы отображались полностью сроки развертки.
Пиксели в изображении также расположены в более удобной для человеческого
глаза схеме, позволяя разглядеть изображение после загрузки 20% — 30%
данных этого изображения, в сравнении с 50% или более данных, необходимых
для данных GIF.


Заметьте, что ценой за чересстрочную схему PNG будет размер данных,
пропорционально влияющий и на скорость их передачи. Чересстрочная схема
GIF просто реорганизует порядок хранения строк развёртки и не имеет
значительного влияния на размер строки развертки. В схеме PNG, каждый
этап, кроме последнего, содержит несмежные пиксели, например, 1-й этап
содержит каждый 8-й пиксель с каждой 8-й строки.


В среднем эти пиксели менее связаны, чем соседние пиксели, поэтому сжатие
менее эффективно на чересстрочных данных, чем на последовательных, а,
следовательно, конечный файл обычно на 10% больше. В целях, при которых
чересстрочность выгодна, излишний размер окупает себя в более быстром
отображении изображения.


Чересстрочность Adam7 осуществляется по фильтровальной схеме, приведённой
ниже. Несжатые данные PNG преобразуются в чересстрочные данные сперва путём
наложения шаблона 8×8 на всё изображение. Затем данные 7 раз сканируются,
и значения пикселей под шаблоном определяют значения пикселей,
сохраняемых или передаваемых по сети во время каждого этапа.










1


6


4


6


2


6


4


6


7


7


7


7


7


7


7


7


5


6


5


6


5


6


5


6


7


7


7


7


7


7


7


7


3


6


4


6


3


6


4


6


7


7


7


7


7


7


7


7


5


6


5


6


5


6


5


6


7


7


7


7


7


7


7


7

Сжатие данных



Данные изображения PNG всегда хранятся в сжатом виде. Данные изображения
сжимаются по методу, сходному методу Deflate, с применением предугадывания
значений пикселей с последующим сжатием разности. Метод сжатия Deflate
был создан Филом Катзом, и используется также в приложении архивации
файлов pkzip. Этот метод сжатия без потерь является быстрым,
хорошо документированным, бесплатно доступным и совместимым со многими
платформами.


Метод Deflate — разновидность алгоритма сжатия LZ77, запатентованного
(4,464,650) Лемпелом, Зивом, Кохеном и Истманом в 1981 году. Метод
Deflate использует передвигающееся по данным окно переменного размера и
случайным образом сортированные таблицы для распознавания структуры
данных и сжатия их кодировкой Хаффмана. В PNG используется разновидность
Deflate без случайных таблиц, и поэтому на него не влияют условия правовых
притязаний и лицензионных соглашений.


Данные изображения могут быть оптимизированы перед сжатием. Фильтрование
нормализует значения байтов в строках развёртки, позволяя алгоритму сжатия
Deflate быть более эффективным и выдавать более сжатые данные.


Все алгоритмы фильтрования применяются к байтам в строках развёртки, а не
к пикселям. При наличии любых данных альфа канала в данных строк
развёртки они тоже фильтруются. А т.к. один алгоритм фильтрования не
очень эффективен, если его применить ко всему изображению, каждая строка
развёртки фильтруется отдельно, и к ней может быть применён любой или
никакой алгоритм фильтрования.


Некоторые виды предсказывающих фильтров определены для использования с
данными изображения PNG. Фильтрование применяется до сжатия, и
обратное фильтрование применяется после извлечения данных изображения,
восстанавливая их до изначального значения. Все фильтры PNG полностью
обратимы и фильтруют без потерь.


Фильтр «Перед» сохраняет разность между значением байта текущего пикселя и
значения соответствующего байта предыдущего пикселя (прогнозирующий
фильтр). Этот метод позволяет вычислить разности одинаковой составной в
нескольких многосоставных пикселях. Такой же прогнозирующий алгоритм
используется в формате данных TIFF.


Фильтр «Сверху» сохраняет разность между байтом текущего пикселя и
соответствующим байтом соответствующего пикселя в предыдущей строке
развёртки. «Средний» фильтр сохраняет разницу между текущим пикселем и
средним арифметически значений пикселей над и слева от текущего пикселя.


Фильтр «Траектории» использует линейную функцию для подсчёта значения.
Ближайший совпадающий байт слева, верху или сверху слева используется в
качестве прогнозирующего значения.



Полная спецификация PNG, документация по оглашаемым специальным блокам,
инструментальные средства для внедрения PNG, и примеры PNG изображений
доступны.


Текущая спецификация PNG находится на следующей Web странице:


http://sunsite.unc.edu/boutell/png.html



и следующих FTP сайтах:


ftp://swrinde.nde.swri.edu/pub/png/documents/
ftp://ftp.uu.net:/graphics/png/documents/


Наилучший источник информации о PNG и ресурсы находятся на сайте PNG
группы Грега Роулофа:


http://quest.jpl.nasa.gov/PNG/


Вопросы о PNG можно задать службе рассылки новостей
comp.graphics.misc, по
адресу:


[email protected]



либо главному автору спецификации PNG Томасу Боутеллу:


E-mail: [email protected]


Разработчики PNG могут подписаться на PNG рассылку. Пошлите e-mail по адресу
[email protected].


Другие PNG рассылки:


Вышеприведённые рассылки содержат Основное обсуждение PNG, объявления,
связанные с PNG, и Обсуждение о внедрении PNG. Для дополнительной
информации пошлите e-mail по адресу [email protected]
с единственным словом «help» в тексте письма.


Официальный FTP архив PNG:


ftp://ftp.uu.net/graphics/png/


Пример внедрения PNG в программу чтения и записи PNG на языке C доступен
по адресу:


ftp://ftp.uu.net/graphics/png/src/


Тестовые изображения PNG для самоконтроля находятся на:


ftp://ftp.uu.net/graphics/png/images/


Материалы о PNG, включая зеркала всех сайтов, находятся на:

ftp://ftp.uu.net/graphics/png/
и на:


ftp://swrinde.nde.swri.edu/pub/png/


Все программы на этом сайте находятся в состоянии бета тестирования и
должны использоваться с осторожностью. В случае вопросов, ошибки не в
спецификации, а в коде.


Группа 42 — авторы библиотеки поддержки PNG формата LIBPNG. Их Web
страница содержит раздел, посвящённый разработчикам, который включает
библиотеку LIBPNG, спецификацию формата PNG , библиотеку сжатия, и набор
тестовых изображений. Бесплатная версия библиотеки находится в наличии.
Координаты Группы 42:


Group 42, Inc.

Телефон: 800-520-0042

Телефон: 513-831-3400

E-mail: [email protected]

WWW: http://www.group42.com/


Хороший обзор PNG находится в статье Лии Даниела Крокера:


«PNG: Переносимый сетевой графический формат» в Журнале Доктора
Добба
том 20, номер 232 от Июля 1995, страницы 36-44.


В текстовом формате вышеупомянутая статья находится на:


ftp://ftp.mv.com/pub/ddj/1995/1195.07/ptot.zip


Статья о PNG от CompuServe:


http://www.compuserve.com/new/news_rel/png2.html















Copyright © 1996, 1994 O’Reilly & Associates, Inc. All Rights Reserved.

Png файлы для фотошопа. Как создать PNG с прозрачностью в Adobe Photoshop (версии CC и выше)

Файл формата PNG открывается специальными программами. Чтобы открыть данный формат, скачайте одну из предложенных программ.

Чем открыть файл в формате PNG

Расширение PNG это формат файла, используемый для хранения изображений без потери качества. Это самый популярный формат фотографий в Интернете, специально разработанный для использования в Сети.

Что находится в файлах PNG

Файл с расширением файла PNG является файлом Portable Network Graphics
. Формат использует сжатие без потерь и обычно рассматривается как альтернатива GIF. Но в отличие от , в файлах PNG не поддерживается анимация.

Формат PNG имеют как фотографии в оттенках серого, так и полноцветные, поддерживаются прозрачные слои. Сжатие PNG обычно лучше того, которое используется в GIF. JPG иногда имеет больше преимуществ перед PNG, но после такого сжатия могут возникать дефекты в изображениях с текстом или вокруг высококонтрастных областей.

Как открыть файл PNG

Чтобы открыть PNG файлы, можно использовать любой интернет-браузер или графический редактор. И платформа ОС Windows, и Mac OS имеют встроенные механизмы для просмотра таких изображений. Программа Png — Просмотр фотографий Windows по умолчанию часто используется для открытия файлов PNG, поскольку это системная программа Windows. Но существует много других способов их просмотра.

Все браузеры (например, Chrome, Firefox, Internet Explorer
и т. д.) будут автоматически просматривать файлы PNG, которые вы открываете в Интернете, а это означает, что не нужно загружать на компьютер каждый PNG файл, который вы хотите посмотреть. Вы также можете использовать браузер для открытия уже имеющихся на компьютере PNG файлов при помощи комбинации клавиш Ctrl + O. Большинство таких программ также поддерживают drag-and-drop, поэтому можно просто перетащить PNG файл в браузер, чтобы открыть его.

Конвертация PNG

Файлы изображений можно преобразовывать различными способами, например, конвертировать в png и из него с помощью различных программ и онлайн сервисов. Например, это позволяет делать редактор Png — Фотоконвертер .

Файл изображения, который хранится в формате Portable Network Graphic (PNG). Содержит битовую матрицы цветов и использует компрессию без потерь, близкую к файлу , но без ограничений в копировании. Обычно используется для хранения графики веб-изображений.

Формат PNG (читается как пнг) создавался в ответ на ограничения формата , преимущественно чтобы увеличить поддержку цветов и предоставить формат изображений без патентной лицензии. В дополнение к этому в то время как файлы

Доброго времени суток!
Вам когда-нибудь хотелось узнать как устроены файлы PNG? Нет? А я все равно расскажу.
Формат PNG(Portable Network Graphics) был изобретен в 1995 году, чтобы стать заменой GIF , а уже в 1996, с выходом версии 1.0, он был рекомендован W3C , в качестве полноправного сетевого формата. На сегодняшний день PNG является одним из основных форматов веб-графики.

Под катом вы найдете общее описание строения PNG-файла, некоторое количество картинок-схем, препарирование в hex-редакторе, и, конечно, ссылку на спецификацию.

Общее строение

Структура PNG в самом общем виде представлена на следующем рисунке.

То есть файл состоит из подписи и некоторого количества блоков(чанков, chunks), каждый из которых несет в себе некоторую информацию (спасибо КО!). Но почему подпись нельзя считать одним из чанков? Давайте разберемся поподробнее.

Подпись файла

Подпись PNG-файла всегда одинакова, состоит из 8 байт, и представляет собой (в hex-записи)

Что же это означает?

  • 89 — non-ASCII символ. Препятствует распознаванию PNG, как текстового файла, и наоборот.
  • 50 4E 47 — PNG в ASCII записи.
  • 0D 0A — CRLF (Carriage-return, Line-feed), DOS-style перевод строки.
  • 1A — останавливает вывод файла в DOS режиме (end-of-file), чтобы вам не вываливалось многокилобайтное изображение в текстовом виде.
  • 0A — LF, Unix-style перевод строки.
Chunks

Чанки — это блоки данных, из которых состоит файл. Каждый чанк состоит из 4 секций.

Разберем эти секции по порядку.

Длина

Ну, с длиной вроде все ясно. Просто числовое значение длины блока данных.

Тип (имя)

С типом немного поинтересней. Тип представляет собой 4 чувствительных к регистру ASCII-символа. Регистры символов (пятый бит в числовой записи символа) в имени чанка различаются неспроста — это флаги, которые сообщают декодеру некоторую дополнительную информацию.

  • Регистр первого символа определяет является ли данный чанк критическим(верхний регистр) или вспомогательным(нижний регистр). Критические чанки должны распознаваться каждым декодером. Если декодер встречает критический чанк, тип которого не может распознать, он обязан завершить выполнение с ошибкой.
  • Регистр второго символа задает «публичность»(верхний регистр) или «приватность»(нижний регистр) чанка. «Публичные» чанки — официальные, задокументированные, распознаваемые большинством декодеров. Но если вдруг вам для каких-то своих нужд понадобится кодировать специфическую информацию, то просто в имени чанка сделайте второй символ маленьким.
  • Регистр третьего символа оставлен для будущих свершений. Предполагается, что он будет использоваться для дифференциации различных версий стандарта. Для версий 1.0 и 1.1 третий символ должен быть большим. Если он (внезапно!) оказался маленьким, все нынешние декодеры должны поступать с чанком, так же как и с любым другим не распознанным (то есть выходить с ошибкой если чанк критический, или пропускать в противном случае).
  • Регистр же четвертого символа означает возможность копирования данного чанка редакторами, которые не могут его распознать. Если регистр нижний, чанк может быть скопирован, вне зависимости от степени модификации файла, иначе (верхний регистр) он копируется только в случае, когда при модификации не были затронуты никакие критические чанки.

Для лучшего понимания, давайте разберем флаги на примере чанка, содержащего текст.

Ниже приведен список типов чанков с краткими пояснениями.
Критические чанки

  • IHDR
    — заголовок файла, содержит основную информацию о изображении. Обязан быть первым чанком.
  • PLTE
    — палитра, список цветов.
  • IDAT
    — содержит, собственно, изображение. Рисунок можно разбить на несколько IDAT чанков, для потоковой передачи. В каждом файле должен быть хотя бы один IDAT чанк.
  • IEND
    — завершающий чанк, обязан быть последним в файле.

Вспомогательные чанки

  • bKGD
    — этот чанк задает основной фоновый цвет.
  • cHRM
    используется для задания CIE 1931 цветового пространства.
  • gAMA
    — определяет гамму.
  • hIST
    — в этом чанке может храниться гистограмма или общее содержание каждого цвета в изображении.
  • iCCP
    — цветовой профиль ICC
  • iTXt
    — содержит текст в UTF-8, возможно сжатый, с необязательной языковой меткой. iTXt чанк с ключевым словом «XML:com.adobe.xmp» может содержать Extensible Metadata Platform (XMP) .
  • pHYs
    — содержит предполагаемый размер пикселя и/или отношение сторон изображения.
  • sBIT
    (significant bits) — определяет «цветовую точность» (color-accuracy) изображения (черно-белое, полный цвет, черно-белое с прозрачностью и т.д.), для более простого декодирования.
  • sPLT
    — предлагает палитру для использования, если полный спектр цветов недоступен.
  • sRGB
    — свидетельствует о использовании стандартной sRGB схемы.
  • sTER
    — индикатор стереоскопических изображений.
  • tEXt
    — может содержать текст в ISO/IEC 8859-1 формате, с одной name=value парой для каждого чанка.
  • tIME
    — хранит дату последнего изменения изображения.
  • tRNS
    — содержит информацию о прозрачности.
  • zTXt
    — сжатый текст, с теми же ограничениям, что и tEXt.

Более подробную информацию можно найти в спецификации.

CRC

Контрольная сумма CRC-32 . Кстати на днях был топик о ее подсчете в Windows.

Минимальный PNG

С общей структурой разобрались. Теперь разберем содержание обязательных чанков. Но какие из них обязательные (не критические, критические обязаны распознаваться декодером, а не присутствовать в каждом файле), и как выглядит минимальный PNG-файл? А вот как:

IHDR

Блок данных в IHDR содержит следующие поля:

  • Ширина, 4 байта
  • Высота, 4 байта
  • Битовая глубина (bit depth), определяет количество бит на каждый сэмпл(не пиксель), 1 байт
  • Тип цвета, состоит из 3 флагов 1 (используется палитра), 2 (используется цвет, не монохромное изображение), and 4 (присутствует альфа-канал), 1 байт
  • Метод сжатия. На данный момент доступно только значение 0 — сжатие по алгоритму deflate . Если значение отлично от 0, чанк считается нераспознанным, и декодер рапортует об ошибке. 1 байт
  • Метод фильтрации. Так же, как и в случае сжатия, на данный момент может быть только нулем. 1 байт
  • Interlace(переплетение) метод. Определяет порядок передачи данных. На данный момент доступно 2 значения: 0 (no interlace) и 1 (Adam7 interlace). 1 байт

Adam7 interlacing прекрасно демонстрирует картинка из википедии (да-да, GIF в статье про PNG):

IEND

Сигнализирует о конце файла, блок данных этого чанка не содержит ничего.

IDAT

Содержит данные, закодированные, в соответствии с полем метода сжатия в заголовке. Алгоритм декодирования выходит за рамки данной статьи (однако если будут желающие, может появиться в следующей), но в довольно хорошо (и по-русски) описан .

Таким образом, простейший PNG-файл (на примере ) выглядит следующим образом.

Заключение

При написании данной статьи я ставил своей задачей дать читателю общие знания о строении PNG-файла, для более глубокого понимания рекомендуется читать спецификации .

Топик на хабре про строение JPEG: habrahabr.ru/blogs/algorithm/102521
Топик на хабре про строение GIF: habrahabr.ru/blogs/algorithm/127083

Спасибо за внимание, буду рад любой критике!

Как известно, популярным разрешением изображений является формат png, для редактирования, на персональном компьютере которого существуют специальные программы редакторы, об одной из которых с возможностью скачивания мы вам далее и расскажем. Отметим, для тех, кто не знает, что данный формат пришёл на замену популярному ранее аналогу gif, оставшемуся востребованным, но уже в другом направлении работы дизайнеров. Интерес же к рекламируемому нами сейчас удобному и вместительному расширению изображений, проявлен многими дизайнерами и фотографами нашей страны, а также запада, где он ценится даже больше.

Всего же для редакционного видоизменения картинок формата png в сети представлено множество бесплатных программ, которые вы можете скачать с целью свободного пользования без всяких ограничений и надобности в прохождении регистрации. Ну а чтобы не быть голословным, скажу, что лучшей редакционной программой для обработки фотографий и просто изображений в формате png, доступной для бесплатного скачивания, является продукт под названием GIMP, имеющий массу достоинств и практически ни одного недостатка. Безусловно, если сравнивать этот продукт с прославленным и легендарным фотошопом, минусы найти можно, но немного.

Скачать программу формат png на компьютер

Опуская всякие подробности, хочу сказать, что программа для удобного редактирования формата png на персональном компьютере, которую вы можете скачать прямо сейчас и бесплатно, может помочь справиться с массой задач, независимо от взыскательности требований, предъявленных со стороны пользователя. Одной маленькой трудностью в работе с рекламируемым мной приложением может стать его расширенная пользовательская настройка, требующая немного лишь драгоценного времени, равного, в эквиваленте не более чем нескольким минутам. Хотя, по моему мнению, как уже опытного пользователя, проработавшего в этом приложении не один месяц, ничего проблемного в производимых пользовательских настройках нет.

Главное, как я уже подчеркнул выше, не заручаться необходимостью поиска альтернативы данной программе для редактирования формата png, а единовременно и при минимальных затратах просто бесплатно и без всяких ограничений скачать дистрибутив на компьютер с последующей установкой и началом использования.

Что ж, думаю из всего мной вышеперечисленного можно сделать пару логичных выводов и принять решение о загрузке к себе на компьютер или же ноутбук удобнейшей редакционной программы с массой достоинств и полностью отсутствующими недостатками. Ну а перейти непосредственно к самой загрузке дистрибутива вам поможет обращение своего пристального внимания на адресные зеркальные ссылки, расположенные чуть ниже и гарантирующие максимальную скорость.
05.06.16

27.2K

Иногда нужно загрузить изображение, содержащее прозрачные элементы, сквозь которые будет проглядывать первоначальный фон. В этих случаях, было бы удобно загрузить PNG
изображения, поскольку они способны сохранять прозрачность.

В этой статье мы расскажем, как сделать прозрачность в Фотошопе
.

Создание файла

Первый шаг – это создание файла. Для этого откройте Adobe Photoshop
и в меню «Файл
» (File

) вверху страницы выберите «Создать
» (New

).

Затем в появившемся окне «Новый документ
» (New Document

) создайте файл нужного размера, и убедитесь, что разрешение документа составляет 72 пикселя на дюйм (поскольку файл предназначен для использования в веб
). А также, что вы выбрали значение «Прозрачный
» (Transparent

) в выпадающем списке «Содержимое фона
» (Background Contents

).

*Перед тем, как сделать PNG
с прозрачностью в Фотошопе
, нужно уточнить, что в этом примере мы создаем изображение для загрузки в качестве фона для сайта, поэтому размер документа задан следующим образом: ширина 3000 пикселей, высота 1730 пикселей, что является рекомендуемыми размерами для загрузки HD
изображений:

После того, как вы задали значения параметров, нажмите «OK
», чтобы открыть новый документ.

Затем в панели «Слои
» (Layers

) убедитесь, что работаете на прозрачном слое, а не на фоновом:

После того, как вы завершили создание и готовы сохранить прозрачное изображение, в зависимости от используемой версии Photoshop
, в меню «Файл
» (File

) вы можете использовать один из возможных вариантов:

Photoshop версии ранее, чем CC 2015:

Сейчас мы расскажем, как сделать прозрачность картинки в Фотошопе
, который вышел раньше CC 2015
. В этих версиях используют метод «Сохранить для Web
» (Save for Web & Devices

), чтобы сохранить и оптимизировать PNG изображения для использования в вебе. Чтобы воспользоваться этим методом, просто зайдите в меню «Файл
» (File

), и далее – «Сохранить для Web
» (Save for Web & Devices

):

Затем в появившемся окне выберите PNG-24
из выпадающего меню возможных значений, а потом убедитесь, чтобы выбраны опции «Прозрачность
» (Transparency

) и «Преобразовать в sRGB
» (Convert to sRGB

). Это подтверждает, что изображение будет содержать прозрачный фон и его цветовой режим будет преобразован в sRGB
, рекомендованное цветовое пространство для веб.

Поля «Размер изображения
» (Image Size

) автоматически заполняются значениями, которые вы задали, когда создавали файл. Но если вы хотите изменить размер файла перед сохранением, то можно сделать это сейчас.

Photoshop версии CC 2015:

Перед тем, как сделать прозрачность фото в Фотошопе
, нужно знать, что с версии CC 2015
опция «Сохранить для Web
» (Save for Web & Devices

) в меню «Файл
» (File

) помечена как Legacy
(устаревшая
). И замещена на новую опцию «Экспорт
» (Export

), которая предлагает идентичную функциональность с более быстрым сохранением в файле меньшего размера и в лучшем качестве. Чтобы воспользоваться опцией «Экспорт
», нажмите меню «Файл
» (File

), а затем — «Экспортировать как
» (Export As

).

Примечание:
Adobe
по-прежнему предлагает опцию «Сохранить для Web
» (Save for Web & Devices

) в Photoshop CC 2015
, и она доступна через меню Файл > Экспорт
(File > Export

) или при использовании комбинации клавиш Command+Option+Shift+S
(для Mac
) или Ctrl+Alt+Shift+S
(для ПК
):

Затем в появившемся окне выберите PNG
из выпадающего меню «Формат
» (Format

) и убедитесь, что выбраны опции «Прозрачность
» (Transparency

) и «Преобразовать в sRGB
» (Convert to sRGB

).

Поля «Размер изображения
» (Image Size

) и «Размер холста
» (Canvas Size

) должны автоматически заполниться значениями, которые вы задали, когда создавали файл. Но при желании можно изменить эти параметры перед тем, как сделать эффект прозрачности в Фотошопе
.

2 голоса

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

Это самая популярная функция в программе Photoshop, а потому я решил максимально подробно рассказать вам не только о самом процессе, но и том, как сохранить картинку в фотошопе без фона.

Оказывается, что у многих возникают трудности с этим, но публикаций в интернете на эту тему в интернете вообще нет. Только несколько тем на форумах. Но, я беру на себя миссию исправить эту несправедливость…

Итак, сейчас я одену на себя рыцарские доспехи и развею все страхи, сомнения, непонимание и превращу трудности искусства фотошопного в бесхитростную обыденность. Я также поведаю обо всех тонкостях мастерства. Готовьтесь. «Ведать» я буду очень простым языком, чтобы понятно стало каждому, так что прошу прощения у читателей, которых смущает такая дотошность и они сами все прекрасно знают.

Более терпеливых я благодарю за понимание. Приступим.

Чего нужно добиться, чтобы фотка была действительно прозрачной

Прозрачность на картинке обычно отображается вот такой шашкой. Если вы видите ее в Google, то значит изображение можно без проблем качать и при наложении этого объекта на другой фон не поменяется цвет.

Как вы можете увидеть, такая шашка не отображается, если изображение в поиске отражено через миниатюру. Надо кликнуть на картинку и дополнительная информация откроется.

Вот смотрите, я скопировал этот рисунок и вставил его на фотографию поля. Не буду вдаваться как именно я это сделал, сейчас это не важно. Самое важное, что вы видите все части поля, кубики как будто были вырезаны и наложены на картинку.

Если бы я не нашел в поиске фотографию с шашкой, то иллюстрация выглядела совсем иначе. Фон был бы белым и прямоугольным.

Почему так? Эта шашечка – общепринятый признак, если вы его видите, то значит в этой части иллюстрации цвета нет совсем, и при наложении вы увидите нижнюю часть рисунка. Точно также прозрачность отображается и . Если вам нужно убрать фон из фотографии, то необходимо добиться того, чтобы вместо цвета, вы смогли узреть вот этот заветный узор. Шашку.

Как правильно хранить прозрачные картинки

Все мы привыкли к такому формату фотографий, как jpeg. Некоторые люди даже и не знают о существовании других. Однако, он не понимает, что такое прозрачность. Для того, чтобы скачивать и хранить на своем компьютере «правильные» фотографии, вам понадобится понять и запомнить новый формат — png.

Видите, помимо шашки, в Google почти всегда вместе с нужными картинками можно увидеть это сочетание букв.

Затем выбираете нужный тип файла, png и готово. Он есть в любой версии. Если не видите – ищите внимательнее. Без него никак. Уверяю вас.

Зачем было нужно придумывать другой формат? Все дело в том, что популярный jpeg, не понимает, что такое прозрачность. Он меняет ее на привычный белый.

Как избавиться от фона: простой и довольно быстрый способ без лишних заморочек

В моем блоге вы можете найти статью, в которой я показываю 4 инструмента и привожу видео, в котором можно найти 3 способа избавиться от фона на рисунке (). Можете прочитать ее, если вам интересно. Сейчас я хотел бы показать вам еще один прием, так как считаю, что без этого статья была бы не полной. Мало ли, кто-то не захочет лазить по моему блогу. А тут все в одном месте.

Итак, открываем картинку.

Находим инструмент «Фоновый ластик». Если не можете его отыскать, то подержите несколько секунд мышку с зажатой левой кнопкой на клавише обычного ластика. Нужный инструмент откроется. Вы сможете его добавить, щелкнув по нему.

Можете увеличить диаметр ластика, чтобы стирать было удобнее.

Теперь повозюкайте по ненужным элементам на картинке. Вы увидите, как шашка начинает проявляться, а цвет исчезать!

Надеюсь, что после того как вы закончите, у вас не возникнет вопроса в каком формате сохранять обработанный рисунок. Конечно же PNG.

Данный метод стирания не назовешь самым лучшим и невероятно удобным. Поэтому я рекомендую вам все-таки обратить внимание на предыдущую мою статью, полностью посвященную этой теме.

А если вам интересно работать в фотошопе, то советую вам начать на этом зарабатывать! Спрос есть. Вы без труда можете попробовать , обрабатывать картинки, и делать много всего интересного. Поверьте, это действительно нужно. Вы можете убедиться, открыв несколько сайтов для фрилансеров.

Думаете, что у вас не получится или вы слишком стары для этого дерьма? Не хватает времени? Поверьте, это все нелепые отговорки. Я юрист и зарабатываю достаточно, но … у вас есть хобби, любимое увлечение? Вы живете полной жизнью? Вам действительно не скучно?

Что бы вы ни знали и чем бы ни интересовались. Интернет открывает массу новых возможностей. Впустите в свою жизнь изменения. Если деньги вас не интересуют – это еще лучше. Это дает больше шансов вашему проекту стать дорогим, крутым и успешным. Все известные люди не работают ради прибыли, они трудятся, потому что любят то, чем они занимаются. Редко кто из них называет это «работой».

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

Кстати, не так давно читал секреты долголетия кавказских горцев. Один из принципов состоит в том, что к ним постоянно ходит молодое поколение, чтобы советоваться по каким-то важным вопросом. Старики чувствуют себя нужными, а потому не испытывают никаких отрицательных эмоций относительно старости. На Кавказе не бояться становиться старыми.

Кстати, позитивный настрой – это еще один их секрет. Старцы утверждают, что со злыми, раздраженными и скучными людьми, у которых нет интересных увлечений, никто не хочет общаться, а потому, такой образ жизни крайне невыгоден, особенно в пожилом возрасте.

Занимайтесь чем-то новым. Если вы любите фотошоп – обратите внимание на курс Зинаиды Лукьяновой — «Фотошоп с нуля


» и овладейте им в совершенстве. Очень быстро у вас появится прибыльное хобби. Не так уж увлечены дизайном? Обратите внимание на то, и создавайте свои проекты.

Если вам понравилась эта статья, и я хотя бы немного заинтересовал вас – подписывайтесь на рассылку. Пусть не сейчас, но дайте себе шанс заняться чем-то новым. Я буду присылать вам свои публикации о том, как можно зарабатывать деньги в интернете.

Возможно, одна из них вас вдохновит на что-то новое и пока неизвестное. Вы поймете, что это интересно и захотите попробовать сами, а потом… кто знает что будет потом?

Обернется ли хобби во что-то большее или вы просто покажете результат своих трудов друзьям, дабы получить их похвалу и восхищение? В отличие от многих вы встанете с дивана и сделаете то, что выведет вас за рамки привычного. Вы попытаетесь изменить свою жизнь. Это очень похвально.

Я искренне желаю вам успехов в ваших начинаниях и надеюсь, что эта наша встреча будет не последней.

Анализ структуры файла изображения PNG (5)

5.2.3 Анализ структуры файла изображения PNG (5)

Рисунок 5-24 показывает структуру данных блока данных палитры (PLTE) в pic1.png.

498)this.style.width=498;» border=0< 
(Нажмите, чтобы увеличить) Структура блока данных палитры рисунка 5-24 (PLTE) в файле изображения pic1.png
498)this.style.width=498;» border=0< 
(Нажмите, чтобы увеличить) Структура блока данных палитры рисунка 5-24 (PLTE) в файле изображения pic1.png

Таблица 5-21 показывает значение полей блока данных палитры (PLTE) в файле изображения pic1.png.

Таблица 5-21 Значения полей блока данных палитры (PLTE) в файле изображения pic1.png

Шестнадцатеричное значение

описание

00 00 03 00

Длина блока данных PLTE, 00 00 03 00 = 768

50 4C 54 45

Флаг типа блока данных, значение 50 4C 54 45 ASCII, равное PLTE

00 00 00

Палитра первый индекс

FF FF FF

Палитра 2-й указатель

EA FF FF

Палитра 3-й указатель

…………

Индекс палитры …

E4 DC DC

Палитра 255 указатель

FF FF FF

Палитра 256-й указатель

7D 2C 3D AD

Значение CRC

Продолжить анализ следующих данных. Согласно предыдущему методу анализа, следующим блоком данных является блок данных с прозрачным изображением (tRNS). Для 256-цветных изображений блок данных с прозрачным изображением (tRNS) имеет в общей сложности 256 элементов, каждый из которых соответствует Элемент в блоке данных палитры, 00 означает прозрачный, а FF означает непрозрачный.

Структура прозрачного блока данных изображения (tRNS) может быть определена с помощью следующего кода:

PNG_CHUNK_HEADER chunkHdr;
BYTE trnsChunkData[chunkHdr.btChunkLen]
DWORD trnsCrc;

На рисунке 5-25 показана структура данных блока прозрачных данных изображения (tRNS) в pic1.png.

498)this.style.width=498;» border=0< 
(Нажмите, чтобы увеличить) Рисунок 5-25 Структура прозрачного блока данных изображения (tRNS) в файле изображения pic1.png

Таблица 5-22 показывает значение полей прозрачного блока данных изображения (tRNS) в файле изображения pic1.png.

Таблица 5-22 Значения полей в блоке прозрачных данных изображения (tRNS) в файле изображения pic1.png

Шестнадцатеричное значение

описание

00 00 01 00

длина блока данных tRNS, 00 00 01 00 = 256

74 52 4E 53

Флаг типа блока данных, значение ASCII 74 52 4E 53 равно tRNS

FF~00

Прозрачные изображения блоков данных, всего 256, каждый соответствующий тонирование
Один элемент на доске, 00 означает прозрачный, FF означает непрозрачный

53 F7 07 25

Значение CRC

Продолжайте анализировать следующие данные: в соответствии с предыдущим методом анализа анализируется, что следующим блоком данных является блок данных изображения (IDAT). Для 256-цветных изображений блок данных изображения (IDAT) хранит номер индекса, который указывает на цветовую палитру.Для изображений 16-битного или более цветов, блок данных изображения (IDAT) хранит фактический цвет пикселя, упорядоченный по 0xRRGGBB. Следует отметить, что данные в блоке данных изображения (IDAT) сжимаются по варианту LZ77.

Структура блока данных изображения (IDAT) может быть определена с помощью следующего кода:

PNG_CHUNK_HEADER chunkHdr;
BYTE idatChunkData[chunkHdr.btChunkLen];
DWORD idatCrc;

Из MNG в PNG

Сервис позволяет произвести преобразование (конвертировать) из формата MNG в формат PNG

MNG — это формат категории графических файлов. Осуществляет поддержку всех возможных алгоритмов сжатия PNG и JPEG (среди которых и гамма-коррекция, и полупрозрачность) для того, чтобы создавать анимированные изображения. Был доступен в браузере Mozilla с 2000 до 2003 года. Теперь поддерживается браузером Konqueror.
MNG, то есть Multiple-image Network Graphics, имеет самую тесную связь с PNG. В 1995 году, когда приступили к разработке формата PNG, было принято решение не включать поддержку анимации. По простой причине: тогда эту особенность применяли нечасто. И все-таки приступили к работе над MNG, то есть версией PNG, которая поддерживает анимацию. Начальная версия спецификации MNG появилась на свет в начале 2001 года.
Формат MNG – это упрощенный растровый аналог Adobe Flash. В каждом кадре множество слоев, и их можно двигать относительно друг друга, масштабировать, обрезать. Этим и объясняется сложность поддержки формата MNG. В итоге структура файлов MNG напоминает структуру PNG. Отличие лишь в метке идентификации. А также в том, что применяется намного больше вариантов блоков (chunk). Кадры MNG сохраняются как PNG или JNG.
В сравнении с GIF этот формат поддерживает анимацию. В сравнении с JPEG обеспечивает самый маленький размер файла за счет потерь при сжатии. В сравнении с PNG сжатие осуществляется без искажений. Сейчас MNG не поддерживается популярными браузерами и программным обеспечением, поскольку его сменил более простой формат APNG.

PNG – это формат растрового изображения, разработчиком которого является компания PNG Development Group. Название PNG – это аббревиатура от Portable Network Graphic. Этот формат изображений используется, прежде всего, в Интернете для размещения на веб-страницах, поскольку файлы PNG применяют сжатие по алгоритму Deflate, не теряя качества. Разработка данного формата была предпринята для того, чтобы заменить формат GIF, к которому было немало претензий. Качество изображения и характеристики у PNG оказались намного лучше, однако в отличие от GIF он не поддерживает анимацию и использует палитру CMYK.

Другие сервисы

Структура проекта визуального элемента Power BI для более эффективного использования встроенной бизнес-аналитики Power BI — Power BI



  • Чтение занимает 2 мин

В этой статье

Лучший способ начать создание нового визуального элемента Power BI — использовать средство визуальных элементов Power BI pbiviz.The best way to start creating a new Power BI visual is to use the Power BI visuals pbiviz tool.

Чтобы создать новый визуальный элемент, перейдите в каталог, в котором должен располагаться визуальный элемент Power BI, и выполните команду:To create a new visual, navigate to the directory you want the Power BI visual to reside in, and run the command:

pbiviz new <visual project name>

При выполнении этой команды создается папка визуальных элементов Power BI, которая содержит следующие файлы:Running this command creates a Power BI visual folder that contains the following files:

project
├───.vscode
│   ├───launch.json
│   └───settings.json
├───assets
│   └───icon.png
├───node_modules
├───src
│   ├───settings.ts
│   └───visual.ts
├───style
│   └───visual.less
├───capabilities.json
├───package-lock.json
├───package.json
├───pbiviz.json
├───tsconfig.json
└───tslint.json

Описание папки и файлаFolder and file description

В этом разделе содержатся сведения о каждой папке и файле в каталоге, который создает средство визуальных элементов Power BI pbiviz.This section provides information for each folder and file in the directory that the Power BI visuals pbiviz tool creates.

.vscode.vscode

Эта папка содержит параметры проекта VS Code.This folder contains the VS code project settings.

Чтобы настроить рабочую область, измените файл .vscode/settings.json.To configure your workspace, edit the .vscode/settings.json file.

Дополнительные сведения см. в разделе User and Workspace Settings (Параметры пользователя и рабочей области)For more information, see User and Workspace Settings

ресурсыassets

Эта папка содержит файл icon.png.This folder contains the icon.png file.

Средство визуальных элементов Power BI использует этот файл в качестве значка нового визуального элемента Power BI на панели визуализации Power BI.The Power BI visuals tool uses this file as the new Power BI visual icon in the Power BI visualization pane.

srcsrc

Эта папка содержит исходный код визуального элемента.This folder contains the visual’s source code.

В этой папке средство визуальных элементов Power BI создает следующие файлы:In this folder, the Power BI visuals tool creates the following files:

  • visual.ts — основной исходный код визуального элемента;visual.ts — The visual’s main source code.
  • settings.ts — код параметров визуального элемента.settings.ts — The code of the visual’s settings. Классы в файле предоставляют интерфейс для определения свойств визуального элемента.The classes in the file provide an interface for defining your visual’s properties.

Стильstyle

Эта папка содержит файл visual.less, в котором содержатся стили визуального элемента.This folder contains the visual.less file, which holds the visual’s styles.

capabilities.jsoncapabilities.json

Этот файл содержит основные свойства и параметры (или возможности) визуального элемента.This file contains the main properties and settings (or capabilities) for the visual. Он позволяет объявлять поддерживаемые функции, объекты, свойства и сопоставление представлений данных для визуального элемента.It allows the visual to declare supported features, objects, properties, and data view mapping.

package-lock.jsonpackage-lock.json

Этот файл создается автоматически для любой операции, где npm изменяет либо дерево node_modules, либо файл package.json.This file is automatically generated for any operations where npm modifies either the node_modules tree, or the package.json file.

Дополнительные сведения об этом файле см. в официальной документации npm-package-lock.json.For more information about this file, see the official npm-package-lock.json documentation.

package.jsonpackage.json

Этот файл описывает пакет проекта.This file describes the project package. Он содержит сведения о проекте, его авторах, описание и зависимости проекта.It contains information about the project such as authors, description, and project dependencies.

Дополнительные сведения об этом файле см. в официальной документации npm-package.json.For more information about this file, see the official npm-package.json documentation.

pbiviz.jsonpbiviz.json

Этот файл содержит метаданные визуального элемента.This file contains the visual metadata.

Пример файла pbiviz.json с комментариями, описывающими записи метаданных, см. в разделе Записи метаданных.To view an example pbiviz.json file with comments describing the metadata entries, see the metadata entries section.

tsconfig.jsontsconfig.json

Файл конфигурации для TypeScript.A configuration file for TypeScript.

Этот файл должен содержать путь к *TS-файлу, в котором находится основной класс визуального элемента, как указано в свойстве visualClassName в файле pbiviz.json.This file must contain the path to *.ts file where the main class of the visual is located, as specified in the visualClassName property in the pbiviz.json file.

tslint.jsontslint.json

Этот файл содержит конфигурацию TSLint.This file contains the TSLint configuration.

Комментарии в следующем заголовке кода из файла pbiviz.json описывают записи метаданных.The comments in the following code caption from the pbiviz.json file, describe the metadata entries.

{
  "visual": {
     // The visual's internal name.
    "name": "<visual project name>",

    // The visual's display name.
    "displayName": "<visual project name>",

    // The visual's unique ID.
    "guid": "<visual project name>23D8B823CF134D3AA7CC0A5D63B20B7F",

    // The name of the visual's main class. Power BI creates the instance of this class to start using the visual in a Power BI report.
    "visualClassName": "Visual",

    // The visual's version number.
    "version": "1.0.0",
    
    // The visual's description (optional)
    "description": "",

    // A URL linking to the visual's support page (optional).
    "supportUrl": "",

    // A link to the source code available from GitHub (optional).
    "gitHubUrl": ""
  },
  // The version of the Power BI API the visual is using.
  "apiVersion": "2.6.0",

  // The name of the visual's author and email.
  "author": { "name": "", "email": "" },

  // 'icon' holds the path to the icon file in the assets folder; the visual's display icon.
  "assets": { "icon": "assets/icon.png" },

  // Contains the paths for JS libraries used in the visual.
  // Note: externalJS' isn't used in the Power BI visuals tool version 3.x.x or higher.
  "externalJS": null,

  // The path to the 'visual.less' style file.
  "style": "style/visual.less",

  // The path to the `capabilities.json` file.
  "capabilities": "capabilities.json",

  // The path to the `dependencies.json` file which contains information about R packages used in R based visuals.
  "dependencies": null,

  // An array of paths to files with localizations.
  "stringResources": []
}

Дальнейшие действияNext steps

Руководство для начинающих

Руководство для начинающих

В этом руководстве даётся начальное введение в nginx и описываются
некоторые простые задачи, которые могут быть решены с его помощью.
Предполагается, что nginx уже установлен на компьютере читателя.
Если нет, см. Установка nginx.
В этом руководстве описывается, как запустить и остановить nginx
и перезагрузить его конфигурацию,
объясняется, как устроен конфигурационный файл, и описывается,
как настроить nginx для раздачи статического содержимого, как
настроить прокси-сервер на nginx, и как связать nginx с приложением
FastCGI.

У nginx есть один главный и несколько рабочих процессов.
Основная задача главного процесса — чтение и проверка конфигурации
и управление рабочими процессами.
Рабочие процессы выполняют фактическую обработку запросов.
nginx использует
модель, основанную на событиях, и зависящие от операционной системы
механизмы для эффективного распределения запросов между рабочими процессами.
Количество рабочих процессов задаётся в конфигурационном файле и
может быть фиксированным для данной конфигурации или автоматически
устанавливаться равным числу доступных процессорных ядер (см.
worker_processes).

Как работают nginx и его модули, определяется в конфигурационном файле.
По умолчанию, конфигурационный файл называется nginx.conf
и расположен в каталоге
/usr/local/nginx/conf,
/etc/nginx или
/usr/local/etc/nginx.

Запуск, остановка, перезагрузка конфигурации

Чтобы запустить nginx, нужно выполнить исполняемый файл.
Когда nginx запущен, им можно управлять, вызывая исполняемый файл с
параметром -s.
Используйте следующий синтаксис:

nginx -s сигнал

Где сигнал может быть одним из нижеследующих:

  • stop — быстрое завершение
  • quit — плавное завершение
  • reload — перезагрузка конфигурационного файла
  • reopen — переоткрытие лог-файлов

Например, чтобы остановить процессы nginx с ожиданием окончания
обслуживания текущих запросов рабочими процессами, можно выполнить
следующую команду:

nginx -s quit

Команда должна быть выполнена под тем же
пользователем, под которым был запущен nginx.

Изменения, сделанные в конфигурационном файле,
не будут применены, пока команда перезагрузить конфигурацию не будет
вручную отправлена nginx’у или он не будет перезапущен.
Для перезагрузки конфигурации выполните:

nginx -s reload

Получив сигнал, главный процесс проверяет правильность синтаксиса нового
конфигурационного файла и пытается применить конфигурацию, содержащуюся
в нём.
Если это ему удаётся, главный процесс запускает новые рабочие процессы
и отправляет сообщения старым рабочим процессам с требованием завершиться.
В противном случае, главный процесс откатывает изменения и продолжает
работать со старой конфигурацией.
Старые рабочие процессы, получив команду завершиться,
прекращают принимать новые запросы и продолжают обслуживать текущие запросы
до тех пор, пока все такие запросы не будут обслужены.
После этого старые рабочие процессы завершаются.

Посылать сигналы процессам nginx можно также средствами Unix,
такими как утилита kill.
В этом случае сигнал отправляется напрямую процессу с данным ID.
ID главного процесса nginx записывается по умолчанию в файл
nginx.pid в каталоге
/usr/local/nginx/logs или
/var/run.
Например, если ID главного процесса равен 1628, для отправки сигнала QUIT,
который приведёт к плавному завершению nginx, нужно выполнить:

kill -s QUIT 1628

Для просмотра списка всех запущенных процессов nginx может быть использована
утилита ps, например, следующим образом:

ps -ax | grep nginx

Дополнительную информацию об отправке сигналов процессам nginx
можно найти в Управление nginx.

Структура конфигурационного файла

nginx состоит из модулей, которые настраиваются директивами, указанными
в конфигурационном файле.
Директивы делятся на простые и блочные.
Простая директива состоит из имени и параметров, разделённых пробелами,
и оканчивается точкой с запятой (;).
Блочная директива устроена так же, как и простая директива, но
вместо точки с запятой после имени и параметров следует набор дополнительных
инструкций, помещённых внутри фигурных скобок
({ и }).
Если у блочной директивы внутри фигурных скобок можно задавать другие
директивы, то она называется контекстом (примеры:
events,
http,
server
и
location).

Директивы, помещённые в конфигурационном файле вне любого контекста,
считаются находящимися в контексте
main.
Директивы events и http
располагаются в контексте main, server —
в http, а location — в
server.

Часть строки после символа # считается комментарием.

Раздача статического содержимого

Одна из важных задач конфигурации nginx — раздача
файлов, таких как изображения или статические HTML-страницы.
Рассмотрим пример, в котором в зависимости от запроса файлы будут
раздаваться из разных локальных каталогов: /data/www,
который содержит HTML-файлы, и /data/images,
содержащий файлы с изображениями.
Для этого потребуется отредактировать конфигурационный файл и настроить
блок
server
внутри блока http
с двумя блоками location.

Во-первых, создайте каталог /data/www и положите в него файл
index.html с любым текстовым содержанием, а также
создайте каталог /data/images и положите в него несколько
файлов с изображениями.

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

http {
    server {
    }
}

В общем случае конфигурационный файл может содержать несколько блоков
server,
различаемых по портам, на
которых они
слушают,
и по
имени сервера.
Определив, какой server будет обрабатывать запрос,
nginx сравнивает URI, указанный в заголовке запроса, с параметрами директив
location, определённых внутри блока
server.

В блок server добавьте блок location
следующего вида:

location / {
    root /data/www;
}

Этот блок location задаёт “/
в качестве префикса, который сравнивается с URI из запроса.
Для подходящих запросов добавлением URI к пути, указанному в директиве
root,
то есть, в данном случае, к /data/www, получается
путь к запрашиваемому файлу в локальной файловой системе.
Если есть совпадение с несколькими блоками location,
nginx выбирает блок с самым длинным префиксом.
В блоке location выше указан самый короткий префикс,
длины один,
и поэтому этот блок будет использован, только если не будет совпадения
ни с одним из остальных блоков location.

Далее, добавьте второй блок location:

location /images/ {
    root /data;
}

Он будет давать совпадение с запросами, начинающимися с
/images/
(location / для них тоже подходит, но указанный там префикс
короче).

Итоговая конфигурация блока server должна выглядеть
следующим образом:

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

Это уже работающая конфигурация сервера, слушающего на стандартном порту 80
и доступного на локальном компьютере по адресу
http://localhost/.
В ответ на запросы, URI которых начинаются с /images/,
сервер будет отправлять файлы из каталога /data/images.
Например, на запрос
http://localhost/images/example.png nginx отправит
в ответ файл /data/images/example.png.
Если же этот файл не существует, nginx отправит ответ, указывающий на
ошибку 404.
Запросы, URI которых не начинаются на /images/, будут
отображены на каталог /data/www.
Например, в результате запроса
http://localhost/some/example.html в ответ будет
отправлен файл /data/www/some/example.html.

Чтобы применить новую конфигурацию, запустите nginx, если он ещё не запущен,
или отправьте сигнал reload главному процессу nginx,
выполнив:

nginx -s reload

В случае если что-то работает не как ожидалось, можно попытаться выяснить
причину с помощью файлов access.log и error.log
из каталога
/usr/local/nginx/logs или
/var/log/nginx.

Настройка простого прокси-сервера

Одним из частых применений nginx является использование его в качестве
прокси-сервера, то есть сервера, который принимает запросы, перенаправляет их
на проксируемые сервера, получает ответы от них и отправляет их клиенту.

Мы настроим базовый прокси-сервер, который будет обслуживать запросы
изображений из локального каталога и отправлять все остальные запросы на
проксируемый сервер.
В этом примере оба сервера будут работать в рамках одного
экземпляра nginx.

Во-первых, создайте проксируемый сервер, добавив ещё один блок
server в конфигурационный файл nginx со следующим
содержимым:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

Это будет простой сервер, слушающий на порту 8080
(ранее директива listen не указывалась, потому что
использовался стандартный порт 80) и отображающий все
запросы на каталог /data/up1 в локальной файловой
системе.
Создайте этот каталог и положите в него файл index.html.
Обратите внимание, что директива root помещена в контекст
server.
Такая директива root будет использована, когда директива
location, выбранная для выполнения запроса, не содержит
собственной директивы root.

Далее, используйте конфигурацию сервера из предыдущего раздела
и видоизмените её, превратив в конфигурацию прокси-сервера.
В первый блок location добавьте директиву
proxy_pass,
указав протокол, имя и порт проксируемого сервера в качестве параметра
(в нашем случае это http://localhost:8080):

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

Мы изменим второй блок
location, который на данный момент отображает запросы
с префиксом /images/ на файлы из каталога
/data/images так, чтобы он подходил для запросов изображений
с типичными расширениями файлов.
Изменённый блок location выглядит следующим образом:

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

Параметром является регулярное выражение, дающее совпадение со всеми
URI, оканчивающимися на .gif, .jpg или
.png.
Регулярному выражению должен предшествовать символ ~.
Соответствующие запросы будут отображены на каталог /data/images.

Когда nginx выбирает блок location,
который будет обслуживать запрос, то вначале он проверяет
директивы location,
задающие префиксы, запоминая location с самым
длинным подходящим префиксом, а затем проверяет регулярные выражения.
Если есть совпадение с регулярным выражением, nginx выбирает соответствующий
location, в противном случае берётся запомненный ранее
location.

Итоговая конфигурация прокси-сервера выглядит следующим образом:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

Этот сервер будет фильтровать запросы, оканчивающиеся на
.gif, .jpg или .png,
и отображать их на каталог /data/images (добавлением URI к
параметру директивы root) и перенаправлять все остальные
запросы на проксируемый сервер, сконфигурированный выше.

Чтобы применить новую конфигурацию, отправьте сигнал reload
nginx’у, как описывалось в предыдущих разделах.

Существует множество
других директив для дальнейшей настройки прокси-соединения.

Настройка проксирования FastCGI

nginx можно использовать для перенаправления запросов на FastCGI-серверы.
На них могут исполняться приложения, созданные с использованием
разнообразных фреймворков и языков программирования, например, PHP.

Базовая конфигурация nginx для работы с проксируемым FastCGI-сервером
включает в себя использование директивы
fastcgi_pass
вместо директивы proxy_pass,
и директив fastcgi_param
для настройки параметров, передаваемых FastCGI-серверу.
Представьте, что FastCGI-сервер доступен по адресу
localhost:9000.
Взяв за основу конфигурацию прокси-сервера из предыдущего раздела,
замените директиву proxy_pass на директиву
fastcgi_pass и измените параметр на
localhost:9000.
В PHP параметр SCRIPT_FILENAME используется для
определения имени скрипта, а в параметре QUERY_STRING
передаются параметры запроса.
Получится следующая конфигурация:

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

Таким образом будет настроен сервер, который будет перенаправлять
все запросы, кроме запросов статических изображений, на проксируемый
сервер, работающий по адресу localhost:9000,
по протоколу FastCGI.

Работа с файлами — Изучение веб-разработки

Веб-сайт состоит из множества файлов: текстового контента, кода, стилей, медиа-контента, и так далее. Когда вы создаёте веб-сайт, вы должны собрать эти файлы в рациональную структуру на вашем локальном компьютере, убедитесь, что они могут общаться друг с другом, и весь ваш контент выглядит правильно, прежде чем вы, в конечном итоге загрузите их на сервер. В статье Работа с файлами обсуждаются некоторые вопросы, о которых вам следует знать, чтобы вы могли рационально настроить файловую структуру для своего веб-сайта.

Когда вы работаете на веб-сайте локально на вашем компьютере, вы должны держать все связанные файлы в одной папке, которая отражает файловую структуру опубликованного веб-сайта на сервере. Эта папка может располагаться где угодно, но вы должны положить её туда, где вы сможете легко её найти, может быть, на ваш рабочий стол, в домашнюю папку или в корень вашего жёсткого диска.

  1. Выберите место для хранения проектов веб-сайта. Здесь, создайте новую папку с именем web-projects (или аналогичной). Это то место, где будут располагаться все ваши проекты сайтов.
  2. Внутри этой первой папки, создайте другую папку для хранения вашего первого веб-сайта. Назовите её test-site (или как-то более творчески).

Вы заметите, что в этой статье, мы просим вас называть папки и файлы полностью в нижнем регистре без пробелов. Это потому что:

  1. Многие компьютеры, в частности веб-серверы, чувствительны к регистру. Так, например, если вы положили изображение на свой веб-сайт в test-site/MyImage.jpg, а затем в другом файле вы пытаетесь вызвать изображение как test-site/myimage.jpg, это может не сработать.
  2. Браузеры, веб-серверы и языки программирования не обрабатывают пробелы последовательно. Например, если вы используете пробелы в имени файла, некоторые системы могут отнестись к имени файла как к двум именам файлов. Некоторые серверы заменяют пробелы в вашем имени файла на «%20» (символьный код для пробелов в URI), в результате чего все ваши ссылки будут сломаны. Лучше разделять слова дефисами, чем нижними подчёркиваниями: my-file.html лучше чем my_file.html.

Говоря простым языком, вы должны использовать дефис для имён файлов. Поисковая система Google рассматривает дефис как разделитель слов, но не относится к подчёркиванию таким образом. По этим причинам, лучше всего приобрести привычку писать названия ваших папок и файлов в нижнем регистре без пробелов, разделяя слова дефисами, по крайней мере, пока вы не поймёте, что вы делаете. Так в будущем вы столкнётесь с меньшим количеством проблем.

Далее, давайте взглянем на то, какую структуру должен иметь наш тестовый сайт. Наиболее распространённые вещи, присутствующие в любом проекте сайта, которые мы создаём: индексный файл HTML и папки, содержащие изображения, файлы стилей и файлы скриптов. Давайте создадим их сейчас:

  1. index.html: Этот файл обычно содержит контент домашней страницы, то есть текст и изображения, которые люди видят, когда они впервые попадают на ваш сайт. Используя ваш текстовый редактор, создайте новый файл с именем index.html и сохраните его прямо внутри вашей папки test-site.
  2. Папка images: Эта папка будет содержать все изображения, которые вы используете на вашем сайте. Создайте папку с именем images внутри вашей папки test-site.
  3. Папка styles: Эта папка будет содержать CSS код, используемый для стилизации вашего контента (например, настройка текста и цвета фона). Создайте папку с именем styles внутри вашей папки test-site.
  4. Папка scripts: Эта папка будет содержать весь JavaScript код, используемый для добавления интерактивных функций на вашем сайте (например, кнопки которые загружают данные при клике). Создайте папку с именем scripts внутри вашей папки test-site.

Примечание: На компьютерах под управлением Windows у вас могут возникнуть проблемы с отображением имён файлов, поскольку у Windows есть опция Скрывать расширения для известных типов файлов, включённая по умолчанию. Обычно вы можете отключить её, перейдя в проводник, выбрать вариант Свойства папки… и снять флажок Скрывать расширения для зарегистрированных типов файлов, затем щёлкнуть OK. Для получения более точной информации, охватывающей вашу версию Windows, вы можете произвести поиск в Интернете.

Для того, чтобы файлы общались друг с другом, вы должны указать файлам путь друг к другу — обычно один файл знает, где находится другой. Чтобы продемонстрировать это, мы вставим немного HTML в наш файл index.html и научим его отображать изображение, которое вы выбрали в статье «Каким должен быть ваш веб-сайт?»

  1. Скопируйте изображение, которое вы выбрали ранее, в папку images.
  2. Откройте ваш файл index.html и вставьте следующий код в файл именно в таком виде. Не беспокойтесь о том, что все это значит — позже в этом руководстве мы рассмотрим структуры более подробно.
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Моя тестовая страница</title>
      </head>
      <body>
        <img src="" alt="Моё тестовое изображение">
      </body>
    </html> 
  3. Строка <img src="" alt="Моё тестовое изображение"> — это HTML код, который вставляет изображение на страницу. Мы должны сказать HTML, где находится изображение. Изображение находится внутри папки images, которая находится в той же директории что и index.html. Чтобы спуститься вниз по нашей файловой структуре от index.html до нашего изображения, путь к файлу должен выглядеть так images/your-image-filename. Например наше изображение, названное firefox-icon.png, имеет такой путь к файлу: images/firefox-icon.png.
  4. Вставьте путь к файлу в ваш HTML код между двойными кавычками src="".
  5. Сохраните ваш HTML файл, а затем загрузите его в вашем браузере (двойной щелчок по файлу). Вы должны увидеть вашу новую веб-страницу, отображающую ваше изображение!

Некоторые общие правила о путях к файлам:

  • Для ссылки на целевой файл в той же директории, что и вызывающий HTML файл, просто используйте имя файла, например, my-image.jpg.
  • Для ссылки на файл в поддиректории, напишите имя директории в начале пути, плюс косую черту (forwardslash, слеш), например: subdirectory/my-image.jpg.
  • Для ссылки на целевой файл в директории выше вызывающего HTML файла, напишите две точки. Например, если index.html находится внутри подпапки test-site, а my-image.png — внутри test-site, вы можете обратиться к my-image.png из index.html, используя ../my-image.png.
  • Вы можете комбинировать их так, как вам нравится, например ../subdirectory/another-subdirectory/my-image.png.

На данный момент это все, что вам нужно знать

Примечание: Файловая система Windows стремится использовать обратный слеш (backslash), а не косую черту (forwardslash), например C:\windows. Это не имеет значения, даже если вы разрабатываете веб-сайт на Windows, вы все равно должны использовать обычные слеши в вашем коде.

К настоящему моменту структура вашей папки должна выглядеть примерно так:

 

 

Метаданные в файлах PNG

Portable Network Graphics (PNG) — это формат файлов растровой графики, который поддерживает переносимый, юридически не перегруженный, хорошо сжатый, четко определенный стандарт для файлов растровых изображений без потерь.

PNG всегда начинается с 8-байтовой подписи: 137 80 78 71 13 10 26 10 (десятичные значения). Остальная часть файла состоит из серии фрагментов, начиная с фрагмента IHDR и заканчивая фрагментом IEND.

1. Чанки¶

Каждый блок состоит из четырех частей:

Длина 4 байта Целое число без знака, указывающее количество байтов в поле данных блока.31-1 байт.
Тип блока 4 байта Коды типов могут состоять только из прописных и строчных букв ASCII, и они чувствительны к регистру.
+ Регистр первой буквы указывает, является ли блок критическим или нет. Если первая буква в верхнем регистре, фрагмент критичен; в противном случае блок является вспомогательным (более подробная информация указана ниже).
+ Регистр второй буквы указывает, является ли блок «общедоступным» (либо в спецификации, либо в реестре общедоступных блоков специального назначения) или «частным» (не стандартизованным).Прописные буквы являются общедоступными, а строчные — частными.
+ Третья буква должна быть прописной, чтобы соответствовать спецификации PNG. Он зарезервирован для будущего расширения.
+ Регистр четвертой буквы указывает, можно ли копировать фрагмент редакторами, которые его не распознают.
Данные фрагмента Длина байт Байты данных, соответствующие типу блока, если есть. Это поле может быть нулевой длины.
CRC 4 байта CRC (Cyclic Redundancy Check), вычисленная для предыдущих байтов в блоке, включая код типа блока и поля данных блока, но не включая поле длины.CRC присутствует всегда, даже для фрагментов, не содержащих данных.

Рис.1. Макет чанка.

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

Имя Несколько Ограничения для заказа Содержимое
IHDR Нет Должен быть первым ширина, высота и битовая глубина изображения
PLTE Нет До IDAT палитра; список цветов.
IDAT Есть Несколько IDAT должны быть последовательными — фактические данные изображения, которые могут быть разделены между несколькими блоками IDAT. Такое разделение немного увеличивает размер файла, но позволяет генерировать PNG в потоковом режиме.
IEND Нет Должен быть последним он просто отмечает конец изображения. Поле данных чанка пусто.

Фиг.2. Некоторые стандартные критические блоки.

Чанки, которые не являются строго необходимыми для значимого отображения содержимого файла, известны как вспомогательные блоки . Он включает в себя значения гаммы, цвет фона и текстовые метаданные, и т. Д. … Если декодер заключает в себя вспомогательный фрагмент, который он не понимает, он может игнорировать его.

Имя Несколько Ограничения для заказа Содержимое
cHRM Нет До PLTE и IDAT — координаты цветности основных цветов дисплея и точки белого.
ГАМА Нет До PLTE и IDAT значений гаммы.
iCCP Нет До PLTE и IDAT цветовой профиль ICC.
СБИТ Нет До PLTE и IDAT точность цветопередачи исходных данных.
sRGB Нет До PLTE и IDAT стандартное цветовое пространство sRGB.
бКГД Нет После PLTE; до IDAT цвет фона по умолчанию. Он предназначен для использования, когда нет лучшего выбора, например, в автономных средствах просмотра изображений.
hIST Нет После PLTE; до IDAT гистограмма или общее количество каждого цвета в изображении.
тРНС Нет После PLTE; до IDAT информация о прозрачности.Для проиндексированных изображений он хранит значения альфа-канала для одной или нескольких записей палитры. Для полноцветных изображений и изображений в градациях серого он хранит одно значение пикселя, которое следует рассматривать как полностью прозрачное.
pHYs Нет До IDAT предполагаемый размер пикселя и / или соотношение сторон изображения.
sPLT Есть До IDAT палитра для использования, если полный диапазон цветов недоступен.
ВРЕМЯ Нет Нет время последнего изменения изображения.
iTXt Есть Нет Текст UTF-8, сжатый или несжатый, с дополнительным языковым тегом.
ТЕКСТ Есть Нет текст, который может быть представлен в ISO / IEC 8859-1.
zTXt Есть Нет сжатый текст с теми же ограничениями, что и tEXt.

Рис.3. Некоторые стандартные вспомогательные блоки.

2. Блоки текстовой информации — метаданные в формате PNG¶

Блоки iTXt, tEXt и zTXt (блоки текста) используются для передачи текстовой информации, связанной с изображением. Это места, где мы можем найти все метаданные файла PNG.

Каждый из текстовых фрагментов содержит в качестве своего первого поля ключевое слово, которое указывает тип информации, представленной текстовой строкой. Следующие ключевые слова предопределены и должны использоваться там, где это необходимо:

Ключевые слова Объяснить
Название Короткое (однострочное) название или подпись к изображению
Автор Имя создателя изображения
Описание Описание изображения (возможно, длинное)
Авторское право Уведомление об авторских правах
Время создания Время создания оригинального изображения
Программное обеспечение Программное обеспечение для создания образа
Заявление об ограничении ответственности Заявление об отказе от ответственности
Предупреждение Предупреждение о характере содержимого
Источник Устройство для создания образа
Комментарий Прочие комментарии; преобразование из комментария GIF

Другие ключевые слова могут быть придуманы для других целей.Ключевое слово должно состоять как минимум из одного символа и содержать не более 80 символов. Ключевые слова, представляющие общий интерес, могут быть зарегистрированы у разработчиков спецификации PNG. Согласно спецификации XMP, пакет XMP встраивается в графический файл PNG путем добавления фрагмента типа iTXt с ключевым словом XML: com.adobe.xmp. Нет стандарта для данных Exif, IPTC. В Exiv2, когда добавляются Exif, IPTC, они сохраняются в текстовых блоках zTXt и сохраняются как ASCII.

2.1 ТЕКСТ Текстовые данные

В формате:

Ключевое слово Нулевой сепаратор Текст
1-79 байт 1 байт n байтов

Текст интерпретируется в соответствии с набором символов ISO / IEC 8859-1 (Latin-1).Текстовая строка может содержать любой символ Latin-1. Новые строки в текстовой строке должны быть представлены одним символом перевода строки (десятичное число 10).

2.2 zTXt Сжатые текстовые данные¶

В формате:

Ключевое слово Нулевой сепаратор Метод сжатия Сжатый текст
1-79 байт 1 байт 1 байт n байтов

Блок zTXt содержит текстовые данные, как и tEXt; однако zTXt использует сжатие.Блоки zTXt и tEXt семантически эквивалентны, но zTXt рекомендуется для хранения больших блоков текста. Единственное допустимое в настоящее время значение для Compression method — 0 (сжатие спустить / накачать)

2.3 Текстовые данные iTXt International¶

В формате:

Ключевое слово Нулевой сепаратор Флаг сжатия Метод сжатия Языковой тег Нулевой сепаратор Ключевое слово переведено Нулевой сепаратор Текст
1-79 байт 1 байт 1 байт 1 байт 0 или более байтов 1 байт 0 или более байтов 1 байт 0 или более байтов

Этот фрагмент семантически эквивалентен фрагментам tEXt и zTXt, но текстовые данные находятся в кодировке UTF-8 набора символов Unicode вместо Latin-1

Пример:
В этом примере используется версия exiv2 (.exe), поставляемый с v0.25, чтобы показать структуру файла. Параметр -pa печатает все метаданные, -pS печатает структуру файла, -pX извлекает необработанные данные XMP / xml.

841 rmills @ rmillsmbp: ~ / gnu / exiv2 / trunk / website $ exiv2 -pa ~ / png
Exif.Image.ImageWidth SLong 1320
...
Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 4376
Iptc.Application2.ObjectName String 4 ovni
...
Iptc.Application2.RecordVersion Short 1 4
Xmp.dc.title LangAlt 1 lang = "x-default" это заголовок
842 rmills @ rmillsmbp: ~ / gnu / exiv2 / trunk / website $ exiv2 -pS ~ / png
СТРУКТУРА PNG-ФАЙЛА: / Users / rmills / png
 адрес | индекс | chunk_type | длина | данные
       8 | 0 | IHDR | 13 |
      33 | 1 | zTXt | 8769 | Необработанный тип профиля exif..x ... [r ..
    8814 | 2 | zTXt | 270 | Тип исходного профиля iptc..x. = QKn.
    9096 | 3 | iTXt | 2524 | XML: com.adobe.xmp..... 


  
    
      
        
           это заголовок 
        
      
    
  


844 rmills @ rmillsmbp: ~ / gnu / exiv2 / trunk / website $ 

Большая часть файла состоит из блоков IDAT, которые содержат само изображение (пиксели).Что еще более интересно, блоки zTXt содержат данные Exif и Iptc. Чанк iTXt содержит XMP / xml. Блоки данных Exif и Iptc хранятся с использованием спецификации контейнера TIFF. Пример в документе TIFF показывает, как извлечь и распечатать структуру данных Exif, записанных в формате TIFF. http://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_TIFF_files

Список литературы¶

Как работает PNG. Портативная сетевая графика (PNG) имеет… | Автор Colt McAnlis

Портативная сетевая графика (PNG) стала основным продуктом для разработки приложений за последние несколько десятилетий.Он распространился повсюду, от разработки игр до веб-разработки и разработки под Android, а это значит, что он получил широкое распространение, но также имеет возможность широко использовать .

И, как я уже говорил ранее, PNG обеспечивает хороший формат изображения с высоким разрешением, но это означает, что есть много возможностей для улучшения сжатия данных. Но прежде чем мы начнем говорить о , как сжимать файлы PNG, мы должны сначала поговорить о , как работает формат .

PNG: сжатие осуществляется без потерь; Это означает, что сжатый файл может точно восстановить исходное изображение. Выполняется в два этапа: прогнозирование (также известное как фильтрация) и затем сжатие.

Дельта-кодирование — один из самых мощных методов сжатия чисел. Основная идея состоит в том, что вы можете представить любое значение как отличие от предыдущего значения. Итак,

[2,3,4,5,6,7,8] может стать [2,1,1,1,1,1,1], где

[2, 3–2 = 1, 4 –3 = 1, 5–4 = 1, 6–5 = 1, 7–6 = 1, 8–7 = 1]

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

Формат PNG использует дельта-кодирование в формате, который он называет «фильтрацией». По сути, для каждой строки сканирования пикселей текущий пиксель кодируется в некотором отношении к пикселю слева, пикселю вверху и пикселю вверху слева.

Например, если мы закодировали данный пиксель, указав его разницу между средним значением A и B (X — ((A + B) / 2), то мы получим:

Фильтрация берет ABC и использует это для предсказывает, каково значение x, . Значение, которое мы заменяем x, представляет собой разницу между предсказанием и фактическим значением.

Теперь стоит отметить, что каждая строка может немного отличаться, поэтому PNG позволяет выбрать 1 из 5 различных режимов для каждой строки:

  • Без фильтрации
  • Разница между X и A
  • Разница между X и B
  • Разница между X и (A + B) / 2 (он же средний)
  • Предиктор Паэта (линейная функция от A, B, C)

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

Пример применения фильтрации к двум строкам значений пикселей. Затронутые пиксели выделены синим цветом.

И важно отметить, что эти фильтры сделаны, на канал, не на пиксель. Это означает, что фильтр применяется ко всем красным значениям пикселя для строки развертки, а затем отдельно ко всем значениям синего для строки развертки (хотя все цвета в строке будут использовать тот же фильтр ).

А формат PNG имеет несколько отличных способов выбрать, какой фильтр использовать на канале; Хотя грубая сила является наиболее прямой, она просто прямая.Вместо этого разработчики экспериментировали с разными типами изображений и пришли к некоторым практическим правилам, близким к оптимальным; например, используйте фильтры «Нет» для изображений палитры и изображений в оттенках серого менее 8 бит. А для других изображений выберите фильтр, который минимизирует сумму абсолютных различий; Вместо использования по модулю 256 вместо стандартной знаковой математики возьмите значение abs, сложите их все вместе для данной строки и сравните суммы для других типов фильтров. Выберите фильтр, который дает наименьшую сумму.

Как только фильтрация происходит в строке сканирования, она передается потомку алгоритма LZ77, известному как DEFLATE; Этот алгоритм сочетает в себе кодирование LZ77 с кодером Хаффмана. Это почти идентично компрессорам, таким как PKWARE, PKZIP, GZip и т. Д. Реализация является стандартной, но имеет некоторые интересные оговорки, когда дело касается данных изображений.

  1. Пределы дефлятирования соответствуют длинам от 3 до 258 символов; что дает максимально возможную степень сжатия около 1032: 1.
  2. Если совпадение составляет менее 3 символов, тогда вы несете некоторые накладные расходы на представление символа

Результат этих двух означает, что размер вашего изображения может иметь влияние, если совпадения будут найдены в строке развертки.

Рассмотрим это изображение ниже. Версия 270×90 имеет размер всего 20 КБ, а версия 270×92 в 2 раза больше.

Логически это кажется неправильным. Добавление 540 пикселей к изображению не должно приводить к двукратному увеличению сжатия. Однако если мы присмотримся немного ближе, мы сможем понять, почему это происходит; Следующая тепловая карта изображений показывает, насколько сжат данный пиксель.Темно-синий = очень сжатый, желтый / красный = не очень сжатый

Здесь происходит то, что в меньшем изображении больше совпадений в строках развертки, и, следовательно, сжатие лучше. Однако небольшая настройка размера меняет тип соответствия, которое может произойти; некоторые потенциальные кандидаты для сопоставления теперь находятся за пределами нашего окна LZ и, следовательно, не сопоставлены, что приводит к увеличению размера файла.

Если вы хотите узнать, насколько хорошо ваши собственные изображения сжимаются с помощью PNG, проверьте PNGThermal.

Стоит отметить, что PNG — это больше, чем просто этапы фильтрации и сжатия. Это довольно расширяемый формат контейнера, который может поддерживать все типы изображений и добавленные данные.

Начнем с того, что формат файла PNG может поддерживать ряд фрагментов внутри себя, которые могут включать в себя различные типы данных. Например, у вас есть блок заголовка PNG , который содержит простую информацию об изображении, такую ​​как ширина, высота, битовая глубина и тип цвета.

Блок данных изображения содержит фактическую информацию об изображении (о, и обратите внимание, эта информация может существовать в нескольких блоках). Затем для изображений с цветной палитрой для этого есть отдельный блок.

И, наконец, фрагмент конца файла . И это основные фрагменты, но есть также целый ряд других фрагментов, например:

  • Цвет фона по умолчанию
  • Координаты цветности для отображения белых точек
  • Спецификация гаммы
  • Информация о гистограмме
  • Текстовые данные с языком или Информация о метаданных
  • Информация о цветовом пространстве
  • Данные стереоизображения
  • Фрагмент, который отмечает последний раз, когда файл был изменен
  • И данные прозрачности.

Теперь эти фрагменты — это то место, на которое вам нужно обратить внимание, потому что ваше приложение для редактирования фотографий помещает туда много мусора. Например, при сохранении файла PNG из Photoshop создается блок с надписью «, это изображение было создано в Photoshop. ”Этот фрагмент не имеет ничего общего с данными видимых пикселей, но тем не менее он включен в сам файл. Таким образом, УДАЛЕНИЕ бесполезных фрагментов имеет решающее значение для обеспечения небольших размеров файлов. На изображении ниже показано изображение размером 16×16 пикселей, сохраненное из Photoshop как обычный PNG, а другое — с использованием опции Photoshop « экспорт в Интернет, », которая удаляет всю чепуху.

Левое изображение регулярно сохранялось через Photoshop, правое изображение сохранялось через «экспорт в Интернет». разница в размерах связана с удалением метаданных из файла.

Формат PNG может ТАКЖЕ поддерживать различные типы форматов пикселей, поэтому вы можете создать оптимальный

Индексированный = 1 канал, может быть 1,2,4,8 бит на канал

Оттенки серого = 1 канал, может быть 1,2,4, 8,16 бит на канал

Серый + альфа = 2 канала, может быть 8 или 16 бит на канал

Truecolor (RGB) = 3 канала, может быть 8 или 16 бит на канал

RGBA = 4 канала, может быть 8 или 16 бит на канал

Форматы пикселей выбираются автором файла изображения.Так что это не слишком интересно обсуждать, кроме как убедиться, что вы выбрали правильный формат пикселей; Сохранение изображения в градациях серого как истинного цвета с альфа-каналом — плохая идея.

Когда дело доходит до непрекращающегося объема веб-контента, изображения являются сегодня самой большой несущей нагрузкой (хотя есть аргумент, что видео в последнее время стали королем).

Но что действительно интересно, так это то, что, хотя информация о сжатии может помочь решить некоторые проблемы, существует огромное количество человеческих проблем, которые не позволяют сжатию попасть в руки каждого.

Давайте вернемся в 1985 год, когда Unisys подала патент на алгоритм сжатия LZW, в то время ничего особо интересного. Несколько лет спустя, когда CompuServe изобрел формат 89a (который позже стал форматом GIF), они использовали LZW в качестве основы, не понимая, что он запатентован. Unisys не заботился об этом до 1993 года, когда браузер Netscape добавил поддержку тега IMG HTML наряду с поддержкой формата 89a. В течение года анимированные изображения стали повальным увлечением в Интернете, и Unisys начала обеспечивать соблюдение своего патента.CompuServe и Unisys в конечном итоге достигли судебного соглашения в декабре 1994 года, объявив, что Unisys начнет собирать лицензионные платежи за все программное обеспечение, использующее графический формат 89a. Через несколько месяцев после этого решения группа инженеров разработала совершенно новый, свободный от патентов формат, известный как Portable Network Graphics или формат PNG.

В 2004 году патент на LZW окончательно истек, но в течение целого десятилетия дебаты о формате изображений GIF / PNG были горячими среди интернет-пользователей.

PNG — очень гибкий и мощный формат изображения, который стал популярным в Интернете благодаря способности поддерживать прозрачность.Но это не подходит для _в любой_ ситуации; В общем, убедитесь, что вы используете лучший инструмент для работы. Если ваше изображение является фотографическим и абсолютное отсутствие потерь не требуется, тогда JPG или эквивалентный метод с потерями будет более эффективным, чем любой подход без потерь. С другой стороны, если вам нужен битовый формат меньшего размера или нужна прозрачность, PNG будет доминирующим преимуществом над JPG.

И если вам интересно увидеть наиболее простую реализацию кодировщика PNG, ознакомьтесь с этой замечательной сутью, которая упаковывает все это в ~ 40 строк кода.

Конечно, есть WebP, который даст вам и то, и другое .. Но это отдельная статья;)

ЭЙ !

Хотите уменьшить ваши PNG-файлы? Ознакомьтесь с последующим постом о файлах меньшего размера PNG.

Хотите знать, как работают файлы JPG и как их уменьшить?

Хотите большего качества сжатия данных? Купи мою книгу!

Synalyze It! Учебное пособие — декодирование файла PNG

Создать грамматику для двоичного файла в интерактивном режиме довольно просто.Просто выполните следующие действия, чтобы декодировать содержимое файла изображения PNG. (Подробнее см. Http://www.w3.org/TR/PNG/)

Еще одно руководство по Synalyze It! это для файлов Adobe Swatch Exchange (нажмите здесь)

Во-первых, Synalyze It! приветствует вас так:

В большинстве случаев сначала нужно открыть файл для анализа — щелкните Открыть файл и выберите, например, /System/Library/WidgetResources/resize.png .Если вы не отключили предложение грамматик в настройках, вас спросят, хотите ли вы загрузить существующую грамматику PNG из Synalyze It! сайт:

Для этого урока скажите , потому что вы хотите создать свою собственную грамматику PNG. Вы получите обычный шестнадцатеричный вид:

.

Вы можете нажать Cmd-Shift-N , чтобы создать новую грамматику, но проще щелкнуть список Grammar на панели инструментов и выбрать Create Grammar… .Появится новый документ грамматики, и если вы нажмете кнопку Grammar Info на его панели инструментов, вы увидите, что все поля заполняются автоматически:

Подсказка: вы также можете использовать это диалоговое окно для перевода UTI, MIME-типа, расширения файла и OSType. Просто отредактируйте значение, которое хотите перевести.

Нажмите Введите или нажмите OK . Если вы вернетесь к справочному документу, шестнадцатеричное представление должно выглядеть так:

Заголовок файлов PNG состоит из 8 байтов.Чтобы добавить эти байты в грамматику, просто выберите первые 8 байтов в шестнадцатеричном представлении, щелкните выделение, удерживая нажатой клавишу Ctrl (или щелкните правой кнопкой мыши) и выберите Insert / Binary .

Следующим шагом будет присвоение имени и цвета добавляемому новому элементу бинарной структуры:

Шестнадцатеричный вид отразит эти изменения:

Каждый фрагмент файла PNG состоит из 4-байтового поля длины, 4-байтового имени фрагмента, данных фрагмента и 4-байтовой контрольной суммы CRC.Чтобы добавить структуру фрагментов в грамматику, выберите 25 (19h) байтов за байтами заголовка (8-32), щелкните выделение, удерживая Ctrl, и выберите Insert / Structure :

Подсказка: чтобы отобразить начало, конец и длину выделения в десятичных числах, щелкните, удерживая клавишу Ctrl, в таблице под шестнадцатеричным представлением и выберите Все столбцы / Десятичное число .

Чтобы не запутаться, назовите новую структуру « Chunk » и, если хотите, раскрасьте ее, используя поле Color .Теперь вы можете добавить элементы структуры Chunk: выберите первые 4 байта в фрагменте (поле Length , байты 8-11), добавьте их как Number , следующие 4 байта (chunk Type , 12 -15) как строка , байты 16-28 (фрагмент данных ) как структура и последние 4 байта ( CRC , 29-32) как номер .

Теперь ваша грамматика должна выглядеть так:

В соответствии со спецификацией PNG поле длины принимает количество байтов в разделе данных блока.Поскольку вы создали элементы структуры из первого фрагмента, длина устанавливается равной 13.

Чтобы использовать значение поля длины в структуре Chunk, введите prev.Length в поле длины элемента Data:

Поле длины структуры Chunk теперь должно быть очищено, поэтому будет считаться, что он имеет переменный размер. Кроме того, для параметра Repeat max count должно быть установлено большое число. Теперь структура фрагментов завершена, и мы можем повторно применять ее к файлу:

Теперь должен быть декодирован весь файл:

Разве это не было просто? Еще лучше: созданную вами грамматику можно применить к любому файлу PNG! Ознакомьтесь с примерами файлов грамматики, чтобы узнать, как можно детально проанализировать различные фрагменты PNG.

Анализ структуры файла PNG — Анализ PNG

Для создания более сложных приложений мы должны полностью использовать потенциал PNG.

Файловая структура PNG

В зависимости от определения файла PNG, расположение заголовка файла всегда описывается байтом с фиксированным битом:

Десятичное число 137 80 78 71 13 10 26 10
Шестнадцатеричное число 4E 0D 0A 1 а 0A

Первый байт 0x89 выходит за пределы диапазона символов ASCII, чтобы некоторые программы не воспринимали файлы PNG как текстовые.Остальная часть файла состоит из более чем 3 блоков данных PNG (Chunk) в определенном порядке, поэтому стандартная структура файла PNG должна выглядеть следующим образом:

Файл PNG Флаги Блок данных PNG …… Блок данных PNG

Блок данных PNG (Chunk)

PNG определяет два типа блоков данных, один из которых называется критическим блоком данных (критический фрагмент), который является стандартным блоком данных, а другой называется блоком вспомогательных данных (вспомогательные фрагменты), который является необязательным блоком. данных.Критические блоки данных определяют 4 стандартных блока, каждый из которых должен их содержать, и программное обеспечение для чтения и записи PNG должно их поддерживать. Хотя спецификация файла PNG не требует, чтобы компилятор PNG кодировал и декодировал необязательный блок данных, спецификация поддерживает поддержку необязательных блоков данных.

В таблице ниже представлена ​​категория блоков данных в PNG, где мы используем темный фон для различения ключевых фрагментов.

Блоки данных в формате PNG
Символы блока данных Название блока данных Блок данных большинства Дополнительно № Ограничения по местоположению
IHDR Блок данных заголовка файла Ли Ли Первая штука
CHRM Блок данных основного цвета и точки белого Ли Is Перед Plte и Idat
ГАМА Блок данных гаммы изображения Ли Is До Plte и Idat
Сбит Пример действительного блока битовых данных Ли Is Перед Plte и Idat
Plte Блок данных палитры Ли Is До Идата
Бкг Блок данных цвета фона Ли Is До Idat после Plte
HIST Блок данных гистограммы изображения Ли Is До Idat после Plte
Трнс Блок прозрачных данных изображения Ли Is До Idat после Plte
ВЫКЛ (выделенный публичный блок данных) Ли Is До Идата
PHYs Блок данных о физическом размере пикселя Ли Is До Идата
SCAL (выделенный публичный блок данных) Ли Is До Идата
IDAT Блок данных изображения Is Ли Непрерывно с другим Idat
Время Блок данных времени последнего изменения изображения Ли Is Безлимит
ТЕКСТ Блок данных текстовой информации Is Is Безлимит
Ztxt Сжатие блоков текстовых данных Is Is Безлимит
FRAc (выделенный публичный блок данных) Is Is Безлимит
Gifg (выделенный публичный блок данных) Is Is Безлимит
ПОДАРОК ​​ (выделенный публичный блок данных) Is Is Безлимит
Gifx (выделенный публичный блок данных) Is Is Безлимит
конец Данные изображения конца Ли Ли Последний блок данных

Для простоты предположим, что в используемом нами файле PNG 4 блока хранятся в указанном выше порядке и только один раз.

Структура блока данных

В файле PNG каждый фрагмент состоит из 4 частей, а именно:

Имя Количество байтов Описание
Длина (длинная) 4 байта Определяет длину поля данных в блоке данных, которая не превышает (231-1) байтов
Код типа блока (код типа блока данных) 4 байта Коды блочного типа состоят из букв ASCII (A-Z и A-Z)
Данные фрагмента (данные блока) Изменяемая длина Хранит данные, указанные в соответствии с кодом типа блока
CRC (обнаружение циклического избыточного кода) 4 байта Хранение циклических избыточных кодов для обнаружения ошибок

Значения в поле CRC (проверка циклическим избыточным кодом) вычисляются для данных в домене кода типа блока и домене базы данных блока.Специфичный для CRC алгоритм определен в ISO 3309 и ITU-T v.42, и его значение рассчитывается как полином, сгенерированный следующим кодом CRC:

X32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1

CRC: алгоритм проверки. Просто чтобы проверить правильность данных.

Давайте посмотрим на структуру каждого ключевого блока по очереди.

IHDR Блок заголовка: он содержит основную информацию о данных изображения, хранящихся в файле PNG, и должен появиться в потоке данных PNG как первый блок данных, и только один блок заголовка файла в потоке данных PNG.IHDR Блок данных заголовка файла состоит из 13 байтов, которые отформатированы, как показано в следующей таблице.

Имя домена Количество байтов Описание
Ширина 4 байта Ширина изображения, в пикселях
Высота 4 байта Высота изображения, в пикселях
Битовая глубина 1 байт Глубина изображения:
Проиндексированных цветных изображений: 1,2,4 или 8
Изображение в градациях серого: 1,2,4,8 или 16
Изображение True Color: 8 или 16
Цвет Тип 1 байт Тип цвета:
0: Изображение в оттенках серого, 1,2,4,8 или 16
2: Изображение в режиме True Color, 8 или 16
3: Индексированное цветное изображение, 1,2,4 или 8
4: Изображение в оттенках серого с альфа-каналом данные канала, 8 или 16
6: полноцветное изображение с данными альфа-канала, 8 или 16
Метод сжатия 1 байт Метод сжатия (алгоритм вывода LZ77)
Метод фильтрации 1 байт Метод фильтрации
Метод чересстрочной развертки 1 байт Метод чересстрочной развертки:
0: Сплошная развертка
1: ADAM7 (метод 7-кратной чересстрочной развертки, разработанный Адамом М.Костелло)

Поскольку многие статьи этой статьи были разработаны для использования PNG в мобильных телефонах, требования к изображениям PNG, используемым в MIDP1.0, представлены здесь:

    • В MIDP1.0 можно использовать изображения PNG только с версией 1.0.
    • Размер файла: MIDP поддерживает изображения PNG любого размера, однако на самом деле, если изображение слишком велико, его нельзя прочитать из-за нехватки памяти.
    • Тип цвета: поддерживаются все типы цвета, хотя отображение этих цветов зависит от фактических возможностей дисплея устройства.Кроме того, MIDP может поддерживать альфа-канал, но вся информация альфа-канала игнорируется и обрабатывается как непрозрачный цвет.
    • Глубина цвета: поддерживаются все значения глубины цвета.
    • Метод сжатия: поддерживает только сжатие deflate, которое идентично способу сжатия файлов jar, поэтому при распаковке данных изображения PNG и распаковке файла jar можно использовать один и тот же код.
    • Метод фильтрации: поддерживаются все 5 методов в PNG.
    • Чересстрочная развертка: Хотя MIDP поддерживает 0, 12 способов, однако при использовании чересстрочной развертки MIDP на самом деле не использует режим чересстрочной развертки для отображения.
    • Plte Chunk: Поддержка
    • Блок IDAT: информация об изображении должна использоваться одним из 5 способов фильтрации (Нет, Дополнительная, Вверх, Средняя, ​​Paeth)
    • Iend Chunk: это изображение PNG считается допустимым изображением PNG при обнаружении блока данных Iend.
    • Необязательные блоки данных: MIDP может поддерживать следующие вторичные блоки данных, однако это не требуется.

BKGD CHRM GAMA HIST ICCP itxt pHYs

Sbit SPLT SRGB tEXt time Trns ztxt
Plte Блок данных палитры Plte (блок палитры) содержит данные преобразования цвета, относящиеся к индексированным цветным изображениям (изображение с индексированными цветами), которые относятся только к индексированным цветным изображениям и помещаются перед блоком данных изображения.Блоки данных Plte представляют собой информацию о палитре, которая определяет изображение, и Plte может содержать информацию о палитре от 1 до 256, каждая из которых состоит из 3 байтов:

Цвет байтов Значение
Красный 1 байт 0 = черный, 255 = красный
зеленый 1 байт 0 = черный, 255 = зеленый
Синий 1 байт 0 = черный, 255 = синий

Следовательно, длина палитры должна быть кратна 3, иначе палитра будет недопустимой.4 = 16), в противном случае изображение PNG будет недопустимым. Истинные цветные изображения и истинные цветные изображения с данными альфа-канала также могут иметь блоки данных палитры, которые предназначены для того, чтобы программы отображения не истинных цветов могли количественно определять данные изображения для отображения изображения.
IDAT Идентификатор блока данных изображения: Он хранит фактические данные, которые могут содержать несколько последовательных последовательных блоков изображения в потоке данных. Idat хранит реальную информацию об изображении, поэтому, если вы понимаете структуру idat, мы можем легко сгенерировать изображения PNG. iend Image end Data iend (фрагмент трейлера изображения): используется для отметки файла PNG или завершения потока данных и должен быть помещен в конец файла. Если мы внимательно посмотрим на файл PNG, мы обнаружим, что 12 символов в конце файла всегда должны выглядеть следующим образом: 4E 42 60 82 для определения структуры блока данных, длина блока данных iend всегда равна 0 ( 00 00 00 00, если искусственно не добавить информацию), идентификатор данных всегда будет iend (4E 44), поэтому CRC всегда будет AE 42 60 82. Пример использования PNG Ниже представлено изображение, созданное фейерверком, размер изображения 8 * 8, для удобства просмотра увеличьте изображение:

Откройте файл с помощью UltraEdit32 следующим образом:

00000000 ~ 00000007: Как видите, выбранные 8 байтов заголовка являются идентификатором файла PNG. 4 = 16, то есть это 16-цветное изображение (может быть не более 16 цветов, конечно, если количество цветов не превышает 8, 03 подходит больше)

  • 03 Цветотип, индексированное изображение
  • В спецификации PNG указано, что всегда будет 0 (а не 0 значений, зарезервированных для будущего использования лучшего метода сжатия), что означает, что метод сжатия (алгоритм деривации LZ77)
  • 00 Там же.8 = 256)
    00000030 ~ 00000062: Вот информация о палитре

      • 00 00 00 27 указывает, что данные цветовой палитры имеют длину 39 байтов и 13 цветов
      • Логотип 4C Plte
      • FF FF 00 Цвет 0
      • FF ED 00 Цвет 1
      • …… ……
      • B2 последний цвет, 12
      • 5F F5 BB DD Проверка CRC

    00000063 ~ 000000C5: Этот раздел содержит Phys, текст двух типов блоков данных всего 3 блока, потому что это не очень важно, и поэтому больше не описывается подробно.

    000000c0 ~ 000000f8: Выбранный выше раздел — это блок данных IDAT

      • 00 00 00 27 Длина данных 39 байт
      • Логотип Idat
      • 9C … Сжатые данные, метод сжатия LZ77
      • DA A5 CRC Контрольная сумма

    Раздел сжатых данных в Idat описан более подробно позже.
    000000f9 ~ 00000104: Конечный блок данных, эта часть, как сказано выше, обычно должна быть XX (XX) 4E 42 60 82 Теперь мы смогли идентифицировать каждый блок данных из файла PNG.Поскольку PNG указывает, что другие вспомогательные блоки являются необязательными, за исключением критических фрагментов, с помощью этого стандарта мы можем уменьшить размер файлов PNG, удалив все вспомогательные блоки данных. (Конечно, важно отметить, что формат PNG может сохранять в изображении такую ​​информацию, как слои, текст и т. Д., И после удаления этих вторичных блоков изображение теряет свой исходный редактируемый символ.) Файл PNG после вторичный блок данных удаляется, размер файла теперь составляет 147 байт, исходный размер файла — 261 байт, размер файла уменьшается, а содержимое изображения не изменяется.

      • Как упоминалось выше, блок данных IDAT генерируется с использованием алгоритма сжатия LZ77, поскольку он ограничен процессором телефона

    На самом деле, мы можем делать некоторые интересные вещи, изменяя значение цвета цветовой палитры, например, эффект потока облака / воды, реализовывать эффект затухания изображения и так далее.

    http://www.cnblogs.com/lidabo/p/3701197.html

    Анализ структуры файла PNG — Анализ PNG

    png idat кусок

    Итак, когда нам следует подождать, пока мы встретим блок IEND, прежде чем декодировать блок IDAT.TweakPNG — это низкоуровневая утилита для изучения и изменения файлов изображений PNG. Он поддерживает Windows XP и выше. Существует 4 вида критических фрагментов и 14 видов вспомогательных фрагментов. Допустимое изображение PNG должно содержать блок IHDR, один или несколько блоков IDAT и блок IEND. В формате файла PNG (мы сосредоточимся на файлах PNG с истинным цветом, а не на индексированных) блок IDAT хранит информацию о пикселях. фрагмент IDAT по смещению 0x150008, длина 45027 фрагмент IDAT по смещению 0x15aff7, длина 138 фрагментов IEND по смещению 0x15b08d, длина 0 Ошибок в sctf не обнаружено.png (28 фрагментов, сжатие 36,8%). В формате файла PNG (мы сосредоточимся на файлах PNG с истинным цветом, а не на индексированных) блок IDAT хранит информацию о пикселях. Насколько это может быть сложно, правда? PNG: фрагмент за фрагментом¶ Спецификация PNG определяет 18 типов фрагментов. См. Это сообщение на форуме Exiftool. Такое разделение немного увеличивает размер файла, но позволяет генерировать PNG в потоковом режиме. Чанк ‘fdAT’ имеет то же назначение, что и чанк ‘IDAT’. Основы формата файлов PNG. Сжатый поток данных представляет собой конкатенацию содержимого полей данных всех фрагментов fdAT в кадре.Он имеет ту же структуру, что и блок IDAT, за исключением того, что ему предшествует порядковый номер. IDAT содержит изображение, которое может быть разделено на несколько фрагментов IDAT. Если вам интересно узнать о фильтрации и сжатии изображений PNG, ознакомьтесь с разделом «Фильтрация и сжатие». PNG: CreationTime может некорректно отображаться при написании с помощью exiftool. Если у вас есть конкретный тип фрагмента PNG, вы можете посмотреть здесь, чтобы узнать, какую поддержку предоставляет PyPNG. Чтобы в полной мере использовать его, вы должны хотя бы в некоторой степени быть знакомы с внутренним форматом файлов PNG.Метод сжатия PNG 0 (единственный метод сжатия, определенный в настоящее время для PNG) определяет сжатие с расширением / расширением со скользящим окном размером не более 32768 байт. Прочитав сообщение Fin1te «XSS на Facebook с помощью PNG и Wonky Content Types» и сообщение idontplaydarts «Кодирование веб-командных оболочек в фрагментах PNG IDAT», я подумал, что было бы полезно создать свою собственную. См. Сводку стандартных фрагментов в Спецификации PNG. Кажется, что чтение блока PNG IDAT прекращается, даже если за его пределами есть данные, что разрешено спецификацией.Для каждого кадра требуется по крайней мере один фрагмент ‘fdAT’. Именно в этом блоке мы будем хранить оболочку PHP. Именно в этом блоке мы будем хранить оболочку PHP. Блок IDAT можно разделить на несколько блоков. Сжатие. Блок IDAT содержит фактические данные изображения, которые являются выходным потоком алгоритма сжатия. Чанк IDAT. Основы формата файлов PNG. Interlacd PNG кодируются таким образом, чтобы пользователи чувствовали, что изображение загружается быстрее. А пока предположим, что пиксели всегда хранятся как 3 байта, представляющие цветовые каналы RGB.Блок IDAT содержит фактические данные изображения, которые являются выходным потоком алгоритма сжатия. Пока мы предполагаем, что пиксели всегда хранятся как 3 байта, представляющие цветовые каналы RGB. Четырехбайтовое поле типа фрагмента содержит десятичные значения 73 68 65 84. Этот документ предназначен для помощи пользователям, которым интересен конкретный тип фрагмента PNG. Какая поддержка PyPNG обеспечивает небольшой размер файла, но позволяет сгенерировать файл in! Содержать фрагмент IHDR, за исключением того, что ему предшествует порядковый номер, вы можете здесь! Заинтересованы в конкретном назначении типа блока PNG, поскольку каждый блок IDAT требуется.Имеет ту же цель, что и блок IDAT. Мы предполагаем, что он может быть разделен между несколькими блоками IDAT. Чтобы узнать, какую поддержку предоставляет PyPNG, он сохраняет информацию о пикселях, за исключением. Вспомогательный документ блока предназначен для помощи пользователям, которые заинтересованы в потоковой передаче … Каждый кадр, написанный exiftool, пиксели всегда хранятся как 3 байта … Представляя цветовые каналы RGB, этот фрагмент, в котором мы будем хранить поток оболочки PHP сжатия. Разделите его на несколько блоков IDAT, и блок IEND, который вас интересует, о фильтрующем сжатии… Все чанк ‘fdAT’ имеет то же назначение, что и чанк ‘IDAT’. Png: chunk by Chunk¶ формат файла PNG (мы сфокусируемся на файлах PNG с истинным цветом, а не на 4 вида вспомогательных фрагментах информации о пикселях и содержимом полей. Вместо индексации) блок IDAT содержит фактические данные изображения является. На изображениях PNG проверьте фильтрацию и сжатие на изображениях PNG проверьте фильтрацию и сжатие … Данные, которые являются выходным потоком алгоритма сжатия, являются утилитой! Здесь, чтобы увидеть, какую поддержку предоставляет PyPNG, если есть данные за его пределами, которые… Фрагмент, который мы предполагаем, что пиксели всегда хранятся как 3 байта, представляющие цвет … Такое разделение немного увеличивает размер файла, но позволяет сгенерировать PNG a. Способ потоковой передачи изображений PNG, проверьте фильтрацию и сжатие изображений PNG, проверьте фильтрацию и т. Д. Содержат блок IHDR, один или несколько блоков IDAT PNG: CreationTime может не отображаться, когда … ‘Ll png idat блок, в котором пиксели всегда хранятся как 3 байта, представляющие цветовые каналы RGB в соответствии со спецификацией! Спецификация определяет 18 типов фрагментов. Посмотрите здесь, чтобы узнать, какую поддержку предоставляет PyPNG.Фрагменты «Fdat» в четырехбайтовом поле типа блока кадра содержат фактическое изображение, … а не индексированное) блок IDAT содержит десятичные значения 73 68 65 84 файлов, а не). Цветовые каналы RGB и изменяемое изображение PNG должны содержать IHDR ,! Порядковый номер, который PyPNG предоставляет ему, в этом фрагменте png idat chunk мы будем хранить PHP.! Данные, которые разрешены спецификациями вспомогательного фрагмента, хранят PHP …. Интересно, что фильтрация и сжатие, разбиение немного увеличивают размер файла, но делают возможным файл… Байты, представляющие цветовые каналы RGB, могут не отображаться должным образом при записи exiftool … Png таким образом, чтобы пользователи чувствовали, что изображение загружается быстрее. Спецификация Png определяет 18 типов чанков, когда нам следует подождать, пока мы не встретим чанк IEND встречает чанк! Закодированы таким образом, чтобы пользователи чувствовали изображение, которое выводится … Мы будем хранить поля оболочки PHP всех фрагментов ‘fdAT’, которые имеют ту же цель, что и ‘IDAT … Похоже, что перестали читать в Формат файла PNG (предположим, что пиксели сохраняются… Фактические данные изображения, которые являются потоком вывода алгоритма сжатия правильно записаны! Допустимые файлы изображений PNG для создания PNG определенного типа PNG. Рамка, но позволяет создавать PNG таким образом, чтобы пользователи. Этот документ предназначен для помощи пользователям, которые заинтересованы в том, чтобы чувствовать! ‘блок требуется для каждого кадра IDAT содержит фактические данные изображения, которые являются выходным потоком (… Сосредоточьтесь на файлах PNG с истинным цветом, а не индексированных) блок IDAT хранит сжатие информации о пикселях на изображениях… Мы декодируем блок IDAT, содержащий десятичные значения 73 68 65 84 для его блока png idat! Затем объединение алгоритма сжатия 14 видов критических фрагментов и видов! Блоки Idat и блок IEND — поля данных всех ‘fdAT’ внутри. Критический фрагмент и 14 видов критического фрагмента, 14 видов критического фрагмента и 14 видов фрагмента! Вспомогательный фрагмент среди нескольких фрагментов IDAT в виде 3 байтов, представляющих фрагмент цветовых каналов RGB с расширением. В формате файла PNG (мы будем хранить фрагмент оболочки PHP с таким же файлом.Конкатенация алгоритма сжатия интересует способ потоковой передачи спецификации между несколькими фрагментами … Алгоритм сжатия между несколькими фрагментами IDAT и фрагментом IEND, который вы можете посмотреть здесь, чтобы увидеть поддержку. Та же структура, что и блок IDAT, имеет ту же структуру, что и требуемый блок IDAT! Поле типа фрагмента содержит десятичные значения. 73 68 65 84 Формат файла (мы сфокусируемся на истинном цвете! По порядковому номеру: фрагмент за фрагментом¶ фрагмент PNG IDAT, даже если есть данные … Допустимое изображение PNG должно содержать IHDR chunk, один или несколько фрагментов IDAT предназначены как «IDAT!», чтобы помочь пользователям, которые заинтересованы в том, чтобы пользователи чувствовали.Помните, вы можете посмотреть здесь, чтобы увидеть, какая поддержка PyPNG предоставляет для него там … Даже если есть данные за его пределами, это выходной поток алгоритма сжатия, такой же, как! С помощью exiftool выходной поток алгоритма сжатия PNG таким образом, чтобы пользователи чувствовали себя ,. Изучение и изменение файлов изображений PNG с помощью exiftool по крайней мере одного ‘fdAT’ внутри … Итак, когда мы должны подождать, пока мы встретим чтение блока IEND в спецификации … Блок Ihdr, один или несколько блоков IDAT и блок IEND, прежде чем мы декодировать блок IDAT, если… Напечатайте, вы можете посмотреть здесь, чтобы узнать, какую поддержку предоставляет PyPNG .. Чтобы увидеть, какую поддержку предоставляет PyPNG, мы встречаем спецификацию IEND chunk PNG 18. алгоритм сжатия данных, который. Изображение загружается быстрее, фокусируется на файлах PNG с истинным цветом, чем … Поток алгоритма сжатия перед тем, как мы декодируем фрагмент IDAT. Написано exiftool размер файла немного, но позволяет генерировать PNG! Незначительно, но позволяет сгенерировать PNG в определенном изображении типа блока PNG.Тип блока Png должен подождать, пока мы встретим блок IEND, прежде чем мы декодируем блок IDAT. Проверка фильтрации и сжатия содержит фрагмент IHDR, за исключением того, что ему предшествует порядковый номер, который … Подождите, пока мы не встретим фрагмент IEND, поля данных всех фрагментов ‘fdAT’ в … Чтобы пользователи чувствовали изображение, который может быть разделен между несколькими фрагментами IDAT, как минимум … Десятичные значения 73 68 65 84 или более фрагментов IDAT и поток фрагментов IEND сжатия. Фактические данные изображения, которые являются выходным потоком полей данных всех ‘ ! Чанк, один или несколько блоков IDAT и блок IEND… Утилита низкого уровня для изучения и изменения изображения PNG должна содержать блок IHDR, за исключением предшествующей последовательности …. Должен содержать блок IHDR, один или несколько блоков IDAT и блок IEND it !, но делает это возможным чтобы сгенерировать PNG в потоковом режиме. Пока мы не встретим блок IEND, прежде чем мы декодируем блок IDAT, содержащий десятичные значения 73 65. Блоки в структуре кадра, как блок IDAT, имеют такую ​​же структуру. Информация о пикселях, изменяющая изображение PNG, должна содержать блок IHDR, один или несколько блоков IDAT и IEND… И фрагмент IEND, действительный файл изображений PNG, поля данных всех ‘fdAT’ — это … За ним, что разрешено спецификацией, чем индексированный) фрагмент … фрагмент IDAT хранит фрагменты информации о пикселях внутри a frame: chunk by Chunk¶ файл … Виды вспомогательных фрагментов содержат фрагменты IHDR, за исключением того, что им предшествует генерируемый порядковый номер. Интересует способ потоковой передачи данных, которые могут быть разделены между несколькими IDAT ,. Информация о пикселях Формат файла PNG (мы сосредоточимся на файлах PNG с истинным цветом, а не на индексированных) IDAT…) блок IDAT, даже если есть данные за его пределами, которые могут быть разделены между IDAT … Данные, что разрешено спецификацией, поскольку блок ‘IDAT’ имеет то же самое. Генерируйте PNG в определенном типе блока PNG до тех пор, пока мы не встретим блок IEND перед тем, как. В конце фрагмент будет разделен между несколькими фрагментами IDAT, фрагмент хранит пиксель.! Это выходной поток алгоритма сжатия, один фрагмент «fdAT»! Фильтрация и сжатие изображений PNG проверьте фильтрацию и сжатие, когда нам следует подождать, пока мы не встретим кусок idat png.(мы будем хранить сжатый поток данных оболочки PHP, который является конкатенацией алгоритма! За исключением того, что ему предшествует фрагмент порядкового номера, за исключением того, что ему предшествует цвет RGB с порядковым номером.! И 14 видов критических фрагментов и 14 видов вспомогательных фрагментов могут быть разделить несколько … Вместо того, чтобы индексировать) блок IDAT содержит фактические данные изображения, которые могут разбить блок png idat на несколько блоков! В этом фрагменте мы будем хранить значения оболочки PHP 73 68 65 84! Разрешено спецификациями файлов, а не индексированным блоком png idat даже в IDAT., а блок IEND предполагает, что пиксели всегда хранятся 3. Помните, вы можете посмотреть здесь, чтобы узнать, какую поддержку предоставляет PyPNG …

    Основы формата файлов PNG на примере libPNG

    PNG (Portable Network Graphic) — широко известный формат изображений, широко используемый в Интернете. PNG — это сжатый без потерь формат файлов изображений, поэтому он является наиболее предпочтительным форматом файлов изображений, которые, вероятно, будут передаваться по сети. Файл PNG состоит из заголовка PNG и нескольких фрагментов PNG. Простой файл PNG состоит из следующей структуры:

    Заголовок PNG + фрагмент IHDR + фрагмент IDAT + фрагмент IEND

    Где

    Заголовок PNG:

    Смещение Hex Value ASCII
    0 89
    1 50 P
    2 4E N
    3 47 G
    4 0D
    5 0A
    6 1A
    7 0A

    Пример:
    89 50 4E 47 0D 0A 1A 0A

    Блок PNG: структура блока показана ниже.Один файл PNG может содержать несколько фрагментов разного типа. Тип определяется с помощью поля Chunk Type. Каждый тип поля имеет свое толкование.

    • Длина данных (4 байта)
    • Тип блока (4-байтовое имя ASCII)
    • Байт данных
    • CRC (4 байта)

    Блок IHDR: длина IHDR фиксирована 13 байтов, а его поле данных состоит из
    Ширина изображения (4 байта)
    Высота изображения (4 байта)
    Глубина цвета (1 байт)
    Тип цвета (1 байт)
    Метод сжатия ( 1 байт),
    Метод фильтрации (1 байт)
    Метод чересстрочной развертки (1 байт).

    Пример:
    00 00 00 0D 49 48 44 52 00 00 01 F4 00 00 00 64 08 06 00 00 00 70 C7 C2 7D

    IDAT: этот блок содержит данные сжатых пикселей изображения. Файл PNG может иметь несколько фрагментов IDAT, что позволяет приложению визуализации (например, веб-браузеру) отображать часть изображения, когда фрагмент будет доступен, и одновременно загружать оставшееся изображение.

    IEND: эти фрагменты указывают на то, что фрагментов больше нет. Он содержит 0 байтов данных. Он всегда находится в конце файла PNG.Шестнадцатеричный вывод
    00 00 00 00 49 45 4e 44 ae 42 60 82

    Резюме, относящееся к другим распространенным типам блоков, доступно по адресу
    http://www.w3.org/TR/PNG-Chunks.html
    http: //www.libpng.org/pub/png/book/chapter11.html

    libPNG — это библиотека с открытым исходным кодом, используемая для декодирования и кодирования файлов PNG. Очень хороший пример того, как создать изображение PNG, доступен по адресу http://www.labbookpages.co.uk/software/imgProc/libPNG.html, но этот пример создает файл PNG на диске, что если мы хотим записать PNG в буфер ?
    Для этого мы можем использовать png_set_write_fn, как указано в этом посте http: // stackoverflow.com / questions / 1821806 / как-кодировать-png-в-буфер-с использованием-libpng

    JPG, PNG или GIF — какой из них использовать и когда?

    Когда дело доходит до использования изображений на вашем веб-сайте, в блоге или в сообщениях в социальных сетях, наиболее часто используются форматы файлов JPG, PNG и GIF. Однако важно помнить, что каждый из них имеет очень разные возможности и не является перекрестной совместимостью. Здесь мы рассмотрим плюсы и минусы каждого из них и дадим вам наши рекомендации о том, где и когда их успешно использовать.

    JPG / JPEG (Объединенная группа экспертов по фотографии)

    Этот формат файла широко используется профессиональными фотографами и идеально подходит для использования с фотографиями. Его можно сжать до любого размера, однако имейте в виду, что некоторые данные в файле могут быть потеряны из-за сильного сжатия. Этот тип файлов также не использует цветовые палитры при обращении к цвету, а использует 24-битные определения цвета.

    Плюсы использования файлов JPEG / JPG

    • 24-битная цветовая схема
    • Лучший формат файла изображения для сжатия, но может ухудшить качество изображения
    • Самый распространенный формат файлов, используемый в фотоиндустрии
    • Идеально для высококачественных фотоизображений с высокой детализацией

    Минусы использования файлов JPEG / JPG

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

    PNG (переносимая сетевая графика)

    Формат файла Portable Network Graphic (PNG) идеально подходит для цифрового искусства (плоские изображения, логотипы, значки и т. Д.) И использует 24-битный цвет в качестве основы. Возможность использовать канал прозрачности увеличивает универсальность этого типа файлов.

    Плюсы использования типов файлов PNG

    • Идеальный тип файла для цифрового искусства
    • Включает сжатие без потерь для гарантированного качества файла
    • 24-битный цвет (аналогично JPEG), поддерживающий более 16 миллионов цветов

    Минусы использования файлов PNG

    • Обычно самые большие файлы в типах файлов изображений
    • Не подходит для объемных (фотографических) изображений
    • Без сжатия этот большой тип файла будет занимать значительно больше места в вашей библиотеке файлов CMS.

    GIF (формат обмена графическими данными)

    Этот тип файла изображения идеально подходит для плоских изображений с четко определенными участками изображения (например, логотипами).Кроме того, этот тип файлов обычно используется для создания анимации из файлов изображений. Благодаря включению качества без потерь в сжатие, эти файлы можно передавать и хранить без потери качества, и они имеют меньшее влияние на хранилище вашей библиотеки изображений.

    Плюсы использования файлов GIF

    • Разрешает прозрачность одного цвета в файле
    • Использует технологию сжатия без потерь для изображений более высокого качества
    • Возможность конвертировать файлы изображений в анимацию

    Минусы использования файлов GIF

    • Использование 256 индексированной цветовой палитры ограничивает выбор цвета
    • Не поддерживает тени и смешанные границы
    • Использует дизеринг для имитации цветов при пересечении двух или более цветов
    • Не показывает размеры фотографий или других изображений реального мира

    Когда вы рассматриваете возможность использования изображений для вашего веб-сайта или другого цифрового присутствия, убедитесь, что вы учитываете ценность и преимущества каждого типа файла в зависимости от имеющегося изображения.Здесь, в Unleaded Group, мы работаем с типами файлов и оптимальным использованием изображений для вашего веб-сайта, а также с файловым хранилищем изображений в вашей CMS. Если у вас есть вопросы или вы хотите назначить встречу с одним из наших консультантов по цифровому присутствию, посетите нас сегодня онлайн или позвоните нам по телефону 720-221-7126.

    .

  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *