⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2083.txt

📁 RFC 的详细文档!
💻 TXT
📖 第 1 页 / 共 5 页
字号:
         itself, the chunk type code, or the CRC.  Zero is a valid
         length.  Although encoders and decoders should treat the length
         as unsigned, its value must not exceed (2^31)-1 bytes.

      Chunk Type
         A 4-byte chunk type code.  For convenience in description and
         in examining PNG files, type codes are restricted to consist of
         uppercase and lowercase ASCII letters (A-Z and a-z, or 65-90
         and 97-122 decimal).  However, encoders and decoders must treat
         the codes as fixed binary values, not character strings.  For
         example, it would not be correct to represent the type code
         IDAT by the EBCDIC equivalents of those letters.  Additional
         naming conventions for chunk types are discussed in the next
         section.

      Chunk Data
         The data bytes appropriate to the chunk type, if any.  This
         field can be of zero length.







Boutell, et. al.             Informational                     [Page 11]

RFC 2083            PNG: Portable Network Graphics            March 1997


      CRC
         A 4-byte CRC (Cyclic Redundancy Check) calculated on the
         preceding bytes in the chunk, including the chunk type code and
         chunk data fields, but not including the length field. The CRC
         is always present, even for chunks containing no data.  See CRC
         algorithm (Section 3.4).

      The chunk data length can be any number of bytes up to the
      maximum; therefore, implementors cannot assume that chunks are
      aligned on any boundaries larger than bytes.

      Chunks can appear in any order, subject to the restrictions placed
      on each chunk type.  (One notable restriction is that IHDR must
      appear first and IEND must appear last; thus the IEND chunk serves
      as an end-of-file marker.)  Multiple chunks of the same type can
      appear, but only if specifically permitted for that type.

      See Rationale: Chunk layout (Section 12.12).

   3.3. Chunk naming conventions

      Chunk type codes are assigned so that a decoder can determine some
      properties of a chunk even when it does not recognize the type
      code.  These rules are intended to allow safe, flexible extension
      of the PNG format, by allowing a decoder to decide what to do when
      it encounters an unknown chunk.  The naming rules are not normally
      of interest when the decoder does recognize the chunk's type.

      Four bits of the type code, namely bit 5 (value 32) of each byte,
      are used to convey chunk properties.  This choice means that a
      human can read off the assigned properties according to whether
      each letter of the type code is uppercase (bit 5 is 0) or
      lowercase (bit 5 is 1).  However, decoders should test the
      properties of an unknown chunk by numerically testing the
      specified bits; testing whether a character is uppercase or
      lowercase is inefficient, and even incorrect if a locale-specific
      case definition is used.

      It is worth noting that the property bits are an inherent part of
      the chunk name, and hence are fixed for any chunk type.  Thus,
      TEXT and Text would be unrelated chunk type codes, not the same
      chunk with different properties.  Decoders must recognize type
      codes by a simple four-byte literal comparison; it is incorrect to
      perform case conversion on type codes.







Boutell, et. al.             Informational                     [Page 12]

RFC 2083            PNG: Portable Network Graphics            March 1997


      The semantics of the property bits are:

      Ancillary bit: bit 5 of first byte
         0 (uppercase) = critical, 1 (lowercase) = ancillary.

         Chunks that are not strictly necessary in order to meaningfully
         display the contents of the file are known as "ancillary"
         chunks.  A decoder encountering an unknown chunk in which the
         ancillary bit is 1 can safely ignore the chunk and proceed to
         display the image. The time chunk (tIME) is an example of an
         ancillary chunk.

         Chunks that are necessary for successful display of the file's
         contents are called "critical" chunks. A decoder encountering
         an unknown chunk in which the ancillary bit is 0 must indicate
         to the user that the image contains information it cannot
         safely interpret.  The image header chunk (IHDR) is an example
         of a critical chunk.

      Private bit: bit 5 of second byte
         0 (uppercase) = public, 1 (lowercase) = private.

         A public chunk is one that is part of the PNG specification or
         is registered in the list of PNG special-purpose public chunk
         types.  Applications can also define private (unregistered)
         chunks for their own purposes.  The names of private chunks
         must have a lowercase second letter, while public chunks will
         always be assigned names with uppercase second letters.  Note
         that decoders do not need to test the private-chunk property
         bit, since it has no functional significance; it is simply an
         administrative convenience to ensure that public and private
         chunk names will not conflict.  See Additional chunk types
         (Section 4.4) and Recommendations for Encoders: Use of private
         chunks (Section 9.8).

      Reserved bit: bit 5 of third byte
         Must be 0 (uppercase) in files conforming to this version of
         PNG.

         The significance of the case of the third letter of the chunk
         name is reserved for possible future expansion.  At the present
         time all chunk names must have uppercase third letters.
         (Decoders should not complain about a lowercase third letter,
         however, as some future version of the PNG specification could
         define a meaning for this bit.  It is sufficient to treat a
         chunk with a lowercase third letter in the same way as any
         other unknown chunk type.)




Boutell, et. al.             Informational                     [Page 13]

