view release on metacpan or search on metacpan
* Fixup for too-modern test (used s///r flag)
* "get_IHDR" no longer returns "compression_method" and
"filter_method" (always 0)
* Some documentation cleanup.
0.36 2014-04-26
* Implements get_sBIT, set_sBIT (previously incorrectly implemented)
* Implements get_tRNS, set_tRNS (previously unimplemented)
* Distribution now includes testing over all valid members of "PngSuite"
for copy-correctness of "copy_png".
0.35 2014-04-26
* Fix bug caused by premature freeing of memory due to changes in
version 0.34. "copy_png" should be OK again.
0.34 2014-04-11
* Plug memory leak
Image::PNG::Libpng
perl_png_create_write_struct ()
CODE:
RETVAL = perl_png_create_write_struct ();
OUTPUT:
RETVAL
# XS destructor, this does the work.
void
perl_png_DESTROY (Png)
Image::PNG::Libpng Png
CODE:
if (Png) {
perl_png_destroy (Png);
}
# No-ops supplied since they used to be in use in old versions of the module.
void
perl_png_destroy_read_struct (Png)
Image::PNG::Libpng Png
CODE:
perl_png_destroy_read_struct (Png);
void
perl_png_destroy_write_struct (Png)
Image::PNG::Libpng Png
CODE:
perl_png_destroy_write_struct (Png);
# libpng-style input/output functions
void
perl_png_write_image(Png, rows)
Image::PNG::Libpng Png;
AV * rows
CODE:
check_init_io (Png);
perl_png_write_image (Png, rows);
void
perl_png_write_info(Png)
Image::PNG::Libpng Png;
CODE:
check_init_io (Png);
png_write_info (Png->png, Png->info);
void
perl_png_write_end(Png)
Image::PNG::Libpng Png;
CODE:
check_init_io (Png);
png_write_end (Png->png, Png->info);
SV *
perl_png_read_image(Png)
Image::PNG::Libpng Png;
CODE:
check_init_io (Png);
RETVAL = perl_png_read_image (Png);
OUTPUT:
RETVAL
void
perl_png_read_end(Png)
Image::PNG::Libpng Png;
CODE:
check_init_io (Png);
png_read_end (Png->png, Png->info);
void
perl_png_write_png (Png, transforms = PNG_TRANSFORM_IDENTITY)
Image::PNG::Libpng Png
int transforms
CODE:
perl_png_write_png (Png, transforms);
void
perl_png_init_io (Png, fpsv)
Image::PNG::Libpng Png
SV * fpsv
CODE:
perl_png_init_io_x (Png, fpsv);
void
perl_png_read_info (Png)
Image::PNG::Libpng Png
CODE:
check_init_io (Png);
png_read_info (Png->png, Png->info);
void
perl_png_read_update_info (Png)
Image::PNG::Libpng Png
CODE:
check_init_io (Png);
png_read_update_info (Png->png, Png->info);
void
perl_png_read_png (Png, transforms = PNG_TRANSFORM_IDENTITY)
Image::PNG::Libpng Png
int transforms
CODE:
check_init_io (Png);
perl_png_read_png (Png, transforms);
SV *
perl_png_get_text (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_text (Png);
OUTPUT:
RETVAL
void
perl_png_set_text (Png, text)
Image::PNG::Libpng Png
AV * text
CODE:
perl_png_set_text (Png, text);
int
perl_png_sig_cmp (sig, start = 0, num_to_check = 8)
SV * sig
int start
int num_to_check
CODE:
RETVAL = perl_png_sig_cmp (sig, start, num_to_check);
OUTPUT:
RETVAL
void
perl_png_scalar_as_input (Png, scalar, transforms = 0)
Image::PNG::Libpng Png
SV * scalar
int transforms
CODE:
perl_png_scalar_as_input (Png, scalar, transforms);
Image::PNG::Libpng
perl_png_read_from_scalar (scalar, transforms = 0)
SV * scalar
int transforms
CODE:
RETVAL = perl_png_read_from_scalar (scalar, transforms);
OUTPUT:
RETVAL
int
perl_png_access_version_number ()
CODE:
RETVAL = png_access_version_number ();
OUTPUT:
RETVAL
SV *
perl_png_get_rows (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_rows (Png);
OUTPUT:
RETVAL
int
perl_png_get_rowbytes (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = png_get_rowbytes (Png->png, Png->info);
OUTPUT:
RETVAL
SV *
perl_png_get_valid (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_valid (Png);
OUTPUT:
RETVAL
void
perl_png_set_tRNS_pointer (Png, tRNS_pointer, num_tRNS_pointer)
Image::PNG::Libpng Png
void * tRNS_pointer
int num_tRNS_pointer
CODE:
perl_png_set_tRNS_pointer (Png, tRNS_pointer, num_tRNS_pointer);
void
perl_png_set_rows (Png, rows)
Image::PNG::Libpng Png
AV * rows
CODE:
perl_png_set_rows (Png, rows);
SV *
perl_png_write_to_scalar (Png, transforms = 0)
Image::PNG::Libpng Png
int transforms;
CODE:
RETVAL = perl_png_write_to_scalar (Png, transforms);
OUTPUT:
RETVAL
void
perl_png_set_filter (Png, filters)
Image::PNG::Libpng Png
int filters;
CODE:
png_set_filter (Png->png, UNUSED_ZERO_ARG, filters);
void
perl_png_set_unknown_chunks (Png, unknown_chunks)
Image::PNG::Libpng Png
AV * unknown_chunks
CODE:
perl_png_set_unknown_chunks (Png, unknown_chunks);
SV *
perl_png_get_unknown_chunks (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_unknown_chunks (Png);
OUTPUT:
RETVAL
void
perl_png_set_keep_unknown_chunks (Png, keep, chunk_list = 0)
Image::PNG::Libpng Png
int keep
SV * chunk_list
CODE:
perl_png_set_keep_unknown_chunks (Png, keep, chunk_list);
int
perl_png_get_chunk_malloc_max (Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_CHUNK_MALLOC_MAX_SUPPORTED
RETVAL = png_get_chunk_malloc_max (Png->png);
#else
UNSUPPORTED(CHUNK_MALLOC_MAX);
RETVAL = 0;
#endif /* chunk_malloc_max supported */
OUTPUT:
RETVAL
void
perl_png_set_chunk_malloc_max (Png, max)
Image::PNG::Libpng Png;
int max;
CODE:
#ifdef PNG_CHUNK_MALLOC_MAX_SUPPORTED
png_set_chunk_malloc_max (Png->png, max);
#else
UNSUPPORTED(CHUNK_MALLOC_MAX);
#endif /* chunk_malloc_max supported */
# Chunk code which is not automatically generated.
int
perl_png_get_sRGB (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_sRGB (Png);
OUTPUT:
RETVAL
void
perl_png_set_sRGB (Png, sRGB)
Image::PNG::Libpng Png
int sRGB
CODE:
perl_png_set_sRGB (Png, sRGB);
SV *
perl_png_get_tRNS_palette (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_tRNS_palette (Png);
OUTPUT:
RETVAL
# Transform routines. These generally doesn't take any arguments but
# usually do require conditional wrappers to compile on older
# versions of libpng.
void
perl_png_set_add_alpha(Png, filler, filler_loc)
Image::PNG::Libpng Png;
unsigned int filler;
int filler_loc;
CODE:
if (Png->type == perl_png_read_obj) {
#if defined(PNG_READ_FILLER_SUPPORTED)
png_set_add_alpha (Png->png, filler, filler_loc);
#else
UNSUPPORTED(READ_FILLER);
#endif /* read/write filler */
}
else {
#if defined(PNG_WRITE_FILLER_SUPPORTED)
png_set_add_alpha (Png->png, filler, filler_loc);
#else
UNSUPPORTED(WRITE_FILLER);
#endif /* read/write filler */
}
void
perl_png_set_alpha_mode (Png, mode, screen_gamma)
Image::PNG::Libpng Png;
int mode;
double screen_gamma;
CODE:
#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
png_set_alpha_mode (Png->png, mode, screen_gamma);
#else
UNSUPPORTED(READ_ALPHA_MODE);
#endif /* def PNG_READ_ALPHA_MODE */
void
perl_png_set_bgr(Png)
Image::PNG::Libpng Png;
CODE:
if (Png->type == perl_png_read_obj) {
#if defined(PNG_READ_BGR_SUPPORTED)
png_set_bgr (Png->png);
#else
UNSUPPORTED (READ_BGR);
#endif /* READ_BGR */
}
else {
#if defined(PNG_WRITE_BGR_SUPPORTED)
png_set_bgr (Png->png);
#else
UNSUPPORTED (WRITE_BGR);
#endif /* WRITE_BGR */
}
void
perl_png_set_expand (Png)
Image::PNG::Libpng Png
CODE:
#ifdef PNG_READ_EXPAND_SUPPORTED
png_set_expand (Png->png);
#else
UNSUPPORTED (READ_EXPAND);
#endif /* READ_EXPAND */
void
perl_png_set_expand_16 (Png)
Image::PNG::Libpng Png
CODE:
#ifdef PNG_READ_EXPAND_16_SUPPORTED
png_set_expand_16 (Png->png);
#else
UNSUPPORTED (READ_EXPAND_16);
#endif /* READ_EXPAND_16 */
void
perl_png_set_filler (Png, filler, flags)
Image::PNG::Libpng Png
int filler
int flags
CODE:
if (Png->type == perl_png_read_obj) {
#if defined(PNG_READ_FILLER_SUPPORTED)
png_set_filler (Png->png, filler, flags);
#else
UNSUPPORTED (READ_FILLER);
#endif /* read/write filler */
}
else {
#if defined(PNG_WRITE_FILLER_SUPPORTED)
png_set_filler (Png->png, filler, flags);
#else
UNSUPPORTED (WRITE_FILLER);
#endif /* read/write filler */
}
void
perl_png_set_gray_to_rgb (Png)
Image::PNG::Libpng Png
CODE:
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
png_set_gray_to_rgb (Png->png);
#else
UNSUPPORTED (READ_GRAY_TO_RGB);
#endif /* READ_GRAY_TO_RGB */
void
perl_png_set_expand_gray_1_2_4_to_8(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_EXPAND_SUPPORTED
png_set_expand_gray_1_2_4_to_8 (Png->png);
#else
UNSUPPORTED (READ_EXPAND);
#endif /* read_expand */
void
perl_png_set_invert_alpha(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
png_set_invert_alpha (Png->png);
#else
UNSUPPORTED (READ_INVERT_ALPHA);
#endif /* READ_INVERT_ALPHA */
void
perl_png_set_invert_mono(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_INVERT_SUPPORTED
png_set_invert_mono (Png->png);
#else
UNSUPPORTED (READ_INVERT);
#endif /* READ_INVERT */
void
perl_png_set_packing (Png)
Image::PNG::Libpng Png
CODE:
if (Png->type == perl_png_read_obj) {
#if defined(PNG_READ_PACK_SUPPORTED)
png_set_packing (Png->png);
#else
UNSUPPORTED (READ_PACK);
#endif /* READ_PACK */
}
else {
#if defined(PNG_WRITE_PACK_SUPPORTED)
png_set_packing (Png->png);
#else
UNSUPPORTED (WRITE_PACK);
#endif /* WRITE_PACK */
}
void
perl_png_set_packswap(Png)
Image::PNG::Libpng Png;
CODE:
if (Png->type == perl_png_read_obj) {
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
png_set_packing (Png->png);
#else
UNSUPPORTED (READ_PACKSWAP);
#endif /* READ_PACKSWAP */
}
else {
#if defined(PNG_WRITE_PACKSWAP_SUPPORTED)
png_set_packswap (Png->png);
#else
UNSUPPORTED (WRITE_PACKSWAP);
#endif /* WRITE_PACKSWAP */
}
void
perl_png_set_palette_to_rgb(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_EXPAND_SUPPORTED
png_set_palette_to_rgb (Png->png);
#else
UNSUPPORTED (READ_EXPAND);
#endif /* READ_EXPAND */
void
perl_png_set_scale_16(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
png_set_scale_16 (Png->png);
#else
UNSUPPORTED (READ_SCALE_16_TO_8);
#endif /* READ_SCALE_16_TO_8 */
void
perl_png_set_tRNS_to_alpha(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_EXPAND_SUPPORTED
png_set_tRNS_to_alpha(Png->png);
#else
UNSUPPORTED (READ_EXPAND);
#endif /* read_expand */
void
perl_png_set_strip_16 (Png)
Image::PNG::Libpng Png
CODE:
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
png_set_strip_16 (Png->png);
#else
UNSUPPORTED (READ_STRIP_16_TO_8);
#endif /* READ_STRIP_16_TO_8 */
void
perl_png_set_strip_alpha (Png)
Image::PNG::Libpng Png
CODE:
#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
png_set_strip_alpha (Png->png);
#else
UNSUPPORTED (READ_STRIP_ALPHA);
#endif /* READ_STRIP_ALPHA */
void
perl_png_set_swap(Png)
Image::PNG::Libpng Png;
CODE:
if (Png->type == perl_png_read_obj) {
#if defined(PNG_READ_SWAP_SUPPORTED)
png_set_swap (Png->png);
#else
UNSUPPORTED (WRITE_SWAP);
#endif
}
else {
#if defined(PNG_WRITE_SWAP_SUPPORTED)
png_set_swap (Png->png);
#else
UNSUPPORTED (READ_SWAP);
#endif
}
void
perl_png_set_swap_alpha(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
png_set_swap_alpha (Png->png);
#else
UNSUPPORTED (READ_SWAP_ALPHA);
#endif /* READ_SWAP_ALPHA */
void
perl_png_set_transforms (Png, transforms)
Image::PNG::Libpng Png;
int transforms;
CODE:
perl_png_set_transforms (Png, transforms);
OUTPUT:
int
perl_png_get_palette_max(Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = -1;
#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
# ifdef PNG_GET_PALETTE_MAX_SUPPORTED
RETVAL = png_get_palette_max (Png->png, Png->info);
# else
UNSUPPORTED (GET_PALETTE_MAX);
# endif
#else
UNSUPPORTED (CHECK_FOR_INVALID_INDEX);
#endif
OUTPUT:
RETVAL
# Functions which retrieve individual values from the header.
int
perl_png_get_image_width (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = perl_png_get_image_width (Png);
OUTPUT:
RETVAL
int
perl_png_get_image_height (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = perl_png_get_image_height (Png);
OUTPUT:
RETVAL
int
perl_png_get_channels (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = perl_png_get_channels (Png);
OUTPUT:
RETVAL
int
perl_png_get_bit_depth (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = png_get_bit_depth (Png->png, Png->info);
OUTPUT:
RETVAL
int
perl_png_get_interlace_type (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = png_get_interlace_type (Png->png, Png->info);
OUTPUT:
RETVAL
int
perl_png_get_color_type (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = png_get_color_type (Png->png, Png->info);
OUTPUT:
RETVAL
# http://www.cpantesters.org/cpan/report/fc1cade6-3f17-11eb-9d08-9e4a1f24ea8f
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
void
perl_png_set_user_limits (Png, w, h)
Image::PNG::Libpng Png;
unsigned w;
unsigned h;
CODE:
perl_png_set_user_limits (Png, w, h);
SV *
perl_png_get_user_width_max (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = perl_png_get_user_width_max (Png);
OUTPUT:
RETVAL
SV *
perl_png_get_user_height_max (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = perl_png_get_user_height_max (Png);
OUTPUT:
RETVAL
void
perl_png_set_chunk_cache_max(Png, max)
Image::PNG::Libpng Png;
int max;
CODE:
#ifdef PNG_CHUNK_CACHE_MAX_SUPPORTED
png_set_chunk_cache_max(Png->png, max);
#else
UNSUPPORTED (CHUNK_CACHE_MAX);
#endif /* CHUNK_CACHE_MAX */
int
perl_png_get_chunk_cache_max(Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_CHUNK_CACHE_MAX_SUPPORTED
RETVAL = png_get_chunk_cache_max(Png->png);
#else
RETVAL = -1;
UNSUPPORTED (CHUNK_CACHE_MAX);
#endif /* CHUNK_CACHE_MAX */
OUTPUT:
RETVAL
#endif /* SET_USER_LIMITS */
void
perl_png_set_image_data (Png, image_data, own = & PL_sv_undef)
Image::PNG::Libpng Png;
void * image_data;
SV * own;
CODE:
if (Png->type != perl_png_write_obj) {
croak ("Cannot set image data in read PNG");
}
Png->image_data = image_data;
Png->memory_gets++;
void
perl_png_set_row_pointers (Png, row_pointers)
Image::PNG::Libpng Png;
SV * row_pointers;
CODE:
if (Png->type != perl_png_write_obj) {
croak ("Cannot set row pointe rs in read PNG");
}
Png->row_pointers = INT2PTR (png_bytepp, SvIV (row_pointers));
png_set_rows (Png->png, Png->info, Png->row_pointers);
Png->memory_gets++;
# These functions predate the macro and were valid in libpng 1.2, yet
# the macro is invalid except for libpng 1.6.17, so conditional
# compilation doesn't seem to offer any benefit, hence the following
# is commented out.
# #ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
void
perl_png_set_compression_level (Png, level)
Image::PNG::Libpng Png;
int level
CODE:
if (level != Z_DEFAULT_COMPRESSION) {
if (level < Z_NO_COMPRESSION || level > Z_BEST_COMPRESSION) {
croak ("Compression level must be %d for default or "
"between %d and %d",
Z_DEFAULT_COMPRESSION, Z_NO_COMPRESSION,
Z_BEST_COMPRESSION);
}
}
png_set_compression_level (Png->png, level);
void
perl_png_set_compression_buffer_size (Png, size)
Image::PNG::Libpng Png;
size_t size;
CODE:
png_set_compression_buffer_size (Png->png, size);
SV *
perl_png_get_compression_buffer_size (Png)
Image::PNG::Libpng Png;
PREINIT:
size_t size;
CODE:
size = png_get_compression_buffer_size (Png->png);
RETVAL = newSViv (size);
OUTPUT:
RETVAL
void
perl_png_set_compression_mem_level (Png, mem_level);
Image::PNG::Libpng Png;
int mem_level;
CODE:
png_set_compression_mem_level (Png->png, mem_level);
void
perl_png_set_compression_strategy (Png, strategy);
Image::PNG::Libpng Png;
int strategy;
CODE:
png_set_compression_strategy (Png->png, strategy);
void
perl_png_set_compression_window_bits (Png, window_bits);
Image::PNG::Libpng Png;
int window_bits;
CODE:
png_set_compression_window_bits (Png->png, window_bits);
# #endif /* WRITE_CUSTOMIZE_COMPRESSION */
# This macro is not documented in CHANGES in libpng.
#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
void
perl_png_set_text_compression_level (Png, level);
Image::PNG::Libpng Png;
int level;
CODE:
png_set_text_compression_level (Png->png, level);
void
perl_png_set_text_compression_mem_level (Png, mem_level);
Image::PNG::Libpng Png;
int mem_level;
CODE:
png_set_compression_mem_level (Png->png, mem_level);
void
perl_png_set_text_compression_strategy (Png, strategy);
Image::PNG::Libpng Png;
int strategy;
CODE:
png_set_compression_strategy (Png->png, strategy);
void
perl_png_set_text_compression_window_bits (Png, window_bits);
Image::PNG::Libpng Png;
int window_bits;
CODE:
png_set_compression_window_bits (Png->png, window_bits);
#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */
#if 0
void
perl_png_set_compression_method (Png, method);
Image::PNG::Libpng Png;
int method;
CODE:
png_set_compression_method (Png->png, method);
#endif /* 0 */
#if 0
void
perl_png_set_crc_action (Png, crit_action, ancil_action);
Image::PNG::Libpng Png;
int crit_action;
int ancil_action;
CODE:
png_set_crc_action (Png->png, crit_action, ancil_action);
#endif /* 0 */
void
perl_png_set_gamma (Png, gamma, override_gamma)
Image::PNG::Libpng Png;
double gamma;
double override_gamma;
CODE:
#ifdef PNG_READ_GAMMA_SUPPORTED
png_set_gamma (Png->png, gamma, override_gamma);
#else
UNSUPPORTED (READ_GAMMA);
#endif /* READ_GAMMA */
void
perl_png_permit_mng_features(Png, mask)
Image::PNG::Libpng Png;
int mask;
CODE:
#ifdef PNG_MNG_FEATURES_SUPPORTED
png_permit_mng_features(Png->png, mask);
#else
UNSUPPORTED (MNG_FEATURES);
#endif /* MNG_FEATURES */
# Transform functions which require arguments.
void
perl_png_set_quantize(Png, palette, max_screen_colors, histogram, full_quantize_sv)
Image::PNG::Libpng Png;
AV * palette;
int max_screen_colors;
AV * histogram;
SV * full_quantize_sv;
PREINIT:
int full_quantize;
CODE:
full_quantize = SvTRUE (full_quantize_sv);
perl_png_set_quantize(Png, palette, max_screen_colors, histogram,
full_quantize);
# These macros are for rgb_to_gray
#ifndef PNG_RGB_TO_GRAY_DEFAULT
#define PNG_RGB_TO_GRAY_DEFAULT (-1)
#endif /* PNG_RGB_TO_GRAY_DEFAULT */
#ifndef PNG_ERROR_ACTION_NONE
#define PNG_ERROR_ACTION_NONE 1
#endif /* ndef PNG_ERROR_ACTION_NONE */
void
perl_png_set_rgb_to_gray (Png, error_action = PNG_ERROR_ACTION_NONE, red = PNG_RGB_TO_GRAY_DEFAULT, green = PNG_RGB_TO_GRAY_DEFAULT)
Image::PNG::Libpng Png;
int error_action;
double red;
double green;
CODE:
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
perl_png_set_rgb_to_gray (Png, error_action, red, green);
#else
UNSUPPORTED ("READ_RGB_TO_GRAY");
#endif /* READ_RGB_TO_GRAY */
#undef DEFAULT_WEIGHT
int
perl_png_get_rgb_to_gray_status (Png)
Image::PNG::Libpng Png;
CODE:
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
RETVAL = (int) png_get_rgb_to_gray_status (Png->png);
#else
UNSUPPORTED ("READ_RGB_TO_GRAY");
RETVAL = 0;
#endif /* READ_RGB_TO_GRAY */
OUTPUT:
RETVAL
void
perl_png_set_background(Png, perl_color, gamma_code, need_expand, background_gamma = 1)
Image::PNG::Libpng Png;
HV * perl_color;
int gamma_code;
SV * need_expand;
double background_gamma;
CODE:
#ifdef PNG_READ_BACKGROUND_SUPPORTED
perl_png_set_back (Png, perl_color, gamma_code, SvTRUE(need_expand),
background_gamma);
#else
UNSUPPORTED (READ_BACKGROUND);
#endif /* READ_BACKGROUND */
# These functions are not part of libpng and do not need preprocessor
# conditional wrappers.
int
const char *
perl_png_color_type_name (color_type)
int color_type
CODE:
RETVAL = perl_png_color_type_name (color_type);
OUTPUT:
RETVAL
void
perl_png_copy_row_pointers (Png, row_pointers)
Image::PNG::Libpng Png;
SV * row_pointers;
CODE:
perl_png_copy_row_pointers (Png, row_pointers);
void
perl_png_get_internals (Png)
Image::PNG::Libpng Png
PREINIT:
png_structp png;
png_infop info;
SV * png_sv;
SV * info_sv;
PPCODE:
png = Png->png;
info = Png->info;
png_sv = newSViv (PTR2IV (png));
info_sv = newSViv (PTR2IV (info));
XPUSHs(sv_2mortal(png_sv));
XPUSHs(sv_2mortal(info_sv));
int
perl_png_libpng_supports (what)
const char * what
CODE:
RETVAL = perl_png_libpng_supports (what);
OUTPUT:
RETVAL
int
perl_png_read_struct (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = (Png->type == perl_png_read_obj);
OUTPUT:
RETVAL
void
perl_png_set_verbosity (Png, verbosity = 0)
Image::PNG::Libpng Png
int verbosity;
CODE:
perl_png_set_verbosity (Png, verbosity);
SV *
perl_png_split_alpha (Png)
Image::PNG::Libpng Png;
CODE:
RETVAL = perl_png_split_alpha (Png);
OUTPUT:
RETVAL
const char *
perl_png_text_compression_name (text_compression)
int text_compression
CODE:
RETVAL = perl_png_text_compression_name (text_compression);
OUTPUT:
CODE:
RETVAL = perl_png_get_pixel (png, x, y);
OUTPUT:
RETVAL
# The following automatically generates the get and set functions for
# the chunks.
SV *
perl_png_get_bKGD (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_bKGD (Png);
OUTPUT:
RETVAL
void
perl_png_set_bKGD (Png, bKGD)
Image::PNG::Libpng Png
HV * bKGD
CODE:
perl_png_set_bKGD (Png, bKGD);
SV *
perl_png_get_cHRM (Png)
Image::PNG::Libpng Png
CODE:
#ifdef PNG_cHRM_SUPPORTED
RETVAL = perl_png_get_cHRM (Png);
#else /* PNG_cHRM_SUPPORTED */
RETVAL = & PL_sv_undef;
UNSUPPORTED (cHRM);
#endif /* PNG_cHRM_SUPPORTED */
OUTPUT:
RETVAL
void
perl_png_set_cHRM (Png, cHRM)
Image::PNG::Libpng Png
HV * cHRM
CODE:
#ifdef PNG_cHRM_SUPPORTED
perl_png_set_cHRM (Png, cHRM);
#else /* PNG_cHRM_SUPPORTED */
UNSUPPORTED (cHRM);
#endif /* PNG_cHRM_SUPPORTED */
SV *
perl_png_get_cHRM_XYZ (Png)
Image::PNG::Libpng Png
CODE:
#ifdef PNG_cHRM_XYZ_SUPPORTED
RETVAL = perl_png_get_cHRM_XYZ (Png);
#else /* PNG_cHRM_XYZ_SUPPORTED */
RETVAL = & PL_sv_undef;
UNSUPPORTED (cHRM_XYZ);
#endif /* PNG_cHRM_XYZ_SUPPORTED */
OUTPUT:
RETVAL
void
perl_png_set_cHRM_XYZ (Png, cHRM_XYZ)
Image::PNG::Libpng Png
HV * cHRM_XYZ
CODE:
#ifdef PNG_cHRM_XYZ_SUPPORTED
perl_png_set_cHRM_XYZ (Png, cHRM_XYZ);
#else /* PNG_cHRM_XYZ_SUPPORTED */
UNSUPPORTED (cHRM_XYZ);
#endif /* PNG_cHRM_XYZ_SUPPORTED */
SV *
perl_png_get_eXIf (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_eXIf (Png);
OUTPUT:
RETVAL
void
perl_png_set_eXIf (Png, eXIf)
Image::PNG::Libpng Png
SV * eXIf
CODE:
perl_png_set_eXIf (Png, eXIf);
SV *
perl_png_get_gAMA (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_gAMA (Png);
OUTPUT:
RETVAL
void
perl_png_set_gAMA (Png, gAMA)
Image::PNG::Libpng Png
double gAMA
CODE:
perl_png_set_gAMA (Png, gAMA);
SV *
perl_png_get_hIST (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_hIST (Png);
OUTPUT:
RETVAL
void
perl_png_set_hIST (Png, hIST)
Image::PNG::Libpng Png
AV * hIST
CODE:
perl_png_set_hIST (Png, hIST);
SV *
perl_png_get_iCCP (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_iCCP (Png);
OUTPUT:
RETVAL
void
perl_png_set_iCCP (Png, iCCP)
Image::PNG::Libpng Png
HV * iCCP
CODE:
perl_png_set_iCCP (Png, iCCP);
SV *
perl_png_get_IHDR (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_IHDR (Png);
OUTPUT:
RETVAL
void
perl_png_set_IHDR (Png, IHDR)
Image::PNG::Libpng Png
HV * IHDR
CODE:
perl_png_set_IHDR (Png, IHDR);
SV *
perl_png_get_oFFs (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_oFFs (Png);
OUTPUT:
RETVAL
void
perl_png_set_oFFs (Png, oFFs)
Image::PNG::Libpng Png
HV * oFFs
CODE:
perl_png_set_oFFs (Png, oFFs);
SV *
perl_png_get_pCAL (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_pCAL (Png);
OUTPUT:
RETVAL
void
perl_png_set_pCAL (Png, pCAL)
Image::PNG::Libpng Png
HV * pCAL
CODE:
perl_png_set_pCAL (Png, pCAL);
SV *
perl_png_get_pHYs (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_pHYs (Png);
OUTPUT:
RETVAL
void
perl_png_set_pHYs (Png, pHYs)
Image::PNG::Libpng Png
HV * pHYs
CODE:
perl_png_set_pHYs (Png, pHYs);
SV *
perl_png_get_PLTE (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_PLTE (Png);
OUTPUT:
RETVAL
void
perl_png_set_PLTE (Png, PLTE)
Image::PNG::Libpng Png
AV * PLTE
CODE:
perl_png_set_PLTE (Png, PLTE);
SV *
perl_png_get_sBIT (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_sBIT (Png);
OUTPUT:
RETVAL
void
perl_png_set_sBIT (Png, sBIT)
Image::PNG::Libpng Png
HV * sBIT
CODE:
perl_png_set_sBIT (Png, sBIT);
SV *
perl_png_get_sCAL (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_sCAL (Png);
OUTPUT:
RETVAL
void
perl_png_set_sCAL (Png, sCAL)
Image::PNG::Libpng Png
HV * sCAL
CODE:
perl_png_set_sCAL (Png, sCAL);
SV *
perl_png_get_sPLT (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_sPLT (Png);
OUTPUT:
RETVAL
void
perl_png_set_sPLT (Png, sPLT)
Image::PNG::Libpng Png
AV * sPLT
CODE:
perl_png_set_sPLT (Png, sPLT);
SV *
perl_png_get_tIME (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_tIME (Png);
OUTPUT:
RETVAL
void
perl_png_set_tIME (Png, tIME = 0)
Image::PNG::Libpng Png
SV * tIME
CODE:
perl_png_set_tIME (Png, tIME);
SV *
perl_png_get_tRNS (Png)
Image::PNG::Libpng Png
CODE:
RETVAL = perl_png_get_tRNS (Png);
OUTPUT:
RETVAL
void
perl_png_set_tRNS (Png, tRNS)
Image::PNG::Libpng Png
SV * tRNS
CODE:
perl_png_set_tRNS (Png, tRNS);
examples/set-background.png
examples/set-text.pl
examples/set-unknown-chunk.pl
examples/supports.pl
examples/synopsis-easy.pl
examples/synopsis.pl
examples/wave.png
examples/xkcd-out.txt
examples/xkcd.pl
get-pixel.pl
inc/CheckForLibPng.pm
lib/Image/PNG/Const.pm
lib/Image/PNG/Libpng.pm
lib/Image/PNG/Libpng.pod
Libpng.xs
Makefile.PL
MANIFEST This list of files
MANIFEST.SKIP
my-xs.h
nicemake.pl
perl-libpng.c
t/libpng/g25n2c08.png
t/libpng/g25n3p04.png
t/libpng/oi1n0g16.png
t/libpng/oi1n2c16.png
t/libpng/oi2n0g16.png
t/libpng/oi2n2c16.png
t/libpng/oi4n0g16.png
t/libpng/oi4n2c16.png
t/libpng/oi9n0g16.png
t/libpng/oi9n2c16.png
t/libpng/PngSuite.LICENSE
t/libpng/PngSuite.png
t/libpng/PngSuite.README
t/libpng/pp0n2c16.png
t/libpng/pp0n6a08.png
t/libpng/ps1n0g08.png
t/libpng/ps1n2c16.png
t/libpng/ps2n0g08.png
t/libpng/ps2n2c16.png
t/libpng/s01i3p01.png
t/libpng/s01n3p01.png
t/libpng/s02i3p01.png
t/libpng/s02n3p01.png
Makefile.PL view on Meta::CPAN
my $ok = GetOptions (
check => \my $check,
optimize => \my $optimize,
"prefix=s" => \my $prefix,
);
use 5.008001;
use lib 'inc';
use CheckForLibPng;
my $vars = check_for_libpng (verbose => $check, prefix => $prefix,);
if (! $vars) {
print STDERR "Libpng may not be present on this system.\n";
exit;
}
my %wm = (
NAME => 'Image::PNG::Libpng',
inc/CheckForLibPng.pm view on Meta::CPAN
#
# - Remove "Template" stuff
# - Change file to edit
# - Debugging messages all go through "msg".
#
# 0.01 2017-06-28
#
# Old method of checking for libpng recovered from Image::PNG::Libpng
# git commit 50c6032e3f61624736159930026f2b2a306fcd35.
package CheckForLibPng;
use parent Exporter;
our @EXPORT = qw/check_for_libpng/;
use warnings;
use strict;
use utf8;
use FindBin '$Bin';
use Carp;
our $VERSION = '0.03';
inc/CheckForLibPng.pm view on Meta::CPAN
"libpng". Somehow or other this didn't work out. If you don't have
libpng on your system, sorry but you need to install this module.
If you are on Ubuntu Linux, you probably need to do something like
sudo aptitude install libpng-dev
to install the header file "png.h" for libpng into your system.
If you think you have libpng on your system, please edit the file
"inc/CheckForLibPng.pm" and run "perl Makefile.PL" again. The relevant
lines are right at the top of the file,
my $png_lib_dir;
my $png_include_dir;
Edit these lines to wherever your libpng and png.h files
respectively are to be found, for example
my $png_lib_dir = '/some/strange/directory';
my $png_include_dir = '/somewhere/nobody/knows';
lib/Image/PNG/Libpng.pod view on Meta::CPAN
(version 1.31) it doesn't support other chunks.
=item Image::PNG::Rewriter
L<Image::PNG::Rewriter> is a utility for unpacking and recompressing
the IDAT (image data) part of a PNG image. The main purpose seems to
be to recompress the image data with the module author's other module
L<Compress::Deflate7>. At the time of writing, that only works with
Perl versions 5.12 or later.
=item Image::Pngslimmer
L<Image::Pngslimmer> reduces the size of dynamically created PNG
images. It's very, very slow at reading PNG data, but seems to work
OK.
=item Image::PNG::Write::BW
L<Image::PNG::Write::BW> writes black and white PNGs from strings.
=item Image::Size
If you only need to read the sizes of images, L<Image::Size> works
perl-libpng.c view on Meta::CPAN
#ifdef PNG_READ_BACKGROUND_SUPPORTED
perl_png_hv_to_color_16 (perl_color, & color);
png_set_background (png->png, & color, gamma_code,
need_expand, background_gamma);
#else
UNSUPPORTED("READ_BACKGROUND");
#endif /* READ_BACKGROUND */
}
static void
perl_png_init_io_x (perl_libpng_t * Png, SV * fpsv)
{
FILE * fp;
PerlIO *io;
IO * scalar;
scalar = sv_2io (fpsv);
if (! scalar) {
croak ("init_io: sv_2io failed: not an io scalar?");
}
io = IoIFP (scalar);
if (! io) {
croak ("init_io: IoIFP failed: scalar's file handle is NULL");
}
Png->io_sv = SvREFCNT_inc (fpsv);
Png->memory_gets++;
fp = PerlIO_findFILE (io);
png_init_io (Png->png, fp);
Png->init_io_done = 1;
}
static void
perl_png_set_quantize (perl_libpng_t * png, AV * palette,
int max_screen_colors, AV * histogram,
int full_quantize)
{
#ifdef PNG_READ_QUANTIZE_SUPPORTED
int n_colors;
t/compress-level.t view on Meta::CPAN
BEGIN: {
use lib "$Bin";
use IPNGLT;
};
skip_old ();
use Image::PNG::Libpng ':all';
my $original_zlib = $ENV{ORIGINAL_ZLIB};
# These are the compression levels used in the PngSuite
my @levels = (0, 3, 6, 9);
my $filesizes_changed = 0;
# Read the example files
foreach my $src_level (@levels) {
my $ffile = sprintf("%s/libpng/z%02dn2c08.png", $Bin, $src_level);
my $src_size = -s $ffile;
t/get-text.t view on Meta::CPAN
empty => 1,
},
{
file => 'ct1n0g04',
comment => 'with textual data',
chunks => [
{
lang => undef,
itxt_length => 0,
text_length => 8,
text => 'PngSuite',
lang_key => undef,
compression => -1,
key => 'Title',
},
{
key => 'Author',
itxt_length => 0,
text_length => 42,
lang_key => undef,
compression => -1,
t/get-text.t view on Meta::CPAN
},
],
},
{
file => 'ctzn0g04',
comment => 'with compressed textual data',
chunks => [
{
key => 'Title',
lang => undef,
text => 'PngSuite',
lang_key => undef,
compression => -1,
text_length => 8,
itxt_length => 0,
},
{
key => 'Author',
itxt_length => 0,
text_length => 42,
compression => -1,
t/get-text.t view on Meta::CPAN
key => 'Disclaimer',
},
],
},
{
file => 'cten0g04',
comment => 'english',
chunks => [
{
lang => 'en',
text => 'PngSuite',
lang_key => 'Title',
compression => 1,
itxt_length => 8,
text_length => 0,
key => 'Title',
},
{
key => 'Author',
lang => 'en',
lang_key => 'Author',
t/get-text.t view on Meta::CPAN
],
},
{
file => 'ctfn0g04',
comment => 'finnish',
chunks => [
{
key => 'Title',
lang_key => 'Otsikko',
compression => 1,
text => 'PngSuite',
itxt_length => 8,
text_length => 0,
lang => 'fi',
},
{
key => 'Author',
lang => 'fi',
itxt_length => 37,
text_length => 0,
lang_key => 'Tekijä',
t/get-text.t view on Meta::CPAN
],
},
{
file => 'ctgn0g04',
comment => 'greek',
chunks => [
{
key => 'Title',
itxt_length => 8,
text_length => 0,
text => 'PngSuite',
lang_key => 'ΤίÏλοÏ',
compression => 1,
lang => 'el',
},
{
text_length => 0,
itxt_length => 37,
lang_key => 'ΣÏ
γγÏαÏÎαÏ',
text => 'Willem van Schaik (willem@schaik.com)',
compression => 1,
t/get-text.t view on Meta::CPAN
},
{
file => 'cthn0g04',
comment => 'hindi',
chunks => [
{
key => 'Title',
text_length => 0,
itxt_length => 8,
lang_key => 'शà¥à¤°à¥à¤·à¤',
text => 'PngSuite',
compression => 1,
lang => 'hi',
},
{
key => 'Author',
lang => 'hi',
text => 'Willem van Schaik (willem@schaik.com)',
lang_key => 'लà¥à¤à¤',
compression => 1,
text_length => 0,
t/get-text.t view on Meta::CPAN
],
},
{
file => 'ctjn0g04',
comment => 'japanese',
chunks => [
{
key => 'Title',
itxt_length => 8,
text_length => 0,
text => 'PngSuite',
lang_key => 'ã¿ã¤ãã«',
compression => 1,
lang => 'ja',
},
{
key => 'Author',
compression => 1,
lang_key => 'èè
',
text => 'Willem van Schaik (willem@schaik.com)',
itxt_length => 37,
t/libpng/PngSuite.LICENSE view on Meta::CPAN
PngSuite
--------
Permission to use, copy, modify and distribute these images for any
purpose and without fee is hereby granted.
(c) Willem van Schaik, 1996, 2011
t/libpng/PngSuite.README view on Meta::CPAN
testset for PNG-(de)coders
created by Willem van Schaik
------------------------------------
This is a collection of graphics images created to test the png applications
like viewers, converters and editors. All (as far as that is possible)
formats supported by the PNG standard are represented.
The suite consists of the following files:
- PngSuite.README - this file
- PngSuite.LICENSE - the PngSuite is freeware
- PngSuite.png - image with PngSuite logo
- PngSuite.tgz - archive of all PNG testfiles
- PngSuite.zip - same in .zip format for PCs
--------
(c) Willem van Schaik
willem@schaik.com
Calgary, April 2011