W3C home > Mailing lists > Public > www-svg@w3.org > August 2002

Suggestion for a new XML based pixel graphics format, called PPG (portable pixel graphics)

From: Haeusler Reinhard <reinhard.haeusler@siemens.com>
Date: Tue, 27 Aug 2002 08:36:42 +0200
Message-ID: <C10F60785AE7D211B6E00800060DA391022FEFCB@vieg128a.gud.siemens.at>
To: "'chris@w3.org'" <chris@w3.org>, "'www-svg@w3.org'" <www-svg@w3.org>
Sorry - my English is not perfect ...  ;-(

Hello Chris, hello W3 members,

I like the concept of the various XML based languages, especially the vector
graphics format SVG  ;-)
But for the pixel graphics there is currently no XML based format available
(only binary formats, like your PNG or the old GIF).

So I suggested a concept for such a pixel format, called PPG (portable pixel
graphics),  and I want that to be also an internet standard.
This, because in XHTML documents everyone could include parts with the
graphics data in textual form in the document -
and therefore in the future no one would need to insert references to binary
picture files in XHTML documents.
(Exceptions to this are the binary format JPEG for photos of a camera and
your PNG format for large compressed pixel data.)
Especially I would not need a tool and file for simple graphics elements,
like multi-colored points and so on.

The new format should be interoperable with the already defined standard SVG
- is a mixed use directly possible ?
(E.g. a SVG part which refers to - or already contains - a PPG part.) -
Please give me a hint to this topic - Thanks!

I want you to add this new format to your Web graphics concept, to have the
following list of XML graphic standards:
 -  XML-based:           SVG + PPG
 -  compressed-binary:   JPEG + PNG

The MIME type is currently not registered, but it could be like "image/ppg"
(or similar).

Please send me your suggestions or requests to the below described XML-based
pixel graphics format:
Possibly the name and short hand (or file name extension) is requested to be
an other one (?)
Also possibly the structure of the head (info) part and/or the body (data)
part is requested to be changed generally.
(E.g. instead of the pixel data storage as 'color layer' it could be done as
a direct pixel, similarly to the method used in the PNG format.)

The only things of my suggestion, which should not be changed, are the
manually (without a tool) writeable format and the XML base of it.
Also the support for simple transparency (not variable translucency) should
be a part of this format.
The new pixel graphics format should be the low end graphics format for
simplest usage on Web pages - e.g. for multi-colored points.

Here is now my suggestion and I am looking forward to get your response to
this concept.
-->  Many thanks in advance!

Best regards,  Reinhard Häusler
mailto:reinhard.haeusler@siemens.com

---

----------------------------------------------------
PPG  ...  Portable-Pixel-Graphics
----------------------------------------------------

Properties:
The format is XML-based - it should be defined via an DTD or an XML schema -
to be done  ;-)
It supports transparent graphics parts, like the old GIF format.

Picture data structure:
 -  Structure of a whole picture: Every so called 'color layer' of the whole
graphics is stored in one element, called layer.
    Every layer contains data in the structure:  outer for vertical sequence
- and inner for horizontal sequence.
 -  Horizontal picture layer structure: Every byte, as sequence of 8 bits
represents 8 pixels (horizontal side by side).
 -  Vertical picture layer structure: Every line (with horizontal structure)
follows side by side the other one.

Possible there is an better word instead of layer (could be also used for
the XML tag) ... :-)

General structure of the pixel graphics format:
 -  info part with a data type information (and possible with an to the XML
head part additional semantic version information)
 -  data part with a color palette (with 'transparent' information) and the
so called 'layer list' (with the pixel informations).

Details of the pixel graphics format:
The mandatory  type information contains a slash ('/') separated word of the
format "PPG/<x-pix>x<y-pix>/<bit-depth>",
which means a pixel graphics picture with horizontal <x-pix> pixels,
vertical <y-pix> pixels and color depth of <bit-depth> bits.
The optional version information holds a simple version string.
The mandatory color palette consists of the color definitions (using the
usual HTML 'rgb'-format in textual form - e.g. '#00FF00') and
the only one transparent definition for one of in this color palette defined
colors.
The mandatory layer list consists of a sequence of layer definitions (using
a similar hexadecimal textual form  - without the char '#').
Every layer definition consists of a sequence of logical lines, which
themselves consists of a sequence of bytes.

Simple example:
PPG definition for a small pixel graphic (16 x 16 pixels) with 4 colors.
Done in two syntax variants ... :-)
Remark: Currently there is only this example to 'define' the used XML tags -
DTD or XML schema definition for it is to be done!

    <?xml version="1.0" encoding="ISO8859-1" ?>
    <!-- Example_small.PPG -->
    <!-- ================= -->
    <!-- Simple Example of a PPG (portable pixel graphics) format file -->
    <!-- Reinhard Häusler  -->
    <!-- Date: 2002-08-26  -->
    <!-- ************* -->
    <!-- XML like head --> <!-- to be defined - reference to DTD or XML