RFC 2083            PNG: Portable Network Graphics            March 1997


      Safe-to-copy bit: bit 5 of fourth byte
         0 (uppercase) = unsafe to copy, 1 (lowercase) = safe to copy.

         This property bit is not of interest to pure decoders, but it
         is needed by PNG editors (programs that modify PNG files).
         This bit defines the proper handling of unrecognized chunks in
         a file that is being modified.

         If a chunk's safe-to-copy bit is 1, the chunk may be copied to
         a modified PNG file whether or not the software recognizes the
         chunk type, and regardless of the extent of the file
         modifications.

         If a chunk's safe-to-copy bit is 0, it indicates that the chunk
         depends on the image data.  If the program has made any changes
         to critical chunks, including addition, modification, deletion,
         or reordering of critical chunks, then unrecognized unsafe
         chunks must not be copied to the output PNG file.  (Of course,
         if the program does recognize the chunk, it can choose to
         output an appropriately modified version.)

         A PNG editor is always allowed to copy all unrecognized chunks
         if it has only added, deleted, modified, or reordered ancillary
         chunks.  This implies that it is not permissible for ancillary
         chunks to depend on other ancillary chunks.

         PNG editors that do not recognize a critical chunk must report
         an error and refuse to process that PNG file at all. The
         safe/unsafe mechanism is intended for use with ancillary
         chunks.  The safe-to-copy bit will always be 0 for critical
         chunks.

         Rules for PNG editors are discussed further in Chunk Ordering
         Rules (Chapter 7).

      For example, the hypothetical chunk type name "bLOb" has the
      property bits:

         bLOb  <-- 32 bit chunk type code represented in text form
         ||||
         |||+- Safe-to-copy bit is 1 (lower case letter; bit 5 is 1)
         ||+-- Reserved bit is 0     (upper case letter; bit 5 is 0)
         |+--- Private bit is 0      (upper case letter; bit 5 is 0)
         +---- Ancillary bit is 1    (lower case letter; bit 5 is 1)

      Therefore, this name represents an ancillary, public, safe-to-copy
      chunk.




Boutell, et. al.             Informational                     [Page 14]

RFC 2083            PNG: Portable Network Graphics            March 1997


      See Rationale: Chunk naming conventions (Section 12.13).

   3.4. CRC algorithm

      Chunk CRCs are calculated using standard CRC methods with pre and
      post conditioning, as defined by ISO 3309 [ISO-3309] or ITU-T V.42
      [ITU-V42].  The CRC polynomial employed is

         x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1

      The 32-bit CRC register is initialized to all 1's, and then the
      data from each byte is processed from the least significant bit
      (1) to the most significant bit (128).  After all the data bytes
      are processed, the CRC register is inverted (its ones complement
      is taken).  This value is transmitted (stored in the file) MSB
      first.  For the purpose of separating into bytes and ordering, the
      least significant bit of the 32-bit CRC is defined to be the
      coefficient of the x^31 term.

      Practical calculation of the CRC always employs a precalculated
      table to greatly accelerate the computation. See Sample CRC Code
      (Chapter 15).

4. Chunk Specifications

   This chapter defines the standard types of PNG chunks.

   4.1. Critical chunks

      All implementations must understand and successfully render the
      standard critical chunks.  A valid PNG image must contain an IHDR
      chunk, one or more IDAT chunks, and an IEND chunk.

      4.1.1. IHDR Image header

         The IHDR chunk must appear FIRST.  It contains:

            Width:              4 bytes
            Height:             4 bytes
            Bit depth:          1 byte
            Color type:         1 byte
            Compression method: 1 byte
            Filter method:      1 byte
            Interlace method:   1 byte







Boutell, et. al.             Informational                     [Page 15]

RFC 2083            PNG: Portable Network Graphics            March 1997


         Width and height give the image dimensions in pixels.  They are
         4-byte integers. Zero is an invalid value. The maximum for each
         is (2^31)-1 in order to accommodate languages that have
         difficulty with unsigned 4-byte values.

         Bit depth is a single-byte integer giving the number of bits
         per sample or per palette index (not per pixel).  Valid values
         are 1, 2, 4, 8, and 16, although not all values are allowed for
         all color types.

         Color type is a single-byte integer that describes the
         interpretation of the image data.  Color type codes represent
         sums of the following values: 1 (palette used), 2 (color used),
         and 4 (alpha channel used). Valid values are 0, 2, 3, 4, and 6.

         Bit depth restrictions for each color type are imposed to
         simplify implementations and to prohibit combinations that do
         not compress well.  Decoders must support all legal
         combinations of bit depth and color type.  The allowed
         combinations are:

            Color    Allowed    Interpretation
            Type    Bit Depths

            0       1,2,4,8,16  Each pixel is a grayscale sample.

            2       8,16        Each pixel is an R,G,B triple.

            3       1,2,4,8     Each pixel is a palette index;
                                a PLTE chunk must appear.

            4       8,16        Each pixel is a grayscale sample,
                                followed by an alpha sample.

            6       8,16        Each pixel is an R,G,B triple,
                                followed by an alpha sample.

         The sample depth is the same as the bit depth except in the
         case of color type 3, in which the sample depth is always 8
         bits.

         Compression method is a single-byte integer that indicates the

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -