This file is indexed.

/usr/share/doc/png-definitive-guide/html/chapter16.html is in png-definitive-guide 20060430-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>Other Libraries and Concluding Remarks (PNG: The Definitive Guide)</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

<!-- http://www.w3.org/TR/REC-CSS2/box.html -->
<STYLE TYPE="text/css">
  P { margin-bottom: 0em }
  UL {
    margin-bottom: 0em;
    margin-top: 0em;
    list-style: disc;
  }
  LI {
    padding: 0px 0px 0px 0px;
    margin: 0px 0px 0px 0px;
  }
</STYLE>

<LINK REV="made" HREF="http://pobox.com/~newt/greg_contact.html">
<!--  Copyright (c) 1999 O'Reilly and Associates.  -->
<!--  Copyright (c) 2002-2006 Greg Roelofs.  -->
</HEAD>

<body bgcolor="#ffffff" text="#000000">


<hr> <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

<a href="chapter15.html"><img width=24 height=13 border=0 align="left"
 src="images/prev.png" alt="&lt;-"></a>

<a href="biblio.html"><img width=24 height=13 border=0 align="right"
 src="images/next.png" alt="-&gt;"></a>

<div align="center">
  <a href="chapter15.html"><font size="-1" color="#000000"
   ><b>PREVIOUS</b></font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a
     href="toc.html"><font size="-1" color="#000000"
   ><b>CONTENTS</b></font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a
     href="biblio.html"><font size="-1" color="#000000"
   ><b>NEXT</b></font></a>
</div>

<hr> <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->


<h1 class="chapter">Chapter 16. Other Libraries and Concluding Remarks</h1>

<div class="htmltoc"><h4 class="tochead">Contents:</h4><p>
<a href="#png.ch16.div.1">16.1. Cross-Platform Libraries</a><br />
<a href="#png.ch16.div.2">16.2. Windows-Specific Libraries</a><br />
<a href="#png.ch16.div.3">16.3. Concluding Remarks</a><br />
</p></div>


<p>As I mentioned at the beginning of <a href="chapter13.html">Chapter 13, "Reading PNG Images"</a>, libpng is not the only
option for adding PNG support to an application.  There are numerous
other possibilities, particularly for the Windows platforms; a number
of these use libpng themselves.</p>


<div class="sect1"><a name="png.ch16.div.1" />
<h2 class="sect1">16.1. Cross-Platform Libraries</h2>


<p>
<a name="INDEX-1226" />		<!-- cross-platform PNG libraries -->
<a name="INDEX-1227" />		<!-- libraries for PNG images" "cross-platform libraries -->
In the next two sections, I list roughly two dozen PNG-supporting
libraries and toolkits, with particular emphasis on those with the
greatest cross-platform support or support for some of the less common
platforms.  For an up-to-date list of PNG toolkits and related code,
please check the Toolkits web page and the Source Code and Libraries
page at the PNG home site:</p>

<blockquote><pre class="code"><a href="http://www.libpng.org/pub/png/pngaptk.html">http://www.libpng.org/pub/png/pngaptk.html</a>
<a href="http://www.libpng.org/pub/png/pngcode.html">http://www.libpng.org/pub/png/pngcode.html</a></pre></blockquote>

<p>Note that I have not personally tested any of the libraries or toolkits
listed here.</p>


