mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
Imported from pngcrush-1.5.2.tar
This commit is contained in:
57
README.txt
57
README.txt
@@ -1,6 +1,8 @@
|
|||||||
Pngcrush documentation
|
Pngcrush documentation
|
||||||
|
|
||||||
This is the copyright notice, disclaimer, and license:
|
This is is a copy of the copyright notice, disclaimer, and license, for
|
||||||
|
your convenience (the actual notice appears in the file pngcrush.c; in
|
||||||
|
case of any discrepancy, the copy in pngcrush.c shall prevail):
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* COPYRIGHT NOTICE, DISCLAIMER, AND LICENSE:
|
* COPYRIGHT NOTICE, DISCLAIMER, AND LICENSE:
|
||||||
@@ -38,12 +40,13 @@ This is the copyright notice, disclaimer, and license:
|
|||||||
|
|
||||||
This is the output of "pngcrush" and "pngcrush -help":
|
This is the output of "pngcrush" and "pngcrush -help":
|
||||||
|
|
||||||
| pngcrush 1.5.1, Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson
|
|
||||||
|
| pngcrush 1.5.2, Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
| This is a free, open-source program. Permission is
|
| This is a free, open-source program. Permission is
|
||||||
| irrevocably granted to everyone to use this version
|
| irrevocably granted to everyone to use this version
|
||||||
| of pngcrush without payment of any fee.
|
| of pngcrush without payment of any fee.
|
||||||
| This program was built with libpng version 1.0.8,
|
| This program was built with libpng version 1.0.9beta2,
|
||||||
| and is running with libpng version 1.0.8 - July 24, 2000 (header)
|
| and is running with libpng version 1.0.9beta2 - November 19, 2000 (header)
|
||||||
| Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson,
|
| Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson,
|
||||||
| Copyright (C) 1996, 1997 Andreas Dilger,
|
| Copyright (C) 1996, 1997 Andreas Dilger,
|
||||||
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
|
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
|
||||||
@@ -66,14 +69,16 @@ options:
|
|||||||
-fix (fix otherwise fatal conditions such as bad CRCs)
|
-fix (fix otherwise fatal conditions such as bad CRCs)
|
||||||
-force (Write a new output file even if larger than input)
|
-force (Write a new output file even if larger than input)
|
||||||
-g gamma (float or fixed*100000, e.g., 0.45455 or 45455)
|
-g gamma (float or fixed*100000, e.g., 0.45455 or 45455)
|
||||||
|
-iccp length "Profile Name" iccp_file
|
||||||
-itxt b[efore_IDAT]|a[fter_IDAT] "keyword" "text"
|
-itxt b[efore_IDAT]|a[fter_IDAT] "keyword" "text"
|
||||||
-l zlib_compression_level [0-9]
|
-l zlib_compression_level [0-9]
|
||||||
-m method [0 through 200]
|
-m method [0 through 200]
|
||||||
-max maximum_IDAT_size [1 through 524288]
|
-max maximum_IDAT_size [default 524288]
|
||||||
-no_cc (no color counting)
|
-no_cc (no color counting)
|
||||||
-n (no save; does not do compression or write output PNG)
|
-n (no save; does not do compression or write output PNG)
|
||||||
-plte_len n (truncate PLTE)
|
-plte_len n (truncate PLTE)
|
||||||
-q (quiet)
|
-q (quiet)
|
||||||
|
-reduce (do lossless color type or bit depth reduction)
|
||||||
-rem chunkname (or "alla" or "allb")
|
-rem chunkname (or "alla" or "allb")
|
||||||
-replace_gamma gamma (float or fixed*100000) even if gAMA is present.
|
-replace_gamma gamma (float or fixed*100000) even if gAMA is present.
|
||||||
-res dpi
|
-res dpi
|
||||||
@@ -86,29 +91,16 @@ options:
|
|||||||
-h (help and legal notices)
|
-h (help and legal notices)
|
||||||
-p (pause)
|
-p (pause)
|
||||||
|
|
||||||
|
options (Note: any option can be spelled out for clarity, e.g.,
|
||||||
|
"pngcrush -dir New -method 7 -remove bkgd *.png"
|
||||||
|
is the same as "pngcrush -d New -m 7 -rem bkgd *.png"):
|
||||||
|
|
||||||
| pngcrush 1.5.1, Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson
|
|
||||||
| This is a free, open-source program. Permission is
|
|
||||||
| irrevocably granted to everyone to use this version
|
|
||||||
| of pngcrush without payment of any fee.
|
|
||||||
| This program was built with libpng version 1.0.8,
|
|
||||||
| and is running with libpng version 1.0.8 - July 24, 2000 (header)
|
|
||||||
| Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson,
|
|
||||||
| Copyright (C) 1996, 1997 Andreas Dilger,
|
|
||||||
| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
|
|
||||||
| and zlib version 1.1.3pc, Copyright (C) 1998,
|
|
||||||
| Jean-loup Gailly and Mark Adler.
|
|
||||||
|
|
||||||
|
|
||||||
usage: pngcrush [options] infile.png outfile.png
|
|
||||||
pngcrush -e ext [other options] files.png ...
|
|
||||||
pngcrush -d dir [other options] files.png ...
|
|
||||||
|
|
||||||
options:
|
|
||||||
-already already_crushed_size [e.g., 8192]
|
-already already_crushed_size [e.g., 8192]
|
||||||
|
|
||||||
If file has an IDAT greater than this size, it
|
If file has an IDAT greater than this size, it
|
||||||
will be considered to be already crushed.
|
will be considered to be already crushed and will
|
||||||
|
not be processed, unless you are making other changes
|
||||||
|
or the "-force" option is present.
|
||||||
|
|
||||||
-brute (Use brute-force, try 114 different methods [11-124])
|
-brute (Use brute-force, try 114 different methods [11-124])
|
||||||
|
|
||||||
@@ -168,6 +160,10 @@ options:
|
|||||||
file has no gAMA chunk. To replace an existing
|
file has no gAMA chunk. To replace an existing
|
||||||
gAMA chunk, use the '-replace_gamma' option.
|
gAMA chunk, use the '-replace_gamma' option.
|
||||||
|
|
||||||
|
-iccp length "Profile Name" iccp_file
|
||||||
|
|
||||||
|
file with ICC profile to insert in an iCCP chunk.
|
||||||
|
|
||||||
-itxt b[efore_IDAT]|a[fter_IDAT] "keyword" "text"
|
-itxt b[efore_IDAT]|a[fter_IDAT] "keyword" "text"
|
||||||
|
|
||||||
Uncompressed iTXt chunk to insert (see -text).
|
Uncompressed iTXt chunk to insert (see -text).
|
||||||
@@ -188,7 +184,7 @@ options:
|
|||||||
1, 4, and 7 use no filtering; methods 11 and up use
|
1, 4, and 7 use no filtering; methods 11 and up use
|
||||||
specified filter, compression level, and strategy.
|
specified filter, compression level, and strategy.
|
||||||
|
|
||||||
-max maximum_IDAT_size [1 through 524288]
|
-max maximum_IDAT_size [default 524288]
|
||||||
|
|
||||||
-no_cc (no color counting)
|
-no_cc (no color counting)
|
||||||
|
|
||||||
@@ -199,11 +195,14 @@ options:
|
|||||||
-plte_len n (truncate PLTE)
|
-plte_len n (truncate PLTE)
|
||||||
|
|
||||||
Truncates the PLTE. Be sure not to truncate it to
|
Truncates the PLTE. Be sure not to truncate it to
|
||||||
|
|
||||||
less than the greatest index present in IDAT.
|
less than the greatest index present in IDAT.
|
||||||
|
|
||||||
-q (quiet)
|
-q (quiet)
|
||||||
|
|
||||||
|
-reduce (do lossless color type or bit depth reduction)
|
||||||
|
|
||||||
|
(if possible)
|
||||||
|
|
||||||
-rem chunkname (or "alla" or "allb")
|
-rem chunkname (or "alla" or "allb")
|
||||||
|
|
||||||
Name of an ancillary chunk or optional PLTE to be
|
Name of an ancillary chunk or optional PLTE to be
|
||||||
@@ -249,6 +248,9 @@ options:
|
|||||||
|
|
||||||
-version (display the pngcrush version)
|
-version (display the pngcrush version)
|
||||||
|
|
||||||
|
Look for the most recent version of pngcrush at
|
||||||
|
http://pmt.sourceforge.net
|
||||||
|
|
||||||
-w compression_window_size [32, 16, 8, 4, 2, 1, 512]
|
-w compression_window_size [32, 16, 8, 4, 2, 1, 512]
|
||||||
|
|
||||||
Size of the sliding compression window, in kbytes
|
Size of the sliding compression window, in kbytes
|
||||||
@@ -262,6 +264,8 @@ options:
|
|||||||
zlib compression strategy to use with the preceding
|
zlib compression strategy to use with the preceding
|
||||||
'-m method' argument.
|
'-m method' argument.
|
||||||
|
|
||||||
|
-zmem zlib_compression_mem_level [1-9, default 9]
|
||||||
|
|
||||||
-zitxt b[efore_IDAT]|a[fter_IDAT] "keyword" "text"
|
-zitxt b[efore_IDAT]|a[fter_IDAT] "keyword" "text"
|
||||||
|
|
||||||
Compressed iTXt chunk to insert (see -text).
|
Compressed iTXt chunk to insert (see -text).
|
||||||
@@ -280,3 +284,4 @@ options:
|
|||||||
e.g., type 'pngcrush -pause -help', if the help
|
e.g., type 'pngcrush -pause -help', if the help
|
||||||
screen scrolls out of sight.
|
screen scrolls out of sight.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
68
compress.c
Normal file
68
compress.c
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/* compress.c -- compress a memory buffer
|
||||||
|
* Copyright (C) 1995-1998 Jean-loup Gailly.
|
||||||
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* @(#) $Id$ */
|
||||||
|
|
||||||
|
#include "zlib.h"
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
Compresses the source buffer into the destination buffer. The level
|
||||||
|
parameter has the same meaning as in deflateInit. sourceLen is the byte
|
||||||
|
length of the source buffer. Upon entry, destLen is the total size of the
|
||||||
|
destination buffer, which must be at least 0.1% larger than sourceLen plus
|
||||||
|
12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
|
||||||
|
|
||||||
|
compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
|
||||||
|
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
|
||||||
|
Z_STREAM_ERROR if the level parameter is invalid.
|
||||||
|
*/
|
||||||
|
int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
|
||||||
|
Bytef *dest;
|
||||||
|
uLongf *destLen;
|
||||||
|
const Bytef *source;
|
||||||
|
uLong sourceLen;
|
||||||
|
int level;
|
||||||
|
{
|
||||||
|
z_stream stream;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
stream.next_in = (Bytef*)source;
|
||||||
|
stream.avail_in = (uInt)sourceLen;
|
||||||
|
#ifdef MAXSEG_64K
|
||||||
|
/* Check for source > 64K on 16-bit machine: */
|
||||||
|
if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
|
||||||
|
#endif
|
||||||
|
stream.next_out = dest;
|
||||||
|
stream.avail_out = (uInt)*destLen;
|
||||||
|
if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
|
||||||
|
|
||||||
|
stream.zalloc = (alloc_func)0;
|
||||||
|
stream.zfree = (free_func)0;
|
||||||
|
stream.opaque = (voidpf)0;
|
||||||
|
|
||||||
|
err = deflateInit(&stream, level);
|
||||||
|
if (err != Z_OK) return err;
|
||||||
|
|
||||||
|
err = deflate(&stream, Z_FINISH);
|
||||||
|
if (err != Z_STREAM_END) {
|
||||||
|
deflateEnd(&stream);
|
||||||
|
return err == Z_OK ? Z_BUF_ERROR : err;
|
||||||
|
}
|
||||||
|
*destLen = stream.total_out;
|
||||||
|
|
||||||
|
err = deflateEnd(&stream);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===========================================================================
|
||||||
|
*/
|
||||||
|
int ZEXPORT compress (dest, destLen, source, sourceLen)
|
||||||
|
Bytef *dest;
|
||||||
|
uLongf *destLen;
|
||||||
|
const Bytef *source;
|
||||||
|
uLong sourceLen;
|
||||||
|
{
|
||||||
|
return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
|
||||||
|
}
|
||||||
34
png.c
34
png.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* libpng version 1.0.8 - July 24, 2000
|
* libpng version 1.0.9beta2 - November 19, 2000
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -13,18 +13,18 @@
|
|||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
typedef version_1_0_8 Your_png_h_is_not_version_1_0_8;
|
typedef version_1_0_9beta2 Your_png_h_is_not_version_1_0_9beta2;
|
||||||
|
|
||||||
/* Version information for C files. This had better match the version
|
/* Version information for C files. This had better match the version
|
||||||
* string defined in png.h. */
|
* string defined in png.h. */
|
||||||
|
|
||||||
#ifdef PNG_USE_GLOBAL_ARRAYS
|
#ifdef PNG_USE_GLOBAL_ARRAYS
|
||||||
/* png_libpng_ver was changed to a function in version 1.0.5c */
|
/* png_libpng_ver was changed to a function in version 1.0.5c */
|
||||||
char png_libpng_ver[12] = "1.0.8";
|
const char png_libpng_ver[18] = "1.0.9beta2";
|
||||||
|
|
||||||
/* png_sig was changed to a function in version 1.0.5c */
|
/* png_sig was changed to a function in version 1.0.5c */
|
||||||
/* Place to hold the signature string for a PNG file. */
|
/* Place to hold the signature string for a PNG file. */
|
||||||
png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
const png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
||||||
|
|
||||||
/* Invoke global declarations for constant strings for known chunk types */
|
/* Invoke global declarations for constant strings for known chunk types */
|
||||||
PNG_IHDR;
|
PNG_IHDR;
|
||||||
@@ -52,32 +52,33 @@ PNG_zTXt;
|
|||||||
/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
|
/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
|
||||||
|
|
||||||
/* start of interlace block */
|
/* start of interlace block */
|
||||||
int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||||
|
|
||||||
/* offset to next interlace block */
|
/* offset to next interlace block */
|
||||||
int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||||
|
|
||||||
/* start of interlace block in the y direction */
|
/* start of interlace block in the y direction */
|
||||||
int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
|
const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
|
||||||
|
|
||||||
/* offset to next interlace block in the y direction */
|
/* offset to next interlace block in the y direction */
|
||||||
int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
|
const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
|
||||||
|
|
||||||
/* width of interlace block (used in assembler routines only) */
|
/* width of interlace block (used in assembler routines only) */
|
||||||
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
||||||
int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Height of interlace block. This is not currently used - if you need
|
/* Height of interlace block. This is not currently used - if you need
|
||||||
* it, uncomment it here and in png.h
|
* it, uncomment it here and in png.h
|
||||||
int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
|
const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Mask to determine which pixels are valid in a pass */
|
/* Mask to determine which pixels are valid in a pass */
|
||||||
int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
|
const int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
|
||||||
|
|
||||||
/* Mask to determine which pixels to overwrite while displaying */
|
/* Mask to determine which pixels to overwrite while displaying */
|
||||||
int FARDATA png_pass_dsp_mask[] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
|
const int FARDATA png_pass_dsp_mask[]
|
||||||
|
= {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -625,7 +626,7 @@ png_charp PNGAPI
|
|||||||
png_get_copyright(png_structp png_ptr)
|
png_get_copyright(png_structp png_ptr)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */
|
if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */
|
||||||
return ((png_charp) "\n libpng version 1.0.8 - July 24, 2000\n\
|
return ((png_charp) "\n libpng version 1.0.9beta2 - November 19, 2000\n\
|
||||||
Copyright (c) 1998-2000 Glenn Randers-Pehrson\n\
|
Copyright (c) 1998-2000 Glenn Randers-Pehrson\n\
|
||||||
Copyright (c) 1996, 1997 Andreas Dilger\n\
|
Copyright (c) 1996, 1997 Andreas Dilger\n\
|
||||||
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n");
|
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n");
|
||||||
@@ -643,8 +644,8 @@ png_get_libpng_ver(png_structp png_ptr)
|
|||||||
{
|
{
|
||||||
/* Version of *.c files used when building libpng */
|
/* Version of *.c files used when building libpng */
|
||||||
if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
|
if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
|
||||||
return((png_charp) "1.0.8");
|
return((png_charp) "1.0.9beta2");
|
||||||
return((png_charp) "1.0.8");
|
return((png_charp) "1.0.9beta2");
|
||||||
}
|
}
|
||||||
|
|
||||||
png_charp PNGAPI
|
png_charp PNGAPI
|
||||||
@@ -689,9 +690,10 @@ png_reset_zstream(png_structp png_ptr)
|
|||||||
return (inflateReset(&png_ptr->zstream));
|
return (inflateReset(&png_ptr->zstream));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This function was added to libpng-1.0.7 */
|
||||||
png_uint_32 PNGAPI
|
png_uint_32 PNGAPI
|
||||||
png_access_version_number(void)
|
png_access_version_number(void)
|
||||||
{
|
{
|
||||||
/* Version of *.c files used when building libpng */
|
/* Version of *.c files used when building libpng */
|
||||||
return((png_uint_32) 10008L);
|
return((png_uint_32) 10009L);
|
||||||
}
|
}
|
||||||
|
|||||||
85
png.h
85
png.h
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* png.h - header file for PNG reference library
|
/* png.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* libpng version 1.0.8 - July 24, 2000
|
* libpng version 1.0.9beta2 - November 19, 2000
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
* Authors and maintainers:
|
* Authors and maintainers:
|
||||||
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
||||||
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
|
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
|
||||||
* libpng versions 0.97, January 1998, through 1.0.8 - July 24, 2000: Glenn
|
* libpng versions 0.97, January 1998, through 1.0.9beta2 - November 19, 2000: Glenn
|
||||||
* See also "Contributing Authors", below.
|
* See also "Contributing Authors", below.
|
||||||
*
|
*
|
||||||
* Note about libpng version numbers:
|
* Note about libpng version numbers:
|
||||||
@@ -58,6 +58,7 @@
|
|||||||
* 1.0.8beta1-4 10008 2.1.0.8beta1-4
|
* 1.0.8beta1-4 10008 2.1.0.8beta1-4
|
||||||
* 1.0.8rc1 10008 2.1.0.8rc1
|
* 1.0.8rc1 10008 2.1.0.8rc1
|
||||||
* 1.0.8 10008 2.1.0.8
|
* 1.0.8 10008 2.1.0.8
|
||||||
|
* 1.0.9beta1-2 10009 2.1.0.9
|
||||||
*
|
*
|
||||||
* Henceforth the source version will match the shared-library major
|
* Henceforth the source version will match the shared-library major
|
||||||
* and minor numbers; the shared-library major version number will be
|
* and minor numbers; the shared-library major version number will be
|
||||||
@@ -84,7 +85,7 @@
|
|||||||
* If you modify libpng you may insert additional notices immediately following
|
* If you modify libpng you may insert additional notices immediately following
|
||||||
* this sentence.
|
* this sentence.
|
||||||
*
|
*
|
||||||
* libpng versions 1.0.7, July 1, 2000, through 1.0.8, July 24, 2000, are
|
* libpng versions 1.0.7, July 1, 2000, through 1.0.9beta2, November 19, 2000, are
|
||||||
* Copyright (c) 2000 Glenn Randers-Pehrson, and are
|
* Copyright (c) 2000 Glenn Randers-Pehrson, and are
|
||||||
* distributed according to the same disclaimer and license as libpng-1.0.6
|
* distributed according to the same disclaimer and license as libpng-1.0.6
|
||||||
* with the following individuals added to the list of Contributing Authors
|
* with the following individuals added to the list of Contributing Authors
|
||||||
@@ -189,13 +190,13 @@
|
|||||||
* Y2K compliance in libpng:
|
* Y2K compliance in libpng:
|
||||||
* =========================
|
* =========================
|
||||||
*
|
*
|
||||||
* July 24, 2000
|
* November 19, 2000
|
||||||
*
|
*
|
||||||
* Since the PNG Development group is an ad-hoc body, we can't make
|
* Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
* an official declaration.
|
* an official declaration.
|
||||||
*
|
*
|
||||||
* This is your unofficial assurance that libpng from version 0.71 and
|
* This is your unofficial assurance that libpng from version 0.71 and
|
||||||
* upward through 1.0.8 are Y2K compliant. It is my belief that earlier
|
* upward through 1.0.9beta2 are Y2K compliant. It is my belief that earlier
|
||||||
* versions were also Y2K compliant.
|
* versions were also Y2K compliant.
|
||||||
*
|
*
|
||||||
* Libpng only has three year fields. One is a 2-byte unsigned integer
|
* Libpng only has three year fields. One is a 2-byte unsigned integer
|
||||||
@@ -251,26 +252,25 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Version information for png.h - this should match the version in png.c */
|
/* Version information for png.h - this should match the version in png.c */
|
||||||
#define PNG_LIBPNG_VER_STRING "1.0.8"
|
#define PNG_LIBPNG_VER_STRING "1.0.9beta2"
|
||||||
|
|
||||||
#define PNG_LIBPNG_VER_SONUM 2
|
#define PNG_LIBPNG_VER_SONUM 2
|
||||||
|
|
||||||
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
||||||
#define PNG_LIBPNG_VER_MAJOR 1
|
#define PNG_LIBPNG_VER_MAJOR 1
|
||||||
#define PNG_LIBPNG_VER_MINOR 0
|
#define PNG_LIBPNG_VER_MINOR 0
|
||||||
#define PNG_LIBPNG_VER_RELEASE 8
|
#define PNG_LIBPNG_VER_RELEASE 9
|
||||||
/* This should match the numeric part of the final component of
|
/* This should match the numeric part of the final component of
|
||||||
* PNG_LIBPNG_VER_STRING, omitting any leading zero: */
|
* PNG_LIBPNG_VER_STRING, omitting any leading zero: */
|
||||||
#define PNG_LIBPNG_VER_BUILD 0
|
#define PNG_LIBPNG_VER_BUILD 2
|
||||||
|
#define PNG_LIBPNG_BUILD_TYPE beta /* alpha, beta, rc, stable, patched */
|
||||||
|
|
||||||
/* Careful here. At one time, Guy wanted to use 082, but that would be octal.
|
/* Careful here. At one time, Guy wanted to use 082, but that would be octal.
|
||||||
* We must not include leading zeros.
|
* We must not include leading zeros.
|
||||||
* Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
|
* Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
|
||||||
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
||||||
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */
|
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */
|
||||||
#define PNG_LIBPNG_VER 10008 /* 1.0.8 */
|
#define PNG_LIBPNG_VER 10009 /* 1.0.9 */
|
||||||
|
|
||||||
/* Note to maintainer: update this number in scripts/pngdef.pas as well */
|
|
||||||
|
|
||||||
#ifndef PNG_VERSION_INFO_ONLY
|
#ifndef PNG_VERSION_INFO_ONLY
|
||||||
|
|
||||||
@@ -302,8 +302,8 @@ extern "C" {
|
|||||||
* the version above.
|
* the version above.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_USE_GLOBAL_ARRAYS
|
#ifdef PNG_USE_GLOBAL_ARRAYS
|
||||||
PNG_EXPORT_VAR (char) png_libpng_ver[12]; /* need room for 99.99.99-patch-aa0*/
|
PNG_EXPORT_VAR (const char) png_libpng_ver[18];
|
||||||
/* Note to maintainer: increase to 18 at the next opportunity */
|
/* need room for 99.99.99beta99z*/
|
||||||
#else
|
#else
|
||||||
#define png_libpng_ver png_get_header_ver(NULL)
|
#define png_libpng_ver png_get_header_ver(NULL)
|
||||||
#endif
|
#endif
|
||||||
@@ -311,17 +311,17 @@ PNG_EXPORT_VAR (char) png_libpng_ver[12]; /* need room for 99.99.99-patch-aa0*/
|
|||||||
#ifdef PNG_USE_GLOBAL_ARRAYS
|
#ifdef PNG_USE_GLOBAL_ARRAYS
|
||||||
/* This was removed in version 1.0.5c */
|
/* This was removed in version 1.0.5c */
|
||||||
/* Structures to facilitate easy interlacing. See png.c for more details */
|
/* Structures to facilitate easy interlacing. See png.c for more details */
|
||||||
PNG_EXPORT_VAR (int FARDATA) png_pass_start[7];
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_start[7];
|
||||||
PNG_EXPORT_VAR (int FARDATA) png_pass_inc[7];
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_inc[7];
|
||||||
PNG_EXPORT_VAR (int FARDATA) png_pass_ystart[7];
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_ystart[7];
|
||||||
PNG_EXPORT_VAR (int FARDATA) png_pass_yinc[7];
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_yinc[7];
|
||||||
PNG_EXPORT_VAR (int FARDATA) png_pass_mask[7];
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_mask[7];
|
||||||
PNG_EXPORT_VAR (int FARDATA) png_pass_dsp_mask[7];
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_dsp_mask[7];
|
||||||
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
|
||||||
extern int FARDATA png_pass_width[7]; /* now used in pngvcrd.c, pnggccrd.c */
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_width[7];
|
||||||
#endif
|
#endif
|
||||||
/* This isn't currently used. If you need it, see png.c for more details.
|
/* This isn't currently used. If you need it, see png.c for more details.
|
||||||
extern int FARDATA png_pass_height[7];
|
PNG_EXPORT_VAR (const int FARDATA) png_pass_height[7];
|
||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -523,6 +523,7 @@ typedef struct png_info_struct
|
|||||||
png_uint_16 num_trans; /* number of transparent palette color (tRNS) */
|
png_uint_16 num_trans; /* number of transparent palette color (tRNS) */
|
||||||
png_byte bit_depth; /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
|
png_byte bit_depth; /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
|
||||||
png_byte color_type; /* see PNG_COLOR_TYPE_ below (from IHDR) */
|
png_byte color_type; /* see PNG_COLOR_TYPE_ below (from IHDR) */
|
||||||
|
/* The following three should have been named *_method not *_type */
|
||||||
png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
|
png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
|
||||||
png_byte filter_type; /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
|
png_byte filter_type; /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
|
||||||
png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
||||||
@@ -764,6 +765,9 @@ typedef png_info FAR * FAR * png_infopp;
|
|||||||
#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR)
|
#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR)
|
||||||
#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
|
#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
|
||||||
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
|
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
|
||||||
|
/* aliases */
|
||||||
|
#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA
|
||||||
|
#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA
|
||||||
|
|
||||||
/* This is for compression type. PNG 1.0-1.2 only define the single type. */
|
/* This is for compression type. PNG 1.0-1.2 only define the single type. */
|
||||||
#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
|
#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
|
||||||
@@ -904,6 +908,10 @@ typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
|
|||||||
#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */
|
#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */
|
||||||
#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */
|
#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */
|
||||||
|
|
||||||
|
/* Flags for MNG supported features */
|
||||||
|
#define PNG_FLAG_MNG_EMPTY_PLTE 0x01
|
||||||
|
#define PNG_ALL_MNG_FEATURES 0x01
|
||||||
|
|
||||||
typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
|
typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
|
||||||
typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
|
typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
|
||||||
|
|
||||||
@@ -1137,9 +1145,11 @@ struct png_struct_def
|
|||||||
png_uint_16 rgb_to_gray_blue_coeff;
|
png_uint_16 rgb_to_gray_blue_coeff;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
|
#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
|
||||||
|
defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
|
||||||
defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
|
defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
|
||||||
png_byte empty_plte_permitted;
|
/* Note to maintainer: change this to png_uint_32 at next opportunity */
|
||||||
|
png_byte mng_features_permitted;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
|
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||||
@@ -1149,9 +1159,9 @@ struct png_struct_def
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* This prevents a compiler error in png_get_copyright() in png.c if png.c
|
/* This prevents a compiler error in png_get_copyright() in png.c if png.c
|
||||||
and png.h are both at * version 1.0.8
|
and png.h are both at * version 1.0.9beta2
|
||||||
*/
|
*/
|
||||||
typedef png_structp version_1_0_8;
|
typedef png_structp version_1_0_9beta2;
|
||||||
|
|
||||||
typedef png_struct FAR * FAR * png_structpp;
|
typedef png_struct FAR * FAR * png_structpp;
|
||||||
|
|
||||||
@@ -1387,6 +1397,7 @@ extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
|
|||||||
#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
|
#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
|
||||||
defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
|
defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
|
||||||
/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
|
/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
|
||||||
|
/* Deprecated and will be removed. Use png_permit_mng_features() instead. */
|
||||||
extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
|
extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
|
||||||
int empty_plte_permitted));
|
int empty_plte_permitted));
|
||||||
#endif
|
#endif
|
||||||
@@ -1928,12 +1939,13 @@ extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
|
|||||||
|
|
||||||
extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
|
extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
|
||||||
png_infop info_ptr, png_uint_32 *width, png_uint_32 *height,
|
png_infop info_ptr, png_uint_32 *width, png_uint_32 *height,
|
||||||
int *bit_depth, int *color_type, int *interlace_type,
|
int *bit_depth, int *color_type, int *interlace_method,
|
||||||
int *compression_type, int *filter_type));
|
int *compression_method, int *filter_method));
|
||||||
|
|
||||||
extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
|
extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
|
||||||
png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
|
png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
|
||||||
int color_type, int interlace_type, int compression_type, int filter_type));
|
int color_type, int interlace_method, int compression_method,
|
||||||
|
int filter_method));
|
||||||
|
|
||||||
#if defined(PNG_READ_oFFs_SUPPORTED)
|
#if defined(PNG_READ_oFFs_SUPPORTED)
|
||||||
extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
|
extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
|
||||||
@@ -2117,11 +2129,11 @@ extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
|
|||||||
extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
|
extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
|
||||||
png_infop info_ptr,
|
png_infop info_ptr,
|
||||||
int transforms,
|
int transforms,
|
||||||
voidp params));
|
png_voidp params));
|
||||||
extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
|
extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
|
||||||
png_infop info_ptr,
|
png_infop info_ptr,
|
||||||
int transforms,
|
int transforms,
|
||||||
voidp params));
|
png_voidp params));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define PNG_DEBUG at compile time for debugging information. Higher
|
/* Define PNG_DEBUG at compile time for debugging information. Higher
|
||||||
@@ -2182,8 +2194,13 @@ extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
|
|||||||
extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
|
extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
|
||||||
extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
|
extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
|
||||||
|
|
||||||
|
#ifdef PNG_MNG_FEATURES_SUPPORTED
|
||||||
|
extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
|
||||||
|
png_ptr, png_uint_32 mng_features_permitted));
|
||||||
|
#endif
|
||||||
|
|
||||||
#define PNG_HEADER_VERSION_STRING \
|
#define PNG_HEADER_VERSION_STRING \
|
||||||
" libpng version 1.0.8 - July 24, 2000 (header)\n"
|
" libpng version 1.0.9beta2 - November 19, 2000 (header)\n"
|
||||||
|
|
||||||
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
|
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
|
||||||
/* With these routines we avoid an integer divide, which will be slower on
|
/* With these routines we avoid an integer divide, which will be slower on
|
||||||
@@ -2330,7 +2347,7 @@ extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
|
|||||||
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
|
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
|
||||||
/* place to hold the signature string for a PNG file. */
|
/* place to hold the signature string for a PNG file. */
|
||||||
#ifdef PNG_USE_GLOBAL_ARRAYS
|
#ifdef PNG_USE_GLOBAL_ARRAYS
|
||||||
PNG_EXPORT_VAR (png_byte FARDATA) png_sig[8];
|
PNG_EXPORT_VAR (const png_byte FARDATA) png_sig[8];
|
||||||
#else
|
#else
|
||||||
#define png_sig png_sig_bytes(NULL)
|
#define png_sig png_sig_bytes(NULL)
|
||||||
#endif
|
#endif
|
||||||
@@ -2516,8 +2533,8 @@ PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr));
|
|||||||
*/
|
*/
|
||||||
PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,
|
PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,
|
||||||
png_uint_32 height,
|
png_uint_32 height,
|
||||||
int bit_depth, int color_type, int compression_type, int filter_type,
|
int bit_depth, int color_type, int compression_method, int filter_method,
|
||||||
int interlace_type));
|
int interlace_method));
|
||||||
|
|
||||||
PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette,
|
PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette,
|
||||||
png_uint_32 num_pal));
|
png_uint_32 num_pal));
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* pngasmrd.h - assembler version of utilities to read a PNG file
|
/* pngasmrd.h - assembler version of utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1999, 2000 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
|
|||||||
19
pngconf.h
19
pngconf.h
@@ -1,6 +1,6 @@
|
|||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -400,6 +400,7 @@
|
|||||||
#define PNG_NO_WRITE_USER_TRANSFORM
|
#define PNG_NO_WRITE_USER_TRANSFORM
|
||||||
#define PNG_NO_USER_MEM
|
#define PNG_NO_USER_MEM
|
||||||
#define PNG_NO_READ_EMPTY_PLTE
|
#define PNG_NO_READ_EMPTY_PLTE
|
||||||
|
#define PNG_NO_MNG_FEATURES
|
||||||
#define PNG_NO_FIXED_POINT_SUPPORTED
|
#define PNG_NO_FIXED_POINT_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -492,8 +493,12 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNG_NO_MNG_FEATURES
|
||||||
|
#define PNG_MNG_FEATURES_SUPPORTED /* Useful for MNG applications */
|
||||||
|
#endif
|
||||||
|
/* Deprecated, will be removed */
|
||||||
#ifndef PNG_NO_READ_EMPTY_PLTE
|
#ifndef PNG_NO_READ_EMPTY_PLTE
|
||||||
#define PNG_READ_EMPTY_PLTE_SUPPORTED /* useful for MNG applications */
|
#define PNG_READ_EMPTY_PLTE_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
|
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||||
@@ -549,8 +554,9 @@ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
|||||||
#define PNG_WRITE_FLUSH_SUPPORTED
|
#define PNG_WRITE_FLUSH_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */
|
||||||
#ifndef PNG_NO_WRITE_EMPTY_PLTE
|
#ifndef PNG_NO_WRITE_EMPTY_PLTE
|
||||||
#define PNG_WRITE_EMPTY_PLTE_SUPPORTED /* useful for MNG applications */
|
#define PNG_WRITE_EMPTY_PLTE_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_NO_STDIO
|
#ifndef PNG_NO_STDIO
|
||||||
@@ -1134,6 +1140,13 @@ typedef z_stream FAR * png_zstreamp;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNGAPI
|
||||||
|
# define PNGAPI
|
||||||
|
#endif
|
||||||
|
#ifndef PNG_IMPEXP
|
||||||
|
# define PNG_IMPEXP
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_EXPORT
|
#ifndef PNG_EXPORT
|
||||||
# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol
|
# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
375
pngcrush.c
375
pngcrush.c
@@ -1,9 +1,12 @@
|
|||||||
/* pngcrush.c - recompresses png files
|
/* pngcrush.c - recompresses png files
|
||||||
* Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
|
* Copyright (C) 1998, 1999, 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
|
||||||
*
|
*
|
||||||
|
* The most recent version of pngcrush can be found at
|
||||||
|
* http://pmt.sourceforge.net/pngcrush/
|
||||||
|
*
|
||||||
* This program reads in a PNG image, and writes it out again, with the
|
* This program reads in a PNG image, and writes it out again, with the
|
||||||
* optimum filter_type and zlib_level. It uses brute force (trying
|
* optimum filter_method and zlib_level. It uses brute force (trying
|
||||||
* filter_type none, and libpng adaptive filtering, with compression
|
* filter_method none, and libpng adaptive filtering, with compression
|
||||||
* levels 3 and 9). It does the most time-consuming method last in case
|
* levels 3 and 9). It does the most time-consuming method last in case
|
||||||
* it turns out to be the best.
|
* it turns out to be the best.
|
||||||
*
|
*
|
||||||
@@ -14,9 +17,13 @@
|
|||||||
*
|
*
|
||||||
* Thanks to Greg Roelofs for various bug fixes, suggestions, and
|
* Thanks to Greg Roelofs for various bug fixes, suggestions, and
|
||||||
* occasionally creating Linux executables.
|
* occasionally creating Linux executables.
|
||||||
|
*
|
||||||
|
* Thanks to Stephan Levavej for some helpful suggestions about gcc compiler
|
||||||
|
* options and for a suggestion to increase the Z_MEM_LEVEL from default.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNGCRUSH_VERSION "1.5.1"
|
#define PNGCRUSH_VERSION "1.5.2"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
@@ -57,6 +64,26 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Change log:
|
/* Change log:
|
||||||
|
*
|
||||||
|
* Version 1.5.2 (built with libpng-1.0.9beta1)
|
||||||
|
*
|
||||||
|
* Added "-iccp" option.
|
||||||
|
*
|
||||||
|
* Increased the zlib memory level, which improves compression (typically
|
||||||
|
* about 1.3 percent for photos) at the expense of increased memory usage.
|
||||||
|
*
|
||||||
|
* Enabled the "-max max_idat_size" option, even when max_idat_size
|
||||||
|
* exceeds the default 1/2 megabyte size.
|
||||||
|
*
|
||||||
|
* Added missing "png_ptr" argument to png_error() call
|
||||||
|
*
|
||||||
|
* Revised the "-help" output slightly and improved the "-version" output.
|
||||||
|
*
|
||||||
|
* The "-already[_crushed]" option is now ignored if the "-force" option
|
||||||
|
* is present or if chunks are being added, deleted, or modified.
|
||||||
|
*
|
||||||
|
* Improved "things_have_changed" behavior (now, when set in a particular
|
||||||
|
* file, it is not set for all remaining files)
|
||||||
*
|
*
|
||||||
* Version 1.5.1 (built with libpng-1.0.8)
|
* Version 1.5.1 (built with libpng-1.0.8)
|
||||||
*
|
*
|
||||||
@@ -272,26 +299,31 @@
|
|||||||
|
|
||||||
/* To do:
|
/* To do:
|
||||||
*
|
*
|
||||||
* Version 1.4.*: check for unused alpha channel and ok-to-reduce-depth.
|
* Check for unused alpha channel and ok-to-reduce-depth.
|
||||||
* Rearrange palette to put most-used color first and transparent color
|
|
||||||
* second (see ImageMagick 5.1.1 and later).
|
|
||||||
* Finish pplt (partial palette) feature.
|
|
||||||
* Take care that sBIT and bKGD data aren't lost when reducing images
|
* Take care that sBIT and bKGD data aren't lost when reducing images
|
||||||
* from truecolor to grayscale.
|
* from truecolor to grayscale.
|
||||||
*
|
*
|
||||||
* Version 1.4.*: Use an alternate write function for the trial passes, that
|
* Rearrange palette to put most-used color first and transparent color
|
||||||
|
* second (see ImageMagick 5.1.1 and later).
|
||||||
|
*
|
||||||
|
* Finish pplt (partial palette) feature.
|
||||||
|
*
|
||||||
|
* Use an alternate write function for the trial passes, that
|
||||||
* simply counts bytes rather than actually writing to a file, to save wear
|
* simply counts bytes rather than actually writing to a file, to save wear
|
||||||
* and tear on disk drives.
|
* and tear on disk drives.
|
||||||
*
|
*
|
||||||
* Version 1.4.*: Allow in-place file replacement or as a filter, as in
|
* Allow in-place file replacement or as a filter, as in
|
||||||
* "pngcrush -overwrite file.png"
|
* "pngcrush -overwrite file.png"
|
||||||
* "pngcreator | pngcrush > output.png"
|
* "pngcreator | pngcrush > output.png"
|
||||||
*
|
*
|
||||||
* Version 1.4.*: Remove text-handling and color-handling features and put
|
* Remove text-handling and color-handling features and put
|
||||||
* those in a separate program or programs, to avoid unnecessary
|
* those in a separate program or programs, to avoid unnecessary
|
||||||
* recompressing.
|
* recompressing.
|
||||||
*
|
*
|
||||||
|
* Move the Photoshop-fixing stuff into a separate program.
|
||||||
|
*
|
||||||
* add "-time" directive
|
* add "-time" directive
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -301,6 +333,11 @@
|
|||||||
* so they are ifdef'ed out in a special version of pngconf.h, which
|
* so they are ifdef'ed out in a special version of pngconf.h, which
|
||||||
* includes pngcrush.h and is included by png.h */
|
* includes pngcrush.h and is included by png.h */
|
||||||
|
|
||||||
|
/* defined so I can write to a file on gui/windowing platforms */
|
||||||
|
/* #define STDERR stderr */
|
||||||
|
#define STDERR stdout /* for DOS */
|
||||||
|
|
||||||
|
|
||||||
#ifndef PNGCRUSH_LIBPNG_VER
|
#ifndef PNGCRUSH_LIBPNG_VER
|
||||||
# define PNGCRUSH_LIBPNG_VER PNG_LIBPNG_VER
|
# define PNGCRUSH_LIBPNG_VER PNG_LIBPNG_VER
|
||||||
#endif
|
#endif
|
||||||
@@ -427,10 +464,6 @@ main()
|
|||||||
# define TIME_T float
|
# define TIME_T float
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* defined so I can write to a file on gui/windowing platforms */
|
|
||||||
/* #define STDERR stderr */
|
|
||||||
#define STDERR stdout /* for DOS */
|
|
||||||
|
|
||||||
/* input and output filenames */
|
/* input and output filenames */
|
||||||
static PNG_CONST char *progname = "pngtest" DOT "png";
|
static PNG_CONST char *progname = "pngtest" DOT "png";
|
||||||
static PNG_CONST char *inname = "pngtest" DOT "png";
|
static PNG_CONST char *inname = "pngtest" DOT "png";
|
||||||
@@ -438,6 +471,7 @@ static PNG_CONST char *outname = "pngout" DOT "png";
|
|||||||
static PNG_CONST char *directory_name = "pngcrush" DOT "bak";
|
static PNG_CONST char *directory_name = "pngcrush" DOT "bak";
|
||||||
static PNG_CONST char *extension = "_C" DOT "png";
|
static PNG_CONST char *extension = "_C" DOT "png";
|
||||||
|
|
||||||
|
|
||||||
static png_uint_32 width, height;
|
static png_uint_32 width, height;
|
||||||
static png_uint_32 measured_idat_length;
|
static png_uint_32 measured_idat_length;
|
||||||
static int pngcrush_must_exit=0;
|
static int pngcrush_must_exit=0;
|
||||||
@@ -465,6 +499,15 @@ char text_keyword[800];
|
|||||||
char text_lang[800];
|
char text_lang[800];
|
||||||
char text_lang_key[800];
|
char text_lang_key[800];
|
||||||
#endif
|
#endif
|
||||||
|
#if (PNG_LIBPNG_VER < 10009)
|
||||||
|
#undef PNG_iCCP_SUPPORTED
|
||||||
|
#endif
|
||||||
|
#ifdef PNG_iCCP_SUPPORTED
|
||||||
|
int iccp_length = 0;
|
||||||
|
char *iccp_text;
|
||||||
|
char *iccp_file;
|
||||||
|
char iccp_name[80];
|
||||||
|
#endif
|
||||||
int best;
|
int best;
|
||||||
|
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
@@ -498,8 +541,10 @@ static int verbose=1;
|
|||||||
static int help=0;
|
static int help=0;
|
||||||
static int fix=0;
|
static int fix=0;
|
||||||
static int things_have_changed=0;
|
static int things_have_changed=0;
|
||||||
|
static int global_things_have_changed=0;
|
||||||
static int default_compression_window=15;
|
static int default_compression_window=15;
|
||||||
static int force_compression_window=0;
|
static int force_compression_window=0;
|
||||||
|
static int compression_mem_level=9;
|
||||||
static int final_method=0;
|
static int final_method=0;
|
||||||
static int brute_force=0;
|
static int brute_force=0;
|
||||||
static int brute_force_level=0;
|
static int brute_force_level=0;
|
||||||
@@ -562,6 +607,7 @@ static png_infop write_end_info_ptr;
|
|||||||
static FILE *fpin, *fpout;
|
static FILE *fpin, *fpout;
|
||||||
png_uint_32 measure_idats(FILE *fpin);
|
png_uint_32 measure_idats(FILE *fpin);
|
||||||
static int do_color_count;
|
static int do_color_count;
|
||||||
|
static int reduction_ok=0;
|
||||||
#ifdef PNGCRUSH_COUNT_COLORS
|
#ifdef PNGCRUSH_COUNT_COLORS
|
||||||
int count_colors(FILE *fpin);
|
int count_colors(FILE *fpin);
|
||||||
static int num_rgba, reduce_to_gray, it_is_opaque;
|
static int num_rgba, reduce_to_gray, it_is_opaque;
|
||||||
@@ -571,11 +617,15 @@ png_uint_32 png_measure_idat(png_structp png_ptr);
|
|||||||
# define MAX_METHODSP1 201
|
# define MAX_METHODSP1 201
|
||||||
# define DEFAULT_METHODS 10
|
# define DEFAULT_METHODS 10
|
||||||
static png_uint_32 idat_length[MAX_METHODSP1];
|
static png_uint_32 idat_length[MAX_METHODSP1];
|
||||||
static int filter_method, zlib_level;
|
static int filter_type, zlib_level;
|
||||||
static png_bytep png_row_filters=NULL;
|
static png_bytep png_row_filters=NULL;
|
||||||
static TIME_T t_start, t_stop, t_decode, t_encode, t_misc;
|
static TIME_T t_start, t_stop, t_decode, t_encode, t_misc;
|
||||||
|
|
||||||
|
#if (PNG_LIBPNG_VER >= 10000)
|
||||||
|
static png_uint_32 max_idat_size = 524288;
|
||||||
|
#else
|
||||||
static png_uint_32 max_idat_size = PNG_ZBUF_SIZE;
|
static png_uint_32 max_idat_size = PNG_ZBUF_SIZE;
|
||||||
|
#endif
|
||||||
static png_uint_32 crushed_idat_size = 0x3ffffffL;
|
static png_uint_32 crushed_idat_size = 0x3ffffffL;
|
||||||
static int already_crushed = 0;
|
static int already_crushed = 0;
|
||||||
int ia;
|
int ia;
|
||||||
@@ -622,8 +672,8 @@ png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size)
|
|||||||
png_free(png_ptr, png_ptr->zbuf); png_ptr->zbuf=NULL;
|
png_free(png_ptr, png_ptr->zbuf); png_ptr->zbuf=NULL;
|
||||||
png_ptr->zbuf_size = (png_size_t)size;
|
png_ptr->zbuf_size = (png_size_t)size;
|
||||||
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size);
|
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size);
|
||||||
if(png_ptr->zbuf)
|
if(!png_ptr->zbuf)
|
||||||
png_error("Unable to malloc zbuf");
|
png_error(png_ptr,"Unable to malloc zbuf");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
@@ -1096,7 +1146,7 @@ main(int argc, char *argv[])
|
|||||||
else if(!strncmp(argv[i],"-dou",4))
|
else if(!strncmp(argv[i],"-dou",4))
|
||||||
{
|
{
|
||||||
double_gamma++;
|
double_gamma++;
|
||||||
things_have_changed=1;
|
global_things_have_changed=1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if(!strncmp(argv[i],"-d",2))
|
else if(!strncmp(argv[i],"-d",2))
|
||||||
@@ -1114,7 +1164,7 @@ main(int argc, char *argv[])
|
|||||||
extension= argv[names++];
|
extension= argv[names++];
|
||||||
}
|
}
|
||||||
else if(!strncmp(argv[i],"-force",6))
|
else if(!strncmp(argv[i],"-force",6))
|
||||||
things_have_changed=1;
|
global_things_have_changed=1;
|
||||||
else if(!strncmp(argv[i],"-fix",4))
|
else if(!strncmp(argv[i],"-fix",4))
|
||||||
fix++;
|
fix++;
|
||||||
else if(!strncmp(argv[i],"-f",2))
|
else if(!strncmp(argv[i],"-f",2))
|
||||||
@@ -1231,12 +1281,46 @@ main(int argc, char *argv[])
|
|||||||
help++;
|
help++;
|
||||||
verbose++;
|
verbose++;
|
||||||
}
|
}
|
||||||
|
else if(!strncmp(argv[i],"-iccp",5))
|
||||||
|
{
|
||||||
|
#ifdef PNG_iCCP_SUPPORTED
|
||||||
|
FILE *iccp_fn;
|
||||||
|
if(iccp_length)
|
||||||
|
free(iccp_text);
|
||||||
|
iccp_length=atoi(argv[++i]);
|
||||||
|
names+=3;
|
||||||
|
strcpy(iccp_name,argv[++i]);
|
||||||
|
iccp_file=argv[++i];
|
||||||
|
if ((iccp_fn = FOPEN(iccp_file, "rb")) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(STDERR, "Could not find file: %s\n", iccp_file);
|
||||||
|
iccp_length=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int ic;
|
||||||
|
iccp_text=malloc(iccp_length+1);
|
||||||
|
iccp_text[iccp_length]=(char)0x00;
|
||||||
|
for (ic=0; ic<iccp_length; ic++)
|
||||||
|
{
|
||||||
|
png_size_t num_in;
|
||||||
|
num_in = fread(buffer, 1, 1, iccp_fn);
|
||||||
|
if (!num_in)
|
||||||
|
break;
|
||||||
|
iccp_text[ic]=buffer[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
names+=3;
|
||||||
|
i+=3;
|
||||||
|
fprintf(STDERR, "libpng-1.0.9 or later is required to support iCCP.\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
else if(!strncmp(argv[i],"-max",4))
|
else if(!strncmp(argv[i],"-max",4))
|
||||||
{
|
{
|
||||||
names++;
|
names++;
|
||||||
BUMP_I;
|
BUMP_I;
|
||||||
max_idat_size = (png_uint_32)atoi(argv[i]);
|
max_idat_size = (png_uint_32)atoi(argv[i]);
|
||||||
if (max_idat_size > PNG_ZBUF_SIZE) max_idat_size=PNG_ZBUF_SIZE;
|
|
||||||
}
|
}
|
||||||
else if(!strncmp(argv[i],"-m",2))
|
else if(!strncmp(argv[i],"-m",2))
|
||||||
{
|
{
|
||||||
@@ -1269,7 +1353,7 @@ main(int argc, char *argv[])
|
|||||||
do_pplt++;
|
do_pplt++;
|
||||||
BUMP_I;
|
BUMP_I;
|
||||||
strcpy(pplt_string,argv[i]);
|
strcpy(pplt_string,argv[i]);
|
||||||
things_have_changed=1;
|
global_things_have_changed=1;
|
||||||
}
|
}
|
||||||
else if(!strncmp(argv[i],"-p",2))
|
else if(!strncmp(argv[i],"-p",2))
|
||||||
{
|
{
|
||||||
@@ -1277,6 +1361,10 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else if(!strncmp(argv[i],"-q",2))
|
else if(!strncmp(argv[i],"-q",2))
|
||||||
verbose=0;
|
verbose=0;
|
||||||
|
else if(!strncmp(argv[i],"-reduce",7))
|
||||||
|
{
|
||||||
|
reduction_ok++;
|
||||||
|
}
|
||||||
#ifdef PNG_gAMA_SUPPORTED
|
#ifdef PNG_gAMA_SUPPORTED
|
||||||
else if(!strncmp(argv[i],"-rep",4))
|
else if(!strncmp(argv[i],"-rep",4))
|
||||||
{
|
{
|
||||||
@@ -1309,7 +1397,7 @@ main(int argc, char *argv[])
|
|||||||
force_specified_gamma=atof(argv[i]);
|
force_specified_gamma=atof(argv[i]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
things_have_changed=1;
|
global_things_have_changed=1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_pHYs_SUPPORTED
|
#ifdef PNG_pHYs_SUPPORTED
|
||||||
@@ -1318,6 +1406,7 @@ main(int argc, char *argv[])
|
|||||||
names++;
|
names++;
|
||||||
BUMP_I;
|
BUMP_I;
|
||||||
resolution=atoi(argv[i]);
|
resolution=atoi(argv[i]);
|
||||||
|
global_things_have_changed=1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNGCRUSH_MULTIPLE_ROWS
|
#ifdef PNGCRUSH_MULTIPLE_ROWS
|
||||||
@@ -1448,11 +1537,14 @@ main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
else if(!strncmp(argv[i],"-version",8))
|
else if(!strncmp(argv[i],"-version",8))
|
||||||
{
|
{
|
||||||
fprintf(STDERR,"libpng ");
|
fprintf(STDERR, " pngcrush ");
|
||||||
|
fprintf(STDERR, PNGCRUSH_VERSION );
|
||||||
|
fprintf(STDERR,", uses libpng ");
|
||||||
fprintf(STDERR, PNG_LIBPNG_VER_STRING );
|
fprintf(STDERR, PNG_LIBPNG_VER_STRING );
|
||||||
fprintf(STDERR,", uses zlib ");
|
fprintf(STDERR,"and zlib ");
|
||||||
fprintf(STDERR, ZLIB_VERSION );
|
fprintf(STDERR, ZLIB_VERSION );
|
||||||
fprintf(STDERR,"\n");
|
fprintf(STDERR, "\n Check http://pmt.sourceforge.net\n");
|
||||||
|
fprintf(STDERR, " for the most recent version.\n");
|
||||||
}
|
}
|
||||||
else if(!strncmp(argv[i],"-v",2))
|
else if(!strncmp(argv[i],"-v",2))
|
||||||
{
|
{
|
||||||
@@ -1464,6 +1556,11 @@ main(int argc, char *argv[])
|
|||||||
force_compression_window++;
|
force_compression_window++;
|
||||||
names++;
|
names++;
|
||||||
}
|
}
|
||||||
|
else if(!strncmp(argv[i],"-zm",3))
|
||||||
|
{
|
||||||
|
compression_mem_level=atoi(argv[++i]);
|
||||||
|
names++;
|
||||||
|
}
|
||||||
else if(!strncmp(argv[i],"-z",2))
|
else if(!strncmp(argv[i],"-z",2))
|
||||||
{
|
{
|
||||||
int lev, strat, filt;
|
int lev, strat, filt;
|
||||||
@@ -1593,7 +1690,12 @@ main(int argc, char *argv[])
|
|||||||
if(verbose > 1)
|
if(verbose > 1)
|
||||||
{
|
{
|
||||||
png_crush_pause();
|
png_crush_pause();
|
||||||
fprintf(STDERR, "\noptions:\n");
|
fprintf(STDERR,
|
||||||
|
"\noptions (Note: any option can be spelled out for clarity, e.g.,\n");
|
||||||
|
fprintf(STDERR,
|
||||||
|
" \"pngcrush -dir New -method 7 -remove bkgd *.png\"\n");
|
||||||
|
fprintf(STDERR,
|
||||||
|
" is the same as \"pngcrush -d New -m 7 -rem bkgd *.png\"):\n\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fprintf(STDERR, "options:\n");
|
fprintf(STDERR, "options:\n");
|
||||||
@@ -1604,7 +1706,11 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
"\n If file has an IDAT greater than this size, it\n");
|
"\n If file has an IDAT greater than this size, it\n");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" will be considered to be already crushed.\n\n");
|
" will be considered to be already crushed and will\n");
|
||||||
|
fprintf(STDERR,
|
||||||
|
" not be processed, unless you are making other changes\n");
|
||||||
|
fprintf(STDERR,
|
||||||
|
" or the \"-force\" option is present.\n\n");
|
||||||
}
|
}
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -brute (Use brute-force, try 114 different methods [11-124])\n");
|
" -brute (Use brute-force, try 114 different methods [11-124])\n");
|
||||||
@@ -1722,6 +1828,16 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" gAMA chunk, use the '-replace_gamma' option.\n\n");
|
" gAMA chunk, use the '-replace_gamma' option.\n\n");
|
||||||
png_crush_pause();
|
png_crush_pause();
|
||||||
|
#ifdef PNG_iCCP_SUPPORTED
|
||||||
|
fprintf(STDERR,
|
||||||
|
" -iccp length \"Profile Name\" iccp_file\n");
|
||||||
|
if(verbose > 1)
|
||||||
|
{
|
||||||
|
fprintf(STDERR,
|
||||||
|
"\n file with ICC profile to insert in an iCCP chunk.");
|
||||||
|
fprintf(STDERR, "\n\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#ifdef PNG_iTXt_SUPPORTED
|
#ifdef PNG_iTXt_SUPPORTED
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -itxt b[efore_IDAT]|a[fter_IDAT] \"keyword\" \"text\"\n");
|
" -itxt b[efore_IDAT]|a[fter_IDAT] \"keyword\" \"text\"\n");
|
||||||
@@ -1763,7 +1879,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -max maximum_IDAT_size [1 through %d]\n",PNG_ZBUF_SIZE);
|
" -max maximum_IDAT_size [default %d]\n",PNG_ZBUF_SIZE);
|
||||||
if(verbose > 1)
|
if(verbose > 1)
|
||||||
fprintf(STDERR,"\n");
|
fprintf(STDERR,"\n");
|
||||||
#if 0
|
#if 0
|
||||||
@@ -1791,13 +1907,18 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
"\n Truncates the PLTE. Be sure not to truncate it to\n");
|
"\n Truncates the PLTE. Be sure not to truncate it to\n");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
"\n less than the greatest index present in IDAT.\n\n");
|
" less than the greatest index present in IDAT.\n\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -q (quiet)\n");
|
" -q (quiet)\n");
|
||||||
if(verbose > 1)
|
if(verbose > 1)
|
||||||
fprintf(STDERR,"\n");
|
fprintf(STDERR,"\n");
|
||||||
|
fprintf(STDERR,
|
||||||
|
" -reduce (do lossless color type or bit depth reduction)\n");
|
||||||
|
if(verbose > 1)
|
||||||
|
fprintf(STDERR,
|
||||||
|
"\n (if possible)\n\n");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -rem chunkname (or \"alla\" or \"allb\")\n");
|
" -rem chunkname (or \"alla\" or \"allb\")\n");
|
||||||
if(verbose > 1)
|
if(verbose > 1)
|
||||||
@@ -1890,7 +2011,6 @@ main(int argc, char *argv[])
|
|||||||
" color type, scaled to the output bit depth.\n\n");
|
" color type, scaled to the output bit depth.\n\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -v (display more detailed information)\n");
|
" -v (display more detailed information)\n");
|
||||||
if(verbose > 1)
|
if(verbose > 1)
|
||||||
@@ -1899,7 +2019,12 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -version (display the pngcrush version)\n");
|
" -version (display the pngcrush version)\n");
|
||||||
if(verbose > 1)
|
if(verbose > 1)
|
||||||
fprintf(STDERR,"\n");
|
{
|
||||||
|
fprintf(STDERR,
|
||||||
|
"\n Look for the most recent version of pngcrush at\n");
|
||||||
|
fprintf(STDERR,
|
||||||
|
" http://pmt.sourceforge.net\n\n");
|
||||||
|
}
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -w compression_window_size [32, 16, 8, 4, 2, 1, 512]\n");
|
" -w compression_window_size [32, 16, 8, 4, 2, 1, 512]\n");
|
||||||
if(verbose > 1)
|
if(verbose > 1)
|
||||||
@@ -1923,6 +2048,10 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" '-m method' argument.\n\n");
|
" '-m method' argument.\n\n");
|
||||||
}
|
}
|
||||||
|
fprintf(STDERR,
|
||||||
|
" -zmem zlib_compression_mem_level [1-9, default 9]\n");
|
||||||
|
if(verbose > 1)
|
||||||
|
fprintf(STDERR,"\n");
|
||||||
#ifdef PNG_iTXt_SUPPORTED
|
#ifdef PNG_iTXt_SUPPORTED
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" -zitxt b[efore_IDAT]|a[fter_IDAT] \"keyword\" \"text\"\n");
|
" -zitxt b[efore_IDAT]|a[fter_IDAT] \"keyword\" \"text\"\n");
|
||||||
@@ -2013,6 +2142,8 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
first_trial = 1;
|
first_trial = 1;
|
||||||
|
|
||||||
|
things_have_changed=global_things_have_changed;
|
||||||
|
|
||||||
if(png_row_filters != NULL)
|
if(png_row_filters != NULL)
|
||||||
{
|
{
|
||||||
free(png_row_filters); png_row_filters=NULL;
|
free(png_row_filters); png_row_filters=NULL;
|
||||||
@@ -2121,7 +2252,7 @@ main(int argc, char *argv[])
|
|||||||
if(already_crushed)
|
if(already_crushed)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "File has already been crushed: %s\n", inname);
|
fprintf(STDERR, "File has already been crushed: %s\n", inname);
|
||||||
continue;
|
if(!things_have_changed) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(verbose > 0)
|
if(verbose > 0)
|
||||||
@@ -2142,6 +2273,7 @@ main(int argc, char *argv[])
|
|||||||
if (do_color_count)
|
if (do_color_count)
|
||||||
{
|
{
|
||||||
if (force_output_color_type == 8 && (input_color_type == 2 ||
|
if (force_output_color_type == 8 && (input_color_type == 2 ||
|
||||||
|
(input_color_type == 3) ||
|
||||||
input_color_type == 4 || input_color_type == 6))
|
input_color_type == 4 || input_color_type == 6))
|
||||||
/* check for unused alpha channel or single transparent color */
|
/* check for unused alpha channel or single transparent color */
|
||||||
{
|
{
|
||||||
@@ -2298,7 +2430,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
filter_method=fm[best];
|
filter_type=fm[best];
|
||||||
zlib_level=lv[best];
|
zlib_level=lv[best];
|
||||||
if(zs[best] == 0)z_strategy=Z_DEFAULT_STRATEGY;
|
if(zs[best] == 0)z_strategy=Z_DEFAULT_STRATEGY;
|
||||||
if(zs[best] == 1)z_strategy=Z_FILTERED;
|
if(zs[best] == 1)z_strategy=Z_FILTERED;
|
||||||
@@ -2317,7 +2449,7 @@ main(int argc, char *argv[])
|
|||||||
if((trial == 6 || trial == 9 || trial == 10) && best_of_three != 3)
|
if((trial == 6 || trial == 9 || trial == 10) && best_of_three != 3)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
filter_method=fm[trial];
|
filter_type=fm[trial];
|
||||||
zlib_level=lv[trial];
|
zlib_level=lv[trial];
|
||||||
if(zs[trial] == 0)z_strategy=Z_DEFAULT_STRATEGY;
|
if(zs[trial] == 0)z_strategy=Z_DEFAULT_STRATEGY;
|
||||||
if(zs[trial] == 1)z_strategy=Z_FILTERED;
|
if(zs[trial] == 1)z_strategy=Z_FILTERED;
|
||||||
@@ -2325,7 +2457,7 @@ main(int argc, char *argv[])
|
|||||||
final_method=trial;
|
final_method=trial;
|
||||||
if(nosave == 0)
|
if(nosave == 0)
|
||||||
P2(" Begin trial %d, filter %d, strategy %d, level %d\n",
|
P2(" Begin trial %d, filter %d, strategy %d, level %d\n",
|
||||||
trial, filter_method, z_strategy, zlib_level);
|
trial, filter_type, z_strategy, zlib_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
P2("prepare to open files.\n");
|
P2("prepare to open files.\n");
|
||||||
@@ -2463,7 +2595,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if(nosave == 0)
|
if(nosave == 0)
|
||||||
{
|
{
|
||||||
if(png_get_compression_buffer_size(write_ptr) < max_idat_size)
|
if(png_get_compression_buffer_size(write_ptr) != max_idat_size)
|
||||||
{
|
{
|
||||||
P2("reinitializing write zbuf.\n");
|
P2("reinitializing write zbuf.\n");
|
||||||
png_set_compression_buffer_size(write_ptr, max_idat_size);
|
png_set_compression_buffer_size(write_ptr, max_idat_size);
|
||||||
@@ -2511,6 +2643,9 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_IF_SAFE,
|
png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_IF_SAFE,
|
||||||
(png_bytep)NULL, 0);
|
(png_bytep)NULL, 0);
|
||||||
|
|
||||||
|
/* Process the following chunks as if safe-to-copy since it is known that
|
||||||
|
recompressing the IDAT chunks has no effect on them */
|
||||||
#if !defined(PNG_cHRM_SUPPORTED)
|
#if !defined(PNG_cHRM_SUPPORTED)
|
||||||
png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
|
png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_ALWAYS,
|
||||||
(png_bytep)png_cHRM, 1);
|
(png_bytep)png_cHRM, 1);
|
||||||
@@ -2593,30 +2728,44 @@ main(int argc, char *argv[])
|
|||||||
#endif /* PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED */
|
#endif /* PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED */
|
||||||
|
|
||||||
png_debug(0, "Reading info struct\n");
|
png_debug(0, "Reading info struct\n");
|
||||||
|
{
|
||||||
|
png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
||||||
|
|
||||||
|
png_read_data(read_ptr, png_signature, 8);
|
||||||
|
png_set_sig_bytes(read_ptr, 8);
|
||||||
|
|
||||||
|
if (png_sig_cmp(png_signature, 0, 8))
|
||||||
|
{
|
||||||
|
if (png_sig_cmp(png_signature, 0, 4))
|
||||||
|
png_error(read_ptr, "Not a PNG file!");
|
||||||
|
else
|
||||||
|
png_error(read_ptr, "PNG file corrupted by ASCII conversion");
|
||||||
|
}
|
||||||
|
}
|
||||||
png_read_info(read_ptr, read_info_ptr);
|
png_read_info(read_ptr, read_info_ptr);
|
||||||
|
|
||||||
#if (PNG_LIBPNG_VER > 90)
|
#if (PNG_LIBPNG_VER > 90)
|
||||||
png_debug(0, "Transferring info struct\n");
|
png_debug(0, "Transferring info struct\n");
|
||||||
{
|
{
|
||||||
int interlace_type, compression_type, filter_type;
|
int interlace_method, compression_method, filter_method;
|
||||||
|
|
||||||
if (png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,
|
if (png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,
|
||||||
&color_type, &interlace_type, &compression_type, &filter_type))
|
&color_type, &interlace_method, &compression_method, &filter_method))
|
||||||
{
|
{
|
||||||
int compression_window;
|
int compression_window;
|
||||||
int need_expand = 0;
|
int need_expand = 0;
|
||||||
int output_interlace_type=interlace_type;
|
int output_interlace_method=interlace_method;
|
||||||
input_color_type=color_type;
|
input_color_type=color_type;
|
||||||
input_bit_depth=bit_depth;
|
input_bit_depth=bit_depth;
|
||||||
if(nointerlace)
|
if(nointerlace)
|
||||||
output_interlace_type=0;
|
output_interlace_method=0;
|
||||||
if(verbose > 1 && first_trial)
|
if(verbose > 1 && first_trial)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, " IHDR chunk data:\n");
|
fprintf(STDERR, " IHDR chunk data:\n");
|
||||||
fprintf(STDERR, " Width=%ld, height=%ld\n", width, height);
|
fprintf(STDERR, " Width=%ld, height=%ld\n", width, height);
|
||||||
fprintf(STDERR, " Bit depth =%d\n", bit_depth);
|
fprintf(STDERR, " Bit depth =%d\n", bit_depth);
|
||||||
fprintf(STDERR, " Color type=%d\n", color_type);
|
fprintf(STDERR, " Color type=%d\n", color_type);
|
||||||
fprintf(STDERR, " Interlace =%d\n", interlace_type);
|
fprintf(STDERR, " Interlace =%d\n", interlace_method);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(output_color_type > 7)
|
if(output_color_type > 7)
|
||||||
@@ -2720,6 +2869,7 @@ main(int argc, char *argv[])
|
|||||||
int channels=0;
|
int channels=0;
|
||||||
|
|
||||||
png_set_compression_strategy(write_ptr, z_strategy);
|
png_set_compression_strategy(write_ptr, z_strategy);
|
||||||
|
png_set_compression_mem_level(write_ptr, compression_mem_level);
|
||||||
|
|
||||||
if (output_color_type == 0)channels=1;
|
if (output_color_type == 0)channels=1;
|
||||||
if (output_color_type == 2)channels=3;
|
if (output_color_type == 2)channels=3;
|
||||||
@@ -2757,10 +2907,10 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR, " Setting IHDR\n");
|
fprintf(STDERR, " Setting IHDR\n");
|
||||||
|
|
||||||
png_set_IHDR(write_ptr, write_info_ptr, width, height,
|
png_set_IHDR(write_ptr, write_info_ptr, width, height,
|
||||||
output_bit_depth, output_color_type, output_interlace_type,
|
output_bit_depth, output_color_type, output_interlace_method,
|
||||||
compression_type, filter_type);
|
compression_method, filter_method);
|
||||||
|
|
||||||
if(output_color_type != input_color_type) things_have_changed++;
|
if(output_color_type != input_color_type) things_have_changed=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(PNG_READ_bKGD_SUPPORTED) && defined(PNG_WRITE_bKGD_SUPPORTED)
|
#if defined(PNG_READ_bKGD_SUPPORTED) && defined(PNG_WRITE_bKGD_SUPPORTED)
|
||||||
@@ -2953,15 +3103,26 @@ main(int argc, char *argv[])
|
|||||||
png_charp name;
|
png_charp name;
|
||||||
png_charp profile;
|
png_charp profile;
|
||||||
png_uint_32 proflen;
|
png_uint_32 proflen;
|
||||||
int compression_type;
|
int compression_method;
|
||||||
|
|
||||||
if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,
|
if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_method,
|
||||||
&profile, &proflen))
|
&profile, &proflen))
|
||||||
{
|
{
|
||||||
|
P1 ("Got iccp chunk, proflen=%lu\n",proflen);
|
||||||
if(keep_chunk("iCCP",argv))
|
if(keep_chunk("iCCP",argv))
|
||||||
png_set_iCCP(write_ptr, write_info_ptr, name, compression_type,
|
png_set_iCCP(write_ptr, write_info_ptr, name, compression_method,
|
||||||
profile, proflen);
|
profile, proflen);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#ifdef PNG_iCCP_SUPPORTED
|
||||||
|
else if (iccp_length)
|
||||||
|
{
|
||||||
|
png_set_iCCP(write_ptr, write_info_ptr, iccp_name, 0,
|
||||||
|
iccp_text, iccp_length);
|
||||||
|
P1 ("Wrote iccp chunk, proflen=%d\n",iccp_length);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(PNG_READ_oFFs_SUPPORTED) && defined(PNG_WRITE_oFFs_SUPPORTED)
|
#if defined(PNG_READ_oFFs_SUPPORTED) && defined(PNG_WRITE_oFFs_SUPPORTED)
|
||||||
@@ -3014,9 +3175,17 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
if (png_get_pHYs(read_ptr, read_info_ptr, &res_x, &res_y,
|
if (png_get_pHYs(read_ptr, read_info_ptr, &res_x, &res_y,
|
||||||
&unit_type))
|
&unit_type))
|
||||||
|
{
|
||||||
|
if(res_x == 0 && res_y == 0)
|
||||||
|
{
|
||||||
|
if(verbose > 0 && first_trial)
|
||||||
|
fprintf(STDERR, " Deleting useless pHYs 0 0 chunk\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if(keep_chunk("pHYs",argv))
|
if(keep_chunk("pHYs",argv))
|
||||||
png_set_pHYs(write_ptr, write_info_ptr, res_x, res_y, unit_type);
|
png_set_pHYs(write_ptr, write_info_ptr, res_x, res_y, unit_type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -3366,12 +3535,12 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
png_set_compression_level(write_ptr, zlib_level);
|
png_set_compression_level(write_ptr, zlib_level);
|
||||||
|
|
||||||
if (filter_method == 0)png_set_filter(write_ptr,0,PNG_FILTER_NONE);
|
if (filter_type == 0)png_set_filter(write_ptr,0,PNG_FILTER_NONE);
|
||||||
else if(filter_method == 1)png_set_filter(write_ptr,0,PNG_FILTER_SUB);
|
else if(filter_type == 1)png_set_filter(write_ptr,0,PNG_FILTER_SUB);
|
||||||
else if(filter_method == 2)png_set_filter(write_ptr,0,PNG_FILTER_UP);
|
else if(filter_type == 2)png_set_filter(write_ptr,0,PNG_FILTER_UP);
|
||||||
else if(filter_method == 3)png_set_filter(write_ptr,0,PNG_FILTER_AVG);
|
else if(filter_type == 3)png_set_filter(write_ptr,0,PNG_FILTER_AVG);
|
||||||
else if(filter_method == 4)png_set_filter(write_ptr,0,PNG_FILTER_PAETH);
|
else if(filter_type == 4)png_set_filter(write_ptr,0,PNG_FILTER_PAETH);
|
||||||
else if(filter_method == 5)png_set_filter(write_ptr,0,PNG_ALL_FILTERS);
|
else if(filter_type == 5)png_set_filter(write_ptr,0,PNG_ALL_FILTERS);
|
||||||
else png_set_filter(write_ptr,0,PNG_FILTER_NONE);
|
else png_set_filter(write_ptr,0,PNG_FILTER_NONE);
|
||||||
|
|
||||||
|
|
||||||
@@ -3464,7 +3633,7 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
{
|
{
|
||||||
/* check for sufficient memory: we need 2*zlib_window
|
/* check for sufficient memory: we need 2*zlib_window
|
||||||
and, if filter_method == 5, 4*rowbytes in separate allocations.
|
and, if filter_type == 5, 4*rowbytes in separate allocations.
|
||||||
If it's not enough we can drop the "average" filter and
|
If it's not enough we can drop the "average" filter and
|
||||||
we can reduce the zlib_window for writing. We can't change
|
we can reduce the zlib_window for writing. We can't change
|
||||||
the input zlib_window because the input file might have
|
the input zlib_window because the input file might have
|
||||||
@@ -3766,6 +3935,8 @@ main(int argc, char *argv[])
|
|||||||
if(nosave)
|
if(nosave)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
first_trial=0;
|
||||||
|
|
||||||
if (nosave == 0)
|
if (nosave == 0)
|
||||||
{
|
{
|
||||||
png_debug(0, "Opening file for length measurement\n");
|
png_debug(0, "Opening file for length measurement\n");
|
||||||
@@ -3789,11 +3960,10 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" IDAT length with method %d (fm %d zl %d zs %d)= %8lu\n",
|
" IDAT length with method %d (fm %d zl %d zs %d)= %8lu\n",
|
||||||
trial,filter_method,zlib_level,z_strategy,idat_length[trial]);
|
trial,filter_type,zlib_level,z_strategy,idat_length[trial]);
|
||||||
fflush(STDERR);
|
fflush(STDERR);
|
||||||
}
|
}
|
||||||
|
|
||||||
first_trial=0;
|
|
||||||
} /* end of trial-loop */
|
} /* end of trial-loop */
|
||||||
|
|
||||||
if (fpin)
|
if (fpin)
|
||||||
@@ -3847,6 +4017,10 @@ main(int argc, char *argv[])
|
|||||||
free(png_row_filters); png_row_filters=NULL;
|
free(png_row_filters); png_row_filters=NULL;
|
||||||
}
|
}
|
||||||
if(verbose > 0) show_result();
|
if(verbose > 0) show_result();
|
||||||
|
#ifdef PNG_iCCP_SUPPORTED
|
||||||
|
if(iccp_length)
|
||||||
|
free(iccp_text);
|
||||||
|
#endif
|
||||||
if(pngcrush_must_exit)
|
if(pngcrush_must_exit)
|
||||||
exit(0);
|
exit(0);
|
||||||
return(0);
|
return(0);
|
||||||
@@ -3874,6 +4048,7 @@ measure_idats(FILE *fpin)
|
|||||||
#else
|
#else
|
||||||
png_set_read_fn(read_ptr, (png_voidp)fpin, png_default_read_data);
|
png_set_read_fn(read_ptr, (png_voidp)fpin, png_default_read_data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
png_set_sig_bytes(read_ptr, 0);
|
png_set_sig_bytes(read_ptr, 0);
|
||||||
measured_idat_length=png_measure_idat(read_ptr);
|
measured_idat_length=png_measure_idat(read_ptr);
|
||||||
P2("measure_idats: IDAT length=%lu\n",measured_idat_length);
|
P2("measure_idats: IDAT length=%lu\n",measured_idat_length);
|
||||||
@@ -3898,7 +4073,6 @@ png_measure_idat(png_structp png_ptr)
|
|||||||
/* Copyright (C) 1999, 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
|
/* Copyright (C) 1999, 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
|
||||||
See notice in pngcrush.c for conditions of use and distribution */
|
See notice in pngcrush.c for conditions of use and distribution */
|
||||||
png_uint_32 sum_idat_length=0;
|
png_uint_32 sum_idat_length=0;
|
||||||
png_debug(1, "in png_read_info\n");
|
|
||||||
|
|
||||||
{
|
{
|
||||||
png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
||||||
@@ -3909,7 +4083,7 @@ png_measure_idat(png_structp png_ptr)
|
|||||||
if (png_sig_cmp(png_signature, 0, 8))
|
if (png_sig_cmp(png_signature, 0, 8))
|
||||||
{
|
{
|
||||||
if (png_sig_cmp(png_signature, 0, 4))
|
if (png_sig_cmp(png_signature, 0, 4))
|
||||||
png_error(png_ptr, "Not a PNG file");
|
png_error(png_ptr, "Not a PNG file..");
|
||||||
else
|
else
|
||||||
png_error(png_ptr, "PNG file corrupted by ASCII conversion");
|
png_error(png_ptr, "PNG file corrupted by ASCII conversion");
|
||||||
}
|
}
|
||||||
@@ -3927,7 +4101,11 @@ png_measure_idat(png_structp png_ptr)
|
|||||||
PNG_IDAT;
|
PNG_IDAT;
|
||||||
PNG_IEND;
|
PNG_IEND;
|
||||||
PNG_IHDR;
|
PNG_IHDR;
|
||||||
|
#ifdef PNG_iCCP_SUPPORTED
|
||||||
PNG_iCCP;
|
PNG_iCCP;
|
||||||
|
#else
|
||||||
|
const png_byte png_iCCP[5]={105, 67, 67, 80, '\0'};
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
png_byte chunk_name[5];
|
png_byte chunk_name[5];
|
||||||
@@ -3970,6 +4148,7 @@ png_measure_idat(png_structp png_ptr)
|
|||||||
input_color_type=buffer[9];
|
input_color_type=buffer[9];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_iCCP_SUPPORTED
|
||||||
/* check for bad photoshop iccp chunk */
|
/* check for bad photoshop iccp chunk */
|
||||||
#ifdef PNG_UINT_IDAT
|
#ifdef PNG_UINT_IDAT
|
||||||
if (png_get_uint_32(chunk_name) == PNG_UINT_iCCP)
|
if (png_get_uint_32(chunk_name) == PNG_UINT_iCCP)
|
||||||
@@ -3977,6 +4156,12 @@ png_measure_idat(png_structp png_ptr)
|
|||||||
if (!png_memcmp(chunk_name, png_iCCP, 4))
|
if (!png_memcmp(chunk_name, png_iCCP, 4))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
/* Check for bad Photoshop iCCP chunk. Libpng will reject the
|
||||||
|
* bad chunk because the Adler-32 bytes are missing, but we check
|
||||||
|
* here to see if it's really the sRGB profile, and if so, set the
|
||||||
|
* "intent" flag and gamma so pngcrush will write an sRGB chunk
|
||||||
|
* and a gamma chunk.
|
||||||
|
*/
|
||||||
if (length == 2615)
|
if (length == 2615)
|
||||||
{
|
{
|
||||||
png_crc_read(png_ptr, buffer, 22);
|
png_crc_read(png_ptr, buffer, 22);
|
||||||
@@ -3997,6 +4182,7 @@ png_measure_idat(png_structp png_ptr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
|
|
||||||
@@ -4016,8 +4202,9 @@ count_colors(FILE *fpin)
|
|||||||
{
|
{
|
||||||
/* Copyright (C) 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
|
/* Copyright (C) 2000 Glenn Randers-Pehrson (randeg@alum.rpi.edu)
|
||||||
See notice in pngcrush.c for conditions of use and distribution */
|
See notice in pngcrush.c for conditions of use and distribution */
|
||||||
int bit_depth, color_type, interlace_type, filter_type, compression_type;
|
int bit_depth, color_type, interlace_method, filter_method, compression_method;
|
||||||
png_uint_32 rowbytes, channels;
|
png_uint_32 rowbytes;
|
||||||
|
volatile png_uint_32 channels;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
int pass, num_pass;
|
int pass, num_pass;
|
||||||
@@ -4025,6 +4212,7 @@ count_colors(FILE *fpin)
|
|||||||
volatile int result, hashmiss, hashinserts;
|
volatile int result, hashmiss, hashinserts;
|
||||||
|
|
||||||
png_uint_32 rgba_frequency[257];
|
png_uint_32 rgba_frequency[257];
|
||||||
|
|
||||||
png_uint_32 rgba_hi[257]; /* Actually contains ARGB not RGBA */
|
png_uint_32 rgba_hi[257]; /* Actually contains ARGB not RGBA */
|
||||||
#if 0
|
#if 0
|
||||||
png_uint_32 rgba_lo[257]; /* Low bytes of ARGB in 16-bit PNGs */
|
png_uint_32 rgba_lo[257]; /* Low bytes of ARGB in 16-bit PNGs */
|
||||||
@@ -4053,7 +4241,9 @@ count_colors(FILE *fpin)
|
|||||||
|
|
||||||
num_rgba=0;
|
num_rgba=0;
|
||||||
for (i=0; i<257; i++)
|
for (i=0; i<257; i++)
|
||||||
|
{
|
||||||
rgba_frequency[i]=0;
|
rgba_frequency[i]=0;
|
||||||
|
}
|
||||||
|
|
||||||
P2("Checking alphas:\n");
|
P2("Checking alphas:\n");
|
||||||
png_debug(0, "Allocating read structure\n");
|
png_debug(0, "Allocating read structure\n");
|
||||||
@@ -4075,10 +4265,12 @@ count_colors(FILE *fpin)
|
|||||||
|
|
||||||
#ifdef USE_HASHCODE
|
#ifdef USE_HASHCODE
|
||||||
int hash[16385];
|
int hash[16385];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_HASHCODE
|
||||||
for (i=0; i<16385; i++)
|
for (i=0; i<16385; i++)
|
||||||
hash[i]=-1;
|
hash[i]=-1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
end_info_ptr = NULL;
|
end_info_ptr = NULL;
|
||||||
|
|
||||||
#if !defined(PNG_NO_STDIO)
|
#if !defined(PNG_NO_STDIO)
|
||||||
@@ -4087,6 +4279,20 @@ count_colors(FILE *fpin)
|
|||||||
png_set_read_fn(read_ptr, (png_voidp)fpin, png_default_read_data);
|
png_set_read_fn(read_ptr, (png_voidp)fpin, png_default_read_data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
||||||
|
|
||||||
|
png_read_data(read_ptr, png_signature, 8);
|
||||||
|
png_set_sig_bytes(read_ptr, 8);
|
||||||
|
|
||||||
|
if (png_sig_cmp(png_signature, 0, 8))
|
||||||
|
{
|
||||||
|
if (png_sig_cmp(png_signature, 0, 4))
|
||||||
|
png_error(read_ptr, "Not a PNG file.");
|
||||||
|
else
|
||||||
|
png_error(read_ptr, "PNG file corrupted by ASCII conversion");
|
||||||
|
}
|
||||||
|
}
|
||||||
png_read_info(read_ptr, read_info_ptr);
|
png_read_info(read_ptr, read_info_ptr);
|
||||||
|
|
||||||
#ifdef PNG_CRC_QUIET_USE
|
#ifdef PNG_CRC_QUIET_USE
|
||||||
@@ -4094,7 +4300,7 @@ count_colors(FILE *fpin)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,
|
png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,
|
||||||
&color_type, &interlace_type, &compression_type, &filter_type);
|
&color_type, &interlace_method, &compression_method, &filter_method);
|
||||||
|
|
||||||
if (color_type == 2)
|
if (color_type == 2)
|
||||||
channels = 3;
|
channels = 3;
|
||||||
@@ -4106,11 +4312,11 @@ count_colors(FILE *fpin)
|
|||||||
channels=1;
|
channels=1;
|
||||||
|
|
||||||
if(color_type == 0 || color_type == 3 || color_type == 4)
|
if(color_type == 0 || color_type == 3 || color_type == 4)
|
||||||
reduce_to_gray = 0;
|
reduce_to_gray = 1;
|
||||||
|
|
||||||
if(bit_depth == 8)
|
if(bit_depth == 8)
|
||||||
{
|
{
|
||||||
if(interlace_type)
|
if(interlace_method)
|
||||||
num_pass=7;
|
num_pass=7;
|
||||||
else
|
else
|
||||||
num_pass = 1;
|
num_pass = 1;
|
||||||
@@ -4126,7 +4332,7 @@ count_colors(FILE *fpin)
|
|||||||
png_uint_32 pass_height, pass_width, y;
|
png_uint_32 pass_height, pass_width, y;
|
||||||
png_debug(0, "\nBegin Pass\n");
|
png_debug(0, "\nBegin Pass\n");
|
||||||
|
|
||||||
if (interlace_type)
|
if (interlace_method)
|
||||||
{
|
{
|
||||||
pass_height = (height - png_pass_ystart[pass]
|
pass_height = (height - png_pass_ystart[pass]
|
||||||
+ png_pass_yinc[pass] - 1) / png_pass_yinc[pass];
|
+ png_pass_yinc[pass] - 1) / png_pass_yinc[pass];
|
||||||
@@ -4143,7 +4349,8 @@ count_colors(FILE *fpin)
|
|||||||
{
|
{
|
||||||
png_uint_32 x;
|
png_uint_32 x;
|
||||||
png_read_row(read_ptr, row_buf, (png_bytep)NULL);
|
png_read_row(read_ptr, row_buf, (png_bytep)NULL);
|
||||||
if(result < 2 || it_is_opaque || reduce_to_gray)
|
if(result < 2 || it_is_opaque ||
|
||||||
|
reduce_to_gray)
|
||||||
{
|
{
|
||||||
if(color_type==2)
|
if(color_type==2)
|
||||||
{
|
{
|
||||||
@@ -4160,6 +4367,11 @@ count_colors(FILE *fpin)
|
|||||||
if(reduce_to_gray &&
|
if(reduce_to_gray &&
|
||||||
((*(rp)) != (*(rp+1)) || (*(rp)) != (*(rp+2))))
|
((*(rp)) != (*(rp+1)) || (*(rp)) != (*(rp+2))))
|
||||||
reduce_to_gray=0;
|
reduce_to_gray=0;
|
||||||
|
|
||||||
|
if (result > 1 || !it_is_opaque)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_HASHCODE
|
#ifdef USE_HASHCODE
|
||||||
/*
|
/*
|
||||||
* R G B mask
|
* R G B mask
|
||||||
@@ -4242,6 +4454,9 @@ count_colors(FILE *fpin)
|
|||||||
reduce_to_gray=0;
|
reduce_to_gray=0;
|
||||||
if(it_is_opaque && (*(rp+3)) != 255)
|
if(it_is_opaque && (*(rp+3)) != 255)
|
||||||
it_is_opaque=0;
|
it_is_opaque=0;
|
||||||
|
|
||||||
|
if (result > 1)
|
||||||
|
continue;
|
||||||
#ifdef USE_HASHCODE
|
#ifdef USE_HASHCODE
|
||||||
/*
|
/*
|
||||||
* A R G B mask
|
* A R G B mask
|
||||||
@@ -4384,8 +4599,6 @@ count_colors(FILE *fpin)
|
|||||||
}
|
}
|
||||||
else /* other color type */
|
else /* other color type */
|
||||||
{
|
{
|
||||||
/* to do: check color type 3 for max sample that is present
|
|
||||||
and reduce palette if possible */
|
|
||||||
result=2;
|
result=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4436,14 +4649,30 @@ count_colors(FILE *fpin)
|
|||||||
P2 ("hashcode misses=%d, inserts=%d\n",hashmiss,
|
P2 ("hashcode misses=%d, inserts=%d\n",hashmiss,
|
||||||
hashinserts);
|
hashinserts);
|
||||||
}
|
}
|
||||||
if(reduce_to_gray)
|
|
||||||
P1 ("The truecolor image is all gray and will be reduced.\n");
|
|
||||||
if(color_type == 0 || color_type == 2)
|
if(color_type == 0 || color_type == 2)
|
||||||
it_is_opaque=0;
|
it_is_opaque=0;
|
||||||
if(it_is_opaque)
|
if(reduction_ok)
|
||||||
P1 ("The image is opaque and the alpha channel will be removed.\n");
|
{
|
||||||
|
if(reduce_to_gray)
|
||||||
|
P1 ("The truecolor image is all gray and will be reduced.\n");
|
||||||
|
if(it_is_opaque)
|
||||||
|
P1 ("The image is opaque and the alpha channel will be removed.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(reduce_to_gray)
|
||||||
|
P1 ("The truecolor image is all gray and could be reduced.\n");
|
||||||
|
if(it_is_opaque)
|
||||||
|
P1 ("The image is opaque and the alpha channel could be removed.\n");
|
||||||
|
if (reduce_to_gray || it_is_opaque)
|
||||||
|
P1 ("Rerun pngcrush with the \"-reduce\" option to do so.\n");
|
||||||
|
reduce_to_gray = 0;
|
||||||
|
it_is_opaque = 0;
|
||||||
|
|
||||||
|
}
|
||||||
P2 ("Finished checking alphas, result=%d\n",result);
|
P2 ("Finished checking alphas, result=%d\n",result);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret=result;
|
ret=result;
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
# define PNG_USER_MEM_SUPPORTED
|
# define PNG_USER_MEM_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MNG_EXTENSIONS_SUPPORTED /* extra filter types */
|
||||||
|
|
||||||
#ifndef PNG_NO_LEGACY_SUPPORTED
|
#ifndef PNG_NO_LEGACY_SUPPORTED
|
||||||
# define PNG_NO_LEGACY_SUPPORTED
|
# define PNG_NO_LEGACY_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
|||||||
2546
pnggccrd.c
2546
pnggccrd.c
File diff suppressed because it is too large
Load Diff
2
pngget.c
2
pngget.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngget.c - retrieval of values from info struct
|
/* pngget.c - retrieval of values from info struct
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
|||||||
2
pngmem.c
2
pngmem.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngmem.c - stub functions for memory allocation
|
/* pngmem.c - stub functions for memory allocation
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
|||||||
17
pngpread.c
17
pngpread.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngpread.c - read a png file in push mode
|
/* pngpread.c - read a png file in push mode
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -894,25 +894,25 @@ png_read_push_finish_row(png_structp png_ptr)
|
|||||||
/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
|
/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
|
||||||
|
|
||||||
/* start of interlace block */
|
/* start of interlace block */
|
||||||
const int png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||||
|
|
||||||
/* offset to next interlace block */
|
/* offset to next interlace block */
|
||||||
const int png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||||
|
|
||||||
/* start of interlace block in the y direction */
|
/* start of interlace block in the y direction */
|
||||||
const int png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
|
const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
|
||||||
|
|
||||||
/* offset to next interlace block in the y direction */
|
/* offset to next interlace block in the y direction */
|
||||||
const int png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
|
const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
|
||||||
|
|
||||||
/* Width of interlace block. This is not currently used - if you need
|
/* Width of interlace block. This is not currently used - if you need
|
||||||
* it, uncomment it here and in png.h
|
* it, uncomment it here and in png.h
|
||||||
const int png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Height of interlace block. This is not currently used - if you need
|
/* Height of interlace block. This is not currently used - if you need
|
||||||
* it, uncomment it here and in png.h
|
* it, uncomment it here and in png.h
|
||||||
const int png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
|
const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
|
||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1429,7 +1429,8 @@ png_progressive_combine_row (png_structp png_ptr,
|
|||||||
png_bytep old_row, png_bytep new_row)
|
png_bytep old_row, png_bytep new_row)
|
||||||
{
|
{
|
||||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||||
const int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
|
const int FARDATA png_pass_dsp_mask[7] =
|
||||||
|
{0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
|
||||||
#endif
|
#endif
|
||||||
if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */
|
if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */
|
||||||
png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]);
|
png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -440,6 +440,9 @@ png_read_update_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
/* save jump buffer and error functions */
|
/* save jump buffer and error functions */
|
||||||
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
|
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
|
||||||
png_read_start_row(png_ptr);
|
png_read_start_row(png_ptr);
|
||||||
|
else
|
||||||
|
png_warning(png_ptr,
|
||||||
|
"Ignoring extra png_read_update_info() call; row buffer not reallocated");
|
||||||
png_read_transform_info(png_ptr, info_ptr);
|
png_read_transform_info(png_ptr, info_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -698,7 +701,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
* not called png_set_interlace_handling(), the display_row buffer will
|
* not called png_set_interlace_handling(), the display_row buffer will
|
||||||
* be ignored, so pass NULL to it.
|
* be ignored, so pass NULL to it.
|
||||||
*
|
*
|
||||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.8
|
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9beta2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
@@ -747,7 +750,7 @@ png_read_rows(png_structp png_ptr, png_bytepp row,
|
|||||||
* only call this function once. If you desire to have an image for
|
* only call this function once. If you desire to have an image for
|
||||||
* each pass of a interlaced image, use png_read_rows() instead.
|
* each pass of a interlaced image, use png_read_rows() instead.
|
||||||
*
|
*
|
||||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.8
|
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9beta2
|
||||||
*/
|
*/
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_read_image(png_structp png_ptr, png_bytepp image)
|
png_read_image(png_structp png_ptr, png_bytepp image)
|
||||||
|
|||||||
2
pngrio.c
2
pngrio.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngrio.c - functions for data input
|
/* pngrio.c - functions for data input
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -1090,7 +1090,12 @@ png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
|
|||||||
if ((png_ptr->transformations & PNG_FILLER) &&
|
if ((png_ptr->transformations & PNG_FILLER) &&
|
||||||
((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
|
((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
|
||||||
(info_ptr->color_type == PNG_COLOR_TYPE_GRAY)))
|
(info_ptr->color_type == PNG_COLOR_TYPE_GRAY)))
|
||||||
|
{
|
||||||
info_ptr->channels++;
|
info_ptr->channels++;
|
||||||
|
#if 0 /* if adding a true alpha channel not just filler */
|
||||||
|
info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \
|
#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \
|
||||||
|
|||||||
32
pngrutil.c
32
pngrutil.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngrutil.c - utilities to read a PNG file
|
/* pngrutil.c - utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -976,6 +976,8 @@ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
png_byte compression_type;
|
png_byte compression_type;
|
||||||
png_charp profile;
|
png_charp profile;
|
||||||
png_uint_32 skip = 0;
|
png_uint_32 skip = 0;
|
||||||
|
png_uint_32 profile_size = 0;
|
||||||
|
png_uint_32 profile_length = 0;
|
||||||
png_size_t slength, prefix_length, data_length;
|
png_size_t slength, prefix_length, data_length;
|
||||||
|
|
||||||
png_debug(1, "in png_handle_iCCP\n");
|
png_debug(1, "in png_handle_iCCP\n");
|
||||||
@@ -1027,22 +1029,43 @@ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
/* there should be at least one zero (the compression type byte)
|
/* there should be at least one zero (the compression type byte)
|
||||||
following the separator, and we should be on it */
|
following the separator, and we should be on it */
|
||||||
if (*profile || profile >= chunkdata + slength)
|
if ( profile >= chunkdata + slength)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, chunkdata);
|
png_free(png_ptr, chunkdata);
|
||||||
png_warning(png_ptr, "malformed iCCP chunk");
|
png_warning(png_ptr, "Malformed iCCP chunk");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compression_type should always be zero */
|
/* compression_type should always be zero */
|
||||||
compression_type = *profile++;
|
compression_type = *profile++;
|
||||||
|
if (compression_type)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "Ignoring nonzero compression type in iCCP chunk");
|
||||||
|
compression_type=0x00; /* Reset it to zero (libpng-1.0.6 through 1.0.8
|
||||||
|
wrote nonzero) */
|
||||||
|
}
|
||||||
|
|
||||||
prefix_length = profile - chunkdata;
|
prefix_length = profile - chunkdata;
|
||||||
chunkdata = png_decompress_chunk(png_ptr, compression_type, chunkdata,
|
chunkdata = png_decompress_chunk(png_ptr, compression_type, chunkdata,
|
||||||
slength, prefix_length, &data_length);
|
slength, prefix_length, &data_length);
|
||||||
|
|
||||||
|
profile_length = data_length - prefix_length;
|
||||||
|
profile_size = ((*(chunkdata+prefix_length))<<24) |
|
||||||
|
((*(chunkdata+prefix_length+1))<<16) |
|
||||||
|
((*(chunkdata+prefix_length+2))<< 8) |
|
||||||
|
((*(chunkdata+prefix_length+3)) );
|
||||||
|
|
||||||
|
if(profile_size < profile_length)
|
||||||
|
profile_length = profile_size;
|
||||||
|
|
||||||
|
if(profile_size > profile_length)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "Ignoring truncated iCCP profile.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type,
|
png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type,
|
||||||
chunkdata + prefix_length, data_length);
|
chunkdata + prefix_length, data_length-prefix_length);
|
||||||
png_free(png_ptr, chunkdata);
|
png_free(png_ptr, chunkdata);
|
||||||
}
|
}
|
||||||
#endif /* PNG_READ_iCCP_SUPPORTED */
|
#endif /* PNG_READ_iCCP_SUPPORTED */
|
||||||
@@ -1336,7 +1359,6 @@ png_handle_bKGD(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
|||||||
if(buf[0] > info_ptr->num_palette)
|
if(buf[0] > info_ptr->num_palette)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "Incorrect bKGD chunk index value");
|
png_warning(png_ptr, "Incorrect bKGD chunk index value");
|
||||||
png_crc_finish(png_ptr, length);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
png_ptr->background.red =
|
png_ptr->background.red =
|
||||||
|
|||||||
25
pngset.c
25
pngset.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngset.c - storage of image information into info struct
|
/* pngset.c - storage of image information into info struct
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -741,10 +741,27 @@ png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr,
|
|||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted)
|
png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_permit_empty_plte\n");
|
/* This function is deprecated in favor of png_permit_mng_features()
|
||||||
|
and will be removed from libpng-2.0.0 */
|
||||||
|
png_debug(1, "in png_permit_empty_plte, DEPRECATED.\n");
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
png_ptr->empty_plte_permitted=(png_byte)empty_plte_permitted;
|
png_ptr->mng_features_permitted = (png_byte)
|
||||||
|
((png_ptr->mng_features_permitted & (~(PNG_FLAG_MNG_EMPTY_PLTE))) |
|
||||||
|
((empty_plte_permitted & PNG_FLAG_MNG_EMPTY_PLTE)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_MNG_FEATURES_SUPPORTED)
|
||||||
|
png_uint_32 PNGAPI
|
||||||
|
png_permit_mng_features (png_structp png_ptr, png_uint_32 mng_features)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_permit_mng_features\n");
|
||||||
|
if (png_ptr == NULL)
|
||||||
|
return (png_uint_32)0;
|
||||||
|
png_ptr->mng_features_permitted =
|
||||||
|
(png_byte)(mng_features & PNG_ALL_MNG_FEATURES);
|
||||||
|
return (png_uint_32)png_ptr->mng_features_permitted;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -825,6 +842,8 @@ png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size)
|
|||||||
png_free(png_ptr, png_ptr->zbuf);
|
png_free(png_ptr, png_ptr->zbuf);
|
||||||
png_ptr->zbuf_size = (png_size_t)size;
|
png_ptr->zbuf_size = (png_size_t)size;
|
||||||
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size);
|
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size);
|
||||||
|
if(!png_ptr->zbuf)
|
||||||
|
png_error(png_ptr,"Unable to malloc zbuf");
|
||||||
png_ptr->zstream.next_out = png_ptr->zbuf;
|
png_ptr->zstream.next_out = png_ptr->zbuf;
|
||||||
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
|||||||
10
pngvcrd.c
10
pngvcrd.c
@@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* For Intel x86 CPU and Microsoft Visual C++ compiler
|
* For Intel x86 CPU and Microsoft Visual C++ compiler
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* Copyright (c) 1998, Intel Corporation
|
* Copyright (c) 1998, Intel Corporation
|
||||||
@@ -10,6 +10,8 @@
|
|||||||
* Contributed by Nirav Chhatrapati, Intel Corporation, 1998
|
* Contributed by Nirav Chhatrapati, Intel Corporation, 1998
|
||||||
* Interface to libpng contributed by Gilles Vollant, 1999
|
* Interface to libpng contributed by Gilles Vollant, 1999
|
||||||
*
|
*
|
||||||
|
* [png_read_filter_row_mmx_avg() bpp == 2 bugfix, GRR 20000916]
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL
|
#define PNG_INTERNAL
|
||||||
@@ -2117,8 +2119,8 @@ davg4lp:
|
|||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
ActiveMask.use = 0x000000000000ffff;
|
ActiveMask.use = 0x000000000000ffff;
|
||||||
ShiftBpp.use = 24; // == 3 * 8
|
ShiftBpp.use = 16; // == 2 * 8 [BUGFIX]
|
||||||
ShiftRem.use = 40; // == 64 - 24
|
ShiftRem.use = 48; // == 64 - 16 [BUGFIX]
|
||||||
_asm {
|
_asm {
|
||||||
// Load ActiveMask
|
// Load ActiveMask
|
||||||
movq mm7, ActiveMask
|
movq mm7, ActiveMask
|
||||||
@@ -2133,7 +2135,7 @@ davg4lp:
|
|||||||
// (we correct position in loop below)
|
// (we correct position in loop below)
|
||||||
davg2lp:
|
davg2lp:
|
||||||
movq mm0, [edi + ebx]
|
movq mm0, [edi + ebx]
|
||||||
psllq mm2, ShiftRem // shift data to position correctly
|
psrlq mm2, ShiftRem // shift data to position correctly [BUGFIX]
|
||||||
movq mm1, [esi + ebx]
|
movq mm1, [esi + ebx]
|
||||||
// Add (Prev_row/2) to Average
|
// Add (Prev_row/2) to Average
|
||||||
movq mm3, mm5
|
movq mm3, mm5
|
||||||
|
|||||||
2
pngwio.c
2
pngwio.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngwio.c - functions for data output
|
/* pngwio.c - functions for data output
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngwrite.c - general routines to write a PNG file
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -964,7 +964,6 @@ void PNGAPI
|
|||||||
png_set_filter(png_structp png_ptr, int method, int filters)
|
png_set_filter(png_structp png_ptr, int method, int filters)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_set_filter\n");
|
png_debug(1, "in png_set_filter\n");
|
||||||
/* We allow 'method' only for future expansion of the base filter method. */
|
|
||||||
if (method == PNG_FILTER_TYPE_BASE)
|
if (method == PNG_FILTER_TYPE_BASE)
|
||||||
{
|
{
|
||||||
switch (filters & (PNG_ALL_FILTERS | 0x07))
|
switch (filters & (PNG_ALL_FILTERS | 0x07))
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
|||||||
16
pngwutil.c
16
pngwutil.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngwutil.c - utilities to write a PNG file
|
/* pngwutil.c - utilities to write a PNG file
|
||||||
*
|
*
|
||||||
* libpng 1.0.8 - July 24, 2000
|
* libpng 1.0.9beta2 - November 19, 2000
|
||||||
* For conditions of distribution and use, see copyright notice in png.h
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -514,8 +514,8 @@ png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal)
|
|||||||
|
|
||||||
png_debug(1, "in png_write_PLTE\n");
|
png_debug(1, "in png_write_PLTE\n");
|
||||||
if ((
|
if ((
|
||||||
#ifdef PNG_WRITE_EMPTY_PLTE_SUPPORTED
|
#if defined(PNG_MNG_FEATURES_SUPPORTED)
|
||||||
!png_ptr->empty_plte_permitted &&
|
!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) &&
|
||||||
#endif
|
#endif
|
||||||
num_pal == 0) || num_pal > 256)
|
num_pal == 0) || num_pal > 256)
|
||||||
{
|
{
|
||||||
@@ -670,6 +670,7 @@ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type,
|
|||||||
/* make sure we include the NULL after the name and the compression type */
|
/* make sure we include the NULL after the name and the compression type */
|
||||||
png_write_chunk_start(png_ptr, (png_bytep)png_iCCP,
|
png_write_chunk_start(png_ptr, (png_bytep)png_iCCP,
|
||||||
(png_uint_32)name_len+profile_len+2);
|
(png_uint_32)name_len+profile_len+2);
|
||||||
|
new_name[name_len+1]=0x00;
|
||||||
png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 2);
|
png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 2);
|
||||||
|
|
||||||
if (profile_len)
|
if (profile_len)
|
||||||
@@ -996,9 +997,9 @@ png_write_bKGD(png_structp png_ptr, png_color_16p back, int color_type)
|
|||||||
if (color_type == PNG_COLOR_TYPE_PALETTE)
|
if (color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
#ifdef PNG_WRITE_EMPTY_PLTE_SUPPORTED
|
#if defined(PNG_MNG_FEATURES_SUPPORTED)
|
||||||
(!png_ptr->empty_plte_permitted ||
|
(png_ptr->num_palette ||
|
||||||
(png_ptr->empty_plte_permitted && png_ptr->num_palette)) &&
|
(!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) &&
|
||||||
#endif
|
#endif
|
||||||
back->index > png_ptr->num_palette)
|
back->index > png_ptr->num_palette)
|
||||||
{
|
{
|
||||||
@@ -1083,7 +1084,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
|
|||||||
|
|
||||||
png_debug1(2, "Keyword to be checked is '%s'\n", key);
|
png_debug1(2, "Keyword to be checked is '%s'\n", key);
|
||||||
|
|
||||||
*new_key = (png_charp)png_malloc(png_ptr, (png_uint_32)(key_len + 1));
|
*new_key = (png_charp)png_malloc(png_ptr, (png_uint_32)(key_len + 2));
|
||||||
|
|
||||||
/* Replace non-printing characters with a blank and print a warning */
|
/* Replace non-printing characters with a blank and print a warning */
|
||||||
for (kp = key, dp = *new_key; *kp != '\0'; kp++, dp++)
|
for (kp = key, dp = *new_key; *kp != '\0'; kp++, dp++)
|
||||||
@@ -2553,6 +2554,7 @@ png_write_filtered_row(png_structp png_ptr, png_bytep filtered_row)
|
|||||||
png_debug(1, "in png_write_filtered_row\n");
|
png_debug(1, "in png_write_filtered_row\n");
|
||||||
png_debug1(2, "filter = %d\n", filtered_row[0]);
|
png_debug1(2, "filter = %d\n", filtered_row[0]);
|
||||||
/* set up the zlib input buffer */
|
/* set up the zlib input buffer */
|
||||||
|
|
||||||
png_ptr->zstream.next_in = filtered_row;
|
png_ptr->zstream.next_in = filtered_row;
|
||||||
png_ptr->zstream.avail_in = (uInt)png_ptr->row_info.rowbytes + 1;
|
png_ptr->zstream.avail_in = (uInt)png_ptr->row_info.rowbytes + 1;
|
||||||
/* repeat until we have compressed all the data */
|
/* repeat until we have compressed all the data */
|
||||||
|
|||||||
Reference in New Issue
Block a user