schema -->
    <!-- ************* -->
    <ppg>
     <info><!-- info part (instead of head) -->
      <type>PPG/16x16/2</type><!-- this means: 16 (horizontal) x 16
(vertical) pixels and 2 bit color depth -->
      <version>0.0.1</version><!-- no valid version available now - only a
suggestion for working -->
     </info>
     <data><!-- data part (instead of body) -->
      <palette><!-- list of the color definitions and the one transparent
definition -->
       <!-- explanation for 'bit sequence': 'ab' means layer 0 is 'a' and
layer 1 is 'b' -->
       <color num="0">#000000</color><!-- 0 means the bit sequence '00'
--><!-- black -->
       <color num="1">#007700</color><!-- 1 means the bit sequence '01' -->
       <color num="2">#007700</color><!-- 2 means the bit sequence '10' -->
       <color num="3">#00FF00</color><!-- 3 means the bit sequence '11'
--><!-- green -->
       <transparent="0" /><!-- this means: color with num="0" is transparent
-->
                          <!-- (it could also be empty for no transparent
color) -->
      </palette>
      <layers><!-- list of layer definitions -->
       <layer num="0"><!-- list of pixel lines of layer 0 -->
        <b>0FF0</b><b>1FF8</b><b>1FF8</b><b>3FFC</b><!-- byte-sequences  1
to  4 (of layer 0) -->
        <b>3FFC</b><b>7FFE</b><b>7FFE</b><b>FFFF</b><!-- byte-sequences  5
to  8 (of layer 0) -->
        <b>FFFF</b><b>7FFE</b><b>7FFE</b><b>3FFC</b><!-- byte-sequences  9
to 12 (of layer 0) -->
        <b>3FFC</b><b>1FF8</b><b>1FF8</b><b>0FF0</b><!-- byte-sequences 13
to 16 (of layer 0) -->
       </layer>
       <layer num="1"><!-- list of pixel lines of layer 1 -->
        <b>0000</b><b>0000</b><b>0FF0</b><b>1FF8</b><!-- byte-sequences  1
to  4 (of layer 1) -->
        <b>1FF8</b><b>3FFC</b><b>3FFC</b><b>7FFE</b><!-- byte-sequences  5
to  8 (of layer 1) -->
        <b>7FFE</b><b>3FFC</b><b>3FFC</b><b>1FF8</b><!-- byte-sequences  9
to 12 (of layer 1) -->
        <b>1FF8</b><b>0FF0</b><b>0000</b><b>0000</b><!-- byte-sequences 13
to 16 (of layer 1) -->
       </layer>
      </layers>
     </data>
    </ppg>
    <!-- (C) Reinhard Häusler 2002 -->

A nearly shortest variant of this definition (if the concept above would
generate too much overhead) is shown below - but this is more difficult to
read ;-(

    <?xml version="1.0" encoding="ISO8859-1" ?>
    <!-- Example_min.PPG   -->
    <!-- ===============   -->
    <!-- Reinhard Häusler  -->
    <!-- Date: 2002-08-26  -->
    <ppg>
     <i><!-- info -->
      <t>PPG/16x16/2</t><!-- type -->
      <v>0.0.1</v><!-- version -->
     </i>
     <d><!-- data -->
      <cp><!-- color-palette -->
       <c n="0">#000000</c><!-- color 0 -->
       <c n="1">#007700</c><!-- color 1 -->
       <c n="2">#007700</c><!-- color 2 -->
       <c n="3">#00FF00</c><!-- color 3 -->
       <t="0" /><!-- transparent -->
      </cp>
      <ll><!-- layer-list -->
       <l n="0"><!-- layer 0 -->
        0FF0,1FF8,1FF8,3FFC,<!-- byte-sequences  1 to  4 (of layer 0) -->
        3FFC,7FFE,7FFE,FFFF,<!-- byte-sequences  5 to  8 (of layer 0) -->
        FFFF,7FFE,7FFE,3FFC,<!-- byte-sequences  9 to 12 (of layer 0) -->
        3FFC,1FF8,1FF8,0FF0 <!-- byte-sequences 13 to 16 (of layer 0) -->
       </l>
       <l n="1"><!-- layer 1 -->
        0000,0000,0FF0,1FF8,<!-- byte-sequences  1 to  4 (of layer 1) -->
        1FF8,3FFC,3FFC,7FFE,<!-- byte-sequences  5 to  8 (of layer 1) -->
        7FFE,3FFC,3FFC,1FF8,<!-- byte-sequences  9 to 12 (of layer 1) -->
        1FF8,0FF0,0000,0000 <!-- byte-sequences 13 to 16 (of layer 1) -->
       </l>
      </ll>
     </d>
    </ppg>

Many combinations of this two concept versions or even other implementations
are possible.
-->  Please make your suggestions to this syntax and/or semantics .... :-)


Reinhard Häusler (mailto:reinhard.haeusler@siemens.com) - 2002-08-26
Received on Tuesday, 27 August 2002 02:36:05 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 5 November 2012 23:52:51 GMT