<dl>
<dt><b><em class="emphasis">ImageMagick</em></b></dt><dd><p>
<a name="INDEX-1228" />		<!-- ImageMagick toolkit -->
John Cristy's ImageMagick is a C library that provides a uniform
interface to a few dozen image formats. It not only includes a
standard C API but also has Perl and Python interfaces. It also
provides several powerful utilities, including an X-based viewer
called <em class="emphasis">display</em>, for which it is probably better
known. ImageMagick is freely available in source and binary formats
for Unix, VMS, Macintosh, and 32-bit Windows platforms, albeit without
the <em class="emphasis">display</em> and <em class="emphasis">animate</em> tools on the Mac. (An X server is
required for those two programs on the other platforms.) It uses
<?x-need 10?>libpng and zlib for PNG support and may be modified and distributed
freely as long as its copyright is acknowledged.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.wizards.dupont.com/cristy/ImageMagick.html">http://www.wizards.dupont.com/cristy/ImageMagick.html</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Image Library</em></b></dt><dd><p>
<a name="INDEX-1229" />		<!-- Image Library (Colosseum Builders) -->
<a name="INDEX-1230" />		<!-- Colosseum Builders' Image Library -->
Colosseum Builders' Image Library is a C++ library that supports
reading and writing PNGs, JPEGs, and several other image formats. The
distribution includes demo apps for encoding, decoding, and viewing
images, the accompanying documentation indicates that the library
is an alpha release. Also, much of the code is described at
length in <em class="emphasis">The Programmer's Guide to Compressed Image Files</em>, by
John Miano, Image Library's principal
<a name="INDEX-1231" />		<!-- Microsoft" "Visual C++ -->
author. Borland C++ Builder and Microsoft Visual C++ are explicitly
mentioned on the web page, which also claims that the library is
written in standard C++, implying that it should work with most
compilers. Full source code is freely available, including an
independent implementation of the deflate and inflate algorithms,
i.e., the core routines of zlib. Image Library may be used without fee
in software that is likewise free and distributed with source;
otherwise, licensing fees apply. The latest release as of this writing
was on 22&nbsp;July 1998; this version incorrectly rejects PNG images with
a zlib window size other than 32 KB.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.colosseumbuilders.com/sourcecode.htm">http://www.colosseumbuilders.com/sourcecode.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">PaintLib</em></b></dt><dd><p>
<a name="INDEX-1232" />		<!-- PaintLib library -->
Ulrich von Zadow's PaintLib is a C++ class library for decoding and
manipulating several image formats, including PNG; version 2.0 adds an
ActiveX control to the Win32 port. Like several of the available
imaging 
<?hypen-place ?>toolkits, PaintLib actually uses libpng and zlib for its PNG
support and provides a higher-level, unified interface to its
supported formats. Source code is available, and it compiles under at
least DOS, Unix, and both 16-bit and 32-bit Windows. The library may
be freely used and distributed as long as its use is acknowledged.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://user.cs.tu-berlin.de/~uzadow/paintlib/">http://user.cs.tu-berlin.de/~uzadow/paintlib/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">QHTM</em></b></dt><dd><p>
<a name="INDEX-1233" />		<!-- QHTM library -->
QHTM is a 32-bit Windows control from Russell Freeman and Gipsysoft that lies
somewhere between an image toolkit and an HTML browser. Specifically, it
provides a programming interface that allows one to add HTML support, including
PNG images, to an application. (PNG is actually supported via code from
PaintLib.) QHTM 1.0 does not yet handle transparency, but support for
that is planned. Like PaintLib, QHTM may be freely used and distributed as
long as its use is acknowledged.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.gipsysoft.com/qhtm/features.html">http://www.gipsysoft.com/qhtm/features.html</a></pre></blockquote><dl>
<dt><b><em class="emphasis">ImageVision Library</em></b></dt><dd><p>
<a name="INDEX-1234" />		<!-- ImageVision Library -->
SGI's ImageVision Library is ``a toolkit for creating, processing and
displaying images on all Silicon Graphics workstations,'' to quote from
the web page. It actually does not read or write image files itself; all
file I/O is handled by SGI's Image Format Library, which is also available
for 32-bit Windows (Microsoft Visual C++ 5.0 only). According to the IRIX
6.5 documentation, IFL is still based on libpng 0.88 and zlib 1.0, but the
Windows version may be more up-to-date. IRIX users compiling applications
for use with current versions of libpng and zlib should take care that they
don't accidentally load the older IFL code.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.sgi.com/Technology/ImageVision/">http://www.sgi.com/Technology/ImageVision/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Imlib</em></b></dt><dd><p>
<a name="INDEX-1235" />		<!-- Imlib library -->
Imlib is another high-level, multiformat image library, currently
under development by Red Hat Advanced Development (RHAD) Labs. Though
developed under and mainly supported for Linux, it is written as
portable Unix/X code, and source code is available for compiling on
other platforms. Imlib supports programs based on both plain Xlib and
on the GIMP Toolkit (GTK+). Unlike the X front ends for the demo
programs presented in <a href="chapter13.html">Chapter 13, "Reading PNG Images"</a> and <a href="chapter14.html">Chapter 14, "Reading PNG Images Progressively"</a>, Imlib has the great
advantage of supporting most X displays, including monochrome,
pseudocolor (all bit depths from 2 through 8), static color, and
truecolor. On the other hand, it treats all images as 24-bit RGB,
optionally with a single color marked as transparent. As of this
writing, the current release is version 1.9.4, which includes a
placeholder pointer for future 8-bit alpha-channel support but no
indication of what level of support may eventually show up. The
authors indicated in early March 1999 that alpha support was a low
priority.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.labs.redhat.com/imlib/">http://www.labs.redhat.com/imlib/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">QuickTime</em></b></dt><dd><p>
<a name="INDEX-1236" />		<!-- QuickTime library -->
Apple's QuickTime is a high-level, multiformat image (and multimedia) library
for Mac OS System 7.0 and later and for 32-bit Windows. Version 3.0, which
natively supports reading PNG images, is included as a standard part of
Mac OS 8.5, making Mac OS the first operating system for which PNG support
is built in.<a href="#FOOTNOTE-106">[106]</a>
PNG is also supported unofficially in QuickTime 2.5 via a read-only PNG
importer written by Sam Bushell. A future QuickTime release is expected to
support writing PNG images.</p><blockquote class="footnote">


<a name="FOOTNOTE-106" /><p>[106] A developer's release of Apple's next-generation Rhapsody OS also had PNG
support, but it has not yet been released as a shipping product.</p>


</blockquote></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.apple.com/quicktime/">http://www.apple.com/quicktime/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">ImageGear</em></b></dt><dd><p>
<a name="INDEX-1237" />		<!-- ImageGear library -->
Accusoft's ImageGear is a commercial imaging library that supports several
dozen formats, including PNG. It is available for Unix, OS/2, Macintosh,
16-bit and 32-bit Windows (including a Visual Basic interface), and Java
(both as Java classes and as Beans). The web page strongly implies that
full alpha transparency is supported, too.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.accusoft.com/Digital_Imaging/ImageGear/IG98_Fr.htm">http://www.accusoft.com/Digital_Imaging/ImageGear/IG98_Fr.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Java Advanced Imaging API</em></b></dt><dd><p>
<a name="INDEX-1238" />		<!-- Java Advanced Imaging API -->
In November 1998 Sun's Javasoft subsidiary finally added native PNG support
to Java. As of the beta release in April 1999, the Java Advanced Imaging API
included both read and write support for PNG. The
Advanced Imaging API requires the Java 2 SDK (formerly known as JDK 1.2) or later
and will presumably be available under the same terms as Java itself.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.javasoft.com/products/java-media/jai/">http://www.javasoft.com/products/java-media/jai/</a>
<a href="http://www.javasoft.com/products/java-media/jai/forDevelopers/jai-apidocs/">http://www.javasoft.com/products/java-media/jai/forDevelopers/jai-apidocs/</a>
<a href="http://www.javasoft.com/products/java-media/jai/forDevelopers/jai-guide/">http://www.javasoft.com/products/java-media/jai/forDevelopers/jai-guide/</a>
</pre></blockquote><dl>
<dt><b><em class="emphasis">Sixlegs PNG</em></b></dt><dd><p>
<a name="INDEX-1239" />		<!-- Sixlegs PNG library -->
Six-Legged Software's Java package reads and displays PNG images as a
Java ImageProducer. It supports full alpha transparency, gamma
correction, progressive display, and conversion to grayscale, plus
quite a few ancillary chunk types. Write support is expected in a
separate, yet-to-be-released package. The current read-only release,
as of early April 1999, is version 1.0a and requires JDK 1.1 or later
(for zlib). Chris Nokleberg released version 1.0a under the GNU
LGPL--formerly the Library General Public License, recently renamed
the Lesser General Public License since it allows linking to
proprietary code. Full source code is included.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.sixlegs.com/png/">http://www.sixlegs.com/png/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Java Image Content Handlers</em></b></dt><dd><p>
<a name="INDEX-1240" />		<!-- Java Image Content Handlers library -->
The Java Image Content Handlers were originally developed by Justin
Couch for his employer, ADI Limited, but the code was subsequently
released as free software and is now distributed by Justin's own
company, The Virtual Light Company. Several other image formats are
supported in addition to PNG, including JPEG, TIFF, NetPBM, BMP, TGA,
and GIF. The current release, version 0.9.1, is read-only, but write
support is coming. The handlers are written for Java 2 (JDK 1.2) but
will work with JDK 1.1 with only minor changes. Full source code is
included; as with Sixlegs PNG, the license is the GNU LGPL.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.vlc.com.au/imageloader/">http://www.vlc.com.au/imageloader/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Java PNG</em></b></dt><dd><p>
<a name="INDEX-1241" />		<!-- Java PNG library -->
VisualTek's Java PNG library is, as the name suggests, a library for
use in Java programs with support for reading and writing PNG images.
Its license is somewhat less than clear, however; the web page claims
it is distributed under the GNU General Public License, but no source
code is available, and another web page refers to a 30-day evaluation
period. Apparently it may be freely used in GPL'd programs but must
be licensed commercially in other programs.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.visualtek.com/PNG/">http://www.visualtek.com/PNG/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">JIMI</em></b></dt><dd><p>
<a name="INDEX-1242" />		<!-- JIMI library -->
Activated Intelligence's image toolkit supports a number of image
formats, either ``natively'' or via Java's ImageProducer/ImageConsumer
model, with both read and write support for PNG. The web site claims
it is quite fast and can handle extremely large images (100 MB or
more), subject only to available disk space. The package, currently
version 2.0, is commercial, but the Standard edition is royalty-free;
i.e., it requires no payment beyond the initial purchase.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.activated.com/products/jimi/jimi.html">http://www.activated.com/products/jimi/jimi.html</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Java Vector Graphics (JVG)</em></b></dt><dd><p>
<a name="INDEX-1243" />		<!-- Java Vector Graphics library -->
<a name="INDEX-1244" />		<!-- JVG library -->
Faidon Oy-Ab's Java Vector Graphics package supports reading and writing PNG
images, as well as a few other formats. The current release, version 1.0,
is shareware, but the older 1.0 beta 1 (with read-only PNG support) is free.
A company representative promised in November 1998 that at least the PNG
portion of JVG 1.0 ``will be freeware soon,'' mainly due to the fact that
Sun is including PNG support in the Java Advanced Imaging API.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://web.avo.fr/faidon/JVG.htm">http://web.avo.fr/faidon/JVG.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Pnglets</em></b></dt><dd><p>
<a name="INDEX-1245" />		<!-- JavaScript" "Pnglets -->
<a name="INDEX-1246" />		<!-- Pnglets -->
Pnglets was a late addition; created by Roger E. Critchlow, Jr., and
first released in April 1999, it is written entirely in JavaScript and
is capable of creating palette-based PNG images on the fly. Thus it
can be included on web pages, allowing the client browser (rather than
the web server) to render PNG bitmaps dynamically. The author
considered the initial release to be ``pre-alpha,'' but it already
appeared to be relatively feature-complete; the main problems noted on
<a name="INDEX-1247" />		<!-- Microsoft" "Internet Explorer -->
<a name="INDEX-1248" />		<!-- IE (Internet Explorer) -->
<a name="INDEX-1249" />		<!-- Internet Explorer (Microsoft) -->
the web page included a JavaScript incompatibility with Microsoft's
Internet Explorer and the lack of PNG transparency support in current
releases of Netscape Navigator. Pnglets is available under the GNU
General Public License (GPL), which is more restrictive than the GNU
LGPL. The initial version did not appear to include any special
wording about how the license might affect user-written JavaScript
embedded in a web page that uses Pnglets, but that will probably be
clarified in a subsequent release. 
<?x-need 10?>(The Pnglets code itself lives in a separate file, <em class="emphasis">Pnglet.js</em>,
and is ``linked in'' via the HTML <b class="emphasis-bold">SCRIPT</b> tag.)</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.elf.org/pnglets/">http://www.elf.org/pnglets/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Img</em></b></dt><dd><p>
<a name="INDEX-1250" />		<!-- Img library -->
Jan Nijtmans's Img is a free image-processing extension to the Tcl/Tk
scripting language; it uses libpng and zlib for its PNG support. It works
with Tcl 7.5 and Tk 4.1 and later versions<a href="#FOOTNOTE-107">[107]</a>
on both Unix/X and 32-bit Windows platforms. Both reading and writing are supported
in versions 1.1.4 and 1.2b2, but a patch to Tk is required in order to
write PNG images with an alpha channel. Version 1.2 is expected to be
released just after the Tcl/Tk 8.1 release, currently scheduled for
early May, 1999. Unfortunately, Scriptics was unwilling to incorporate
Jan's Tk patch into the official 8.1 release (Tk 8.1 is thread-safe,
but the patch is not), so manual patching will remain necessary for
some time to come in order to write alpha PNGs.</p><blockquote class="footnote">


<a name="FOOTNOTE-107" /><p>[107] As of version 8.0, Tcl and Tk share the same version number.</p>


</blockquote></dd>

</dl>


<blockquote><pre class="code"><a href="http://home.wxs.nl/~nijtmans/img.html">http://home.wxs.nl/~nijtmans/img.html</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Python Imaging Library</em></b></dt><dd><p>
<a name="INDEX-1251" />		<!-- Python Imaging Library -->
As its name suggests, Fredrik Lundh's Python Imaging Library (PIL)
provides support for multiple image formats under the Python
interpreted programming language on Unix or 32-bit Windows
platforms. It can also support Tcl/Tk via the Tkinter package. Though
currently still at a suspiciously low beta version (0.3b2), PIL
supports both reading and writing PNG images, apparently including
alpha channels and some 16-bit-per-sample images (possibly grayscale
only).  It also includes some support for MNG streams, though this has
not been not updated since roughly draft 33. PIL may be freely used
and distributed as long as such use is acknowledged.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.python.org/sigs/image-sig/Imaging.html">http://www.python.org/sigs/image-sig/Imaging.html</a></pre></blockquote><dl>
<dt><b><em class="emphasis">PNGHandler</em></b></dt><dd><p>
<a name="INDEX-1252" />		<!-- PNGHandler -->
Simon Clarke's PNGHandler provides read/write PNG support to the BeOS
Translation Kit. It is freely available for both PowerPC and Intel platforms,
and it requires BeOS version R3 or later. PNGHandler can read all PNG bit
depths with the possible exception of 16-bit-per-sample images (e.g., 48-bit
RGB), and it appears to have full alpha support. For writing, it supports
only depths of 8, 24, and 32 bits. It appeared that PNGHandler may have been
renamed to PNGTranslator as of version 1.20, but version 1.21 is once again
called 
<?hypen-place ?>PNGHandler. Nevertheless, 
<?x-need 10?>if the following link should break, check the PNG home site's Toolkits
page, given at the beginning of this section, for updates.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.be.com/beware/Datatypes/PNGHandler.html">http://www.be.com/beware/Datatypes/PNGHandler.html</a></pre></blockquote><dl>
<dt><b><em class="emphasis">SuperView Library</em></b></dt><dd><p>
<a name="INDEX-1253" />		<!-- SuperView Library -->
Andreas Kleinert's SuperView Library, part of his SViewII image application,
provides read and write support for numerous image formats on the Amiga, in
addition to a host of image-manipulation functions. It is not clear from
the documentation whether it supports any of the more advanced PNG
features such as gamma correction or even transparency. SViewII and the
SuperView Library are shareware.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://home.t-online.de/home/Andreas_Kleinert/sview.htm">http://home.t-online.de/home/Andreas_Kleinert/sview.htm</a></pre></blockquote>














<!-- .XE "cross-platform PNG libraries" -->
<!-- .XE "libraries for PNG images" "cross-platform libraries" -->



</div>
<div class="sect1"><a name="png.ch16.div.2" />
<h2 class="sect1">16.2. Windows-Specific Libraries</h2>


<p>
<a name="INDEX-1254" />		<!-- Windows platforms" "PNG libraries -->
<a name="INDEX-1255" />		<!-- libraries for PNG images" "Windows-specific libraries -->
</p>


<dl>
<dt><b><em class="emphasis">ImageLib</em></b></dt><dd><p>
<a name="INDEX-1256" />		<!-- ImageLib library -->
Version 4.0, Skyline Tools. This is a 32-bit Windows DLL with Delphi support;
version 2.5 also supported 16-bit Windows. It claims ``support for most PNG
formats'' and ``image conversion,'' which implies that it has read/write
support for PNGs.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.imagelib.com/">http://www.imagelib.com/</a></pre></blockquote><dl>
<dt><b><em class="emphasis">ImageMan ActiveX Suite</em> and <em class="emphasis">ImageMan DLL Suite</em></b></dt><dd><p>
<a name="INDEX-1257" />		<!-- ImageMan ActiveX Suite -->
<a name="INDEX-1258" />		<!-- ImageMan DLL Suite -->
Version 6.02, Data Techniques. These are suites of ActiveX controls, Visual
Basic controls, and DLLs for image manipulation and conversion. They support
both 16- and 32-bit Windows and include read/write support for PNGs.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.data-tech.com/imocx/imageman_activex_suite.htm">http://www.data-tech.com/imocx/imageman_activex_suite.htm</a>
<a href="http://www.data-tech.com/imageman_dll_suite.htm">http://www.data-tech.com/imageman_dll_suite.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">ImgDLL</em></b></dt><dd><p>
<a name="INDEX-1259" />		<!-- ImgDLL library -->
Version 4.3, Smaller Animals Software. This is a 32-bit Windows DLL with
read/write support for PNGs; it claims to support alpha transparency and
gamma correction as well. It can be used with Visual C++, Visual Basic, and so on.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.smalleranimals.com/imgdll.htm">http://www.smalleranimals.com/imgdll.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">LEADTOOLS</em></b></dt><dd><p>
<a name="INDEX-1260" />		<!-- LEADTOOLS library -->
LEAD Technologies. This is a suite of toolkits with image support,
including partial read/write support for PNGs. According to the
features page, 2-bit PNG images and images with 16 bits per sample are
not supported for either reading or writing, and interlacing and alpha
transparency are supported only for reading. LEADTOOLS once supported
the
<?x-need 10?>DOS and OS/2 platforms in addition to 16- and 32-bit Windows, but now
only Windows appears to be supported.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.leadtools.com/products.htm">http://www.leadtools.com/products.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">PiXCL Tools</em></b></dt><dd><p>
<a name="INDEX-1261" />		<!-- PiXCL Tools library -->
Version 4.22, VYSOR Integration. This is an ``interpreted
image-processing and graphics language toolkit'' for creating
multimedia presentations, demos, and imaging applications, especially
for satellite data. It is available for 32-bit Windows, and it
includes both standalone tools and a DLL for user programs.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.vysor.com/p40tools.htm">http://www.vysor.com/p40tools.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">PixelGraphicLibrary</em></b></dt><dd><p>
<a name="INDEX-1262" />		<!-- PixelGraphicLibrary library -->
Version 1.0 beta 5, Peter Beyersdorf. This is an image-manipulation library
for either Delphi 2 or 3 under 32-bit Windows, with read/write support for
PNGs. It includes a simple demo viewer.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.beyersdorf.com/pgraphe.html">http://www.beyersdorf.com/pgraphe.html</a></pre></blockquote><dl>
<dt><b><em class="emphasis">TwistedPixel</em></b></dt><dd><p>
<a name="INDEX-1263" />		<!-- TwistedPixel library -->
Bananas Software. This is an ActiveX control (OCX) for 32-bit Windows. It
includes read/write support for PNGs and a number of other image formats, and
it can be used with Visual C++, Visual Basic, Delphi, in web browsers, and so on.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://home.earthlink.net/~bananasoft/twisted.htm">http://home.earthlink.net/~bananasoft/twisted.htm</a></pre></blockquote><dl>
<dt><b><em class="emphasis">Victor Image Processing Library</em></b></dt><dd><p>
<a name="INDEX-1264" />		<!-- Victor Image Processing Library -->
Version 5.0, Catenary Systems. This is a DLL for 16-bit and 32-bit Windows;
it includes read/write support for PNGs and a number of other image formats,
though PNG is only supported in the 16-bit Windows version with a separate
add-on (freely downloadable). Apparently, only the 32-bit Windows version is
still under active development--the last Windows 3.x release was version 4.25.
There is also a version 3.7 for DOS, but it has no PNG support, and the PNG
add-on does not apply to it.</p></dd>

</dl>


<blockquote><pre class="code"><a href="http://www.catenary.com/victor/">http://www.catenary.com/victor/</a>
<a href="http://www.catenary.com/victor/download/vicpng.html">http://www.catenary.com/victor/download/vicpng.html</a></pre></blockquote>


<!-- .XE "Windows platforms" "PNG libraries" -->
<!-- .XE "libraries for PNG images" "Windows-specific libraries" -->


</div>
<div class="sect1"><a name="png.ch16.div.3" />
<h2 class="sect1">16.3. Concluding Remarks</h2>


<p>
<a name="INDEX-1265" />		<!-- PNG image format" "basics of -->
<a name="INDEX-1266" />		<!-- tips" "for programmers::programmers -->
The Portable Network Graphics format represents one more step in the evolution
of portable, robust image formats. With good, ubiquitous support just around
the corner in web browsers, and with support in image viewing and editing
applications not only common but actually expected by customers, PNG's future
is bright.</p>


<p>
Of course, in the four years since PNG was created, we've learned a few lessons
about what works and what doesn't. In the spirit of various publications'
``post-game analyses'' or ``postmortems,'' here is a quick look at some of
the things we did right and some we did wrong, in no particular order.</p>


<dl>
<dt><b><em class="emphasis">Alpha transparency</em></b></dt><dd><p>
<a name="INDEX-1267" />		<!-- alpha channels -->
<a name="INDEX-1268" />		<!-- transparency -->
Content developers are justifiably excited about the possibility of
using variable transparency, including real anti-aliasing. The fact
that PNG can do 8-bit (or smaller) RGBA-palettes is currently underappreciated
and decidedly underimplemented, but it will come to be seen as one of PNG's
greatest strengths in the next year or two.</p></dd>



<dt><b><em class="emphasis">Gamma and color correction</em></b></dt><dd><p>
<a name="INDEX-1269" />		<!-- gamma correction -->
<a name="INDEX-1270" />		<!-- color correction -->
Despite rather spotty support in applications to date, gamma and color
correction are features designers have been begging for, though not always by
name. They will eventually come to be expected, but support in more browsers
and image editors (<em class="emphasis">correct</em> support!) is necessary before users will
begin to notice the difference. And while operating-system support for gamma
and color correction isn't absolutely necessary, having it--as in recent
releases of Unix/X and Mac OS and rumored future versions of Windows--makes
the lives of application developers much easier.</p></dd>



<dt><b><em class="emphasis">Animation</em></b></dt><dd><p>
<a name="INDEX-1271" />		<!-- animation -->
The lack of a PNG-related animation format early on, and the subsequent delay in
finishing and implementing a viable one, was perhaps PNG's greatest
failing--certainly it is one of the most oft-heard criticisms. While there
was no way the PNG Development Group could have known about Netscape's
GIF-animation surprise late in 1995, in retrospect, it is obvious that the
group should have begun development on a PNG-like alternative right away.</p>


<p>Allowing the early MPNG project to be swayed too far in the
direction of a heavyweight multimedia format was also a mistake; the
best course would have been to come up with something just a little
better than animated GIF, with the option of extending it later to
become more in line with today's MNG. A ``thin'' PNG animation spec,
similar to the capability provided today by ImageMagick, could have
been implemented easily by mid-1996 or even the end of 1995.
(Starting small and working up is always easier!) Fortunately, recent
drafts of the MNG specification have added the concept of ``simplicity
profiles,'' so developers finally have the option of supporting a
subset of the full PNG/MNG animation spec in a well-defined
manner. Versions since 0.93 have
actually extracted low complexity and very low complexity subsets into
separate documents--MNG-LC and MNG-VLC, respectively--so
``starting small and working up'' is now not only possible but also
actively encouraged.</p>
</dd>

</dl>


<dl>
<dt><b><em class="emphasis">Open Source-style development</em></b></dt><dd><p>
<a name="INDEX-1272" />		<!-- Open Source-style development -->
It is difficult to zero in on one feature that counts as PNG's greatest success,
but arguably the open, Internet-based development process was (and is) it.
Even four years later, creating a robust, portable, extensible, well-specified
image format from scratch in <em class="emphasis">two months</em> is nothing short of amazing.<a href="#FOOTNOTE-108">[108]</a>
The continued infusion of new blood and new ideas has been invaluable.
New code is good, too.</p><blockquote class="footnote">


<a name="FOOTNOTE-108" /><p>[108] Or perhaps we are just now learning what university professors and Linux
enthusiasts have always known: graduate-student-powered development is the
way to go. Certainly the author of this book didn't get a whole lot done
during the first two months of 1995, when PNG was being designed. (Actually,
only about a quarter of the most active members of the PNG Development Group
were students at the time, but the remainder achieved honorary
grad-studenthood.)
</p>


</blockquote></dd>



<dt><b><em class="emphasis">Free reference code</em></b></dt><dd><p>
<a name="INDEX-1273" />		<!-- free reference code -->
When trying to promote the acceptance of a new format in existing applications,
nothing succeeds so well as doing some of the developers' work! The
availability of free and robust reference libraries (libpng and
zlib), with minimal restrictions on reuse and redistribution, was clearly
vital to PNG's success.</p></dd>



<dt><b><em class="emphasis">Decoupled compression engine</em></b></dt><dd><p>
<a name="INDEX-1274" />		<!-- compression" "decoupled compression engine -->
<a name="INDEX-1275" />		<!-- decoupled compression engine -->
Separating the file format, as symbolized by libpng, from the compression
engine, symbolized by zlib, probably made the format more palatable to
programmers. If, for some reason, one were averse to using both libraries
(perhaps due to code size), one could choose to implement only the PNG
half--which is not nearly so intimidating as rewriting both the PNG library
<a name="INDEX-1275.01-new" />	<!-- gzip -->
<a name="INDEX-1275.02-new" />	<!-- Info-ZIP -->
and the deflate algorithm. The fact that zlib's core compression code was
already a trusted and familiar component of gzip and the Info-ZIP tools
may have helped, too.</p></dd>



<dt><b><em class="emphasis">Slow browser support</em></b></dt><dd><p>
<a name="INDEX-1276" />		<!-- web browsers -->
<a name="INDEX-1277" />		<!-- browsers -->
<a name="INDEX-1278" />		<!-- WWW browsers -->
The failure to get good PNG support into the Big Two browsers even four years
after PNG's release--and the lack of any support for two-and-a-half
years--must count as a strike against the PNG Group, even if it's still not
apparent what could have been done differently. At the time, Netscape and
Microsoft were in the midst of the so-called Browser War, and one more image
format, even one that boasted alpha and gamma support, just wasn't flashy
enough to show up on their proverbial radar screens. Personal contacts might
have helped, but both companies were large enough that finding the right
contact was close to impossible.</p>

<p>Nevertheless, that's (mostly) water under the bridge. As I noted way back
in <a href="chapter01.html">Chapter 1, "An Introduction to PNG"</a>, the 4.0 releases of both browsers
have supported PNG files natively since late 1997, and the 5.0 releases are
expected to fully support 
<?x-need 10?>both alpha transparency and gamma correction.  Once that happens, web
designers can be expected to begin using (and demanding!)  PNGs with
alpha and gamma support on web pages within a year or so.</p></dd>



<dt><b><em class="emphasis">Standardization</em></b></dt><dd><p>
<a name="INDEX-1279" />		<!-- standardization of PNG format -->
Pushing PNG as a standard (Recommendation) of the World Wide Web Consortium
was probably key to getting PNG support into the Big Two by the end of 1997.
And PNG's inclusion in the VRML97 ISO specification led to its status today
as an ISO standards-track format, which is likely both to help speed its
acceptance in areas outside the Web (such as medical imaging, perhaps) and
to ensure its longevity as a common and useful image format.</p></dd>



<dt><b><em class="emphasis">Specification</em></b></dt><dd><p>
<a name="INDEX-1280" />		<!-- specifications for PNG images -->
As most implementors know, there are specifications, and then there are
<em class="emphasis">specifications</em>. PNG's spec has been praised by a number of third parties
as being one of the cleanest, most thorough, and least ambiguous image
specifications ever written. Partly, this was due to the work of some very
good editors, but it owes a lot to the Open Source process, too (the ``many
eyeballs'' effect).</p></dd>



<dt><b><em class="emphasis">Extensibility</em></b></dt><dd><p>
<a name="INDEX-1281" />		<!-- extensibility of PNG format -->
PNG's well-defined method for adding new features in a backward-compatible
manner has already proven itself many times over. The addition of the iTXt
chunk early in 1999 is the latest example; even 1995-era viewers can still
display a PNG image with such a chunk in it. Of course, such a powerful tool
cuts both ways, as became apparent when some users mistakenly tried to use
PNG images containing Fireworks's huge editing extensions on web pages.</p></dd>



<dt><b><em class="emphasis">Internal consistency checks</em></b></dt><dd><p>
<a name="INDEX-1282" />		<!-- CRCs (cyclic redundancy checks) -->
<a name="INDEX-1283" />		<!-- cyclic redundancy checks (CRCs) -->
<a name="INDEX-1284" />		<!-- internal consistency checks -->
The presence of cyclic redundancy check (CRC) values in every chunk is a
positive thing and helps PNG's robustness, but one of the original aims--the
ability to verify from a command-line prompt that a PNG image was downloaded
properly--turned out not to be particularly useful. The advent of high-speed
modems, ubiquitous Internet connections, and, above all, web browsers with
smart downloading capabilities, all served to make the command-line
feature obsolete before it was ever really put in place. The pngcheck
utility discussed in
<a href="chapter05.html">Chapter 5, "Applications: Image Converters"</a> was
originally written for this purpose, but it has since evolved into more of a
PNG conformance tester.</p></dd>

</dl>


<p>Overall, PNG has done quite well. Yes, there were a few missed turns, a few
mistakes, and somewhat slower acceptance than many of us had hoped. But as
Tom Lane has repeatedly reminded us, JPEG didn't catch on any faster, and even
GIF took quite a while outside of CompuServe. The fact that PNG is currently
<?x-need 10?>one of only three accepted image formats on the Web is quite an
achievement.  May its next four years be equally exciting!</p>

</div>

<a name="INDEX-1284.01-new" />		<!-- haiku -->
<a name="INDEX-1284.02-new" />		<!-- Michael N. Randers-Pehrson -->
<blockquote>
<p>
<?x-break ?><em class="emphasis">Sun sets over GIF.<BR>
<?x-break ?>With PNG on the horizon,<BR>
<?x-break ?>Web is dark no more.</em></p>

<p>--Michael N. Randers-Pehrson
<a name="INDEX-1285" />		<!-- .XE "tips" "for programmers::programmers" -->
<a name="INDEX-1286" />		<!-- .XE "PNG image format" "basics of" -->
</p>
</blockquote>

<pre>











































</pre>


<hr> <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

<a href="chapter15.html"><img width=24 height=13 border=0 align="left"
 src="images/prev.png" alt="&lt;-"></a>

<a href="biblio.html"><img width=24 height=13 border=0 align="right"
 src="images/next.png" alt="-&gt;"></a>

<div align="center">
  <a href="chapter15.html"><font size="-1" color="#000000"
   ><b>PREVIOUS</b></font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a
     href="toc.html"><font size="-1" color="#000000"
   ><b>CONTENTS</b></font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a
     href="biblio.html"><font size="-1" color="#000000"
   ><b>NEXT</b></font></a>
</div>

<hr> <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->



</body></html>