Merge branch 'master' into try-round-to-nearest
This commit is contained in:
commit
c522dae625
@ -41,6 +41,9 @@
|
|||||||
- resize/reduce*/shrink*/affine now round output size to nearest rather than
|
- resize/reduce*/shrink*/affine now round output size to nearest rather than
|
||||||
rounding down, thanks ioquatix
|
rounding down, thanks ioquatix
|
||||||
|
|
||||||
|
19/8/16 started 8.3.4
|
||||||
|
- better transparency handling in gifload, thanks diegocsandrim
|
||||||
|
|
||||||
30/7/16 started 8.3.3
|
30/7/16 started 8.3.3
|
||||||
- fix performance regression in 8.3.2, thanks Lovell
|
- fix performance regression in 8.3.2, thanks Lovell
|
||||||
- yet more robust vips file reading
|
- yet more robust vips file reading
|
||||||
|
@ -37,9 +37,9 @@ VIPS_VERSION_STRING=$VIPS_VERSION-`date`
|
|||||||
# binary interface changes backwards compatible?: increment age
|
# binary interface changes backwards compatible?: increment age
|
||||||
# binary interface changes not backwards compatible?: reset age to 0
|
# binary interface changes not backwards compatible?: reset age to 0
|
||||||
|
|
||||||
LIBRARY_CURRENT=46
|
LIBRARY_CURRENT=47
|
||||||
LIBRARY_REVISION=3
|
LIBRARY_REVISION=1
|
||||||
LIBRARY_AGE=4
|
LIBRARY_AGE=5
|
||||||
|
|
||||||
# patched into include/vips/version.h
|
# patched into include/vips/version.h
|
||||||
AC_SUBST(VIPS_VERSION)
|
AC_SUBST(VIPS_VERSION)
|
||||||
|
@ -1266,6 +1266,10 @@ vips_icc_ac2rc( VipsImage *in, VipsImage **out, const char *profile_filename )
|
|||||||
* If @embedded is set, the input profile is taken from the input image
|
* If @embedded is set, the input profile is taken from the input image
|
||||||
* metadata. If there is no embedded profile,
|
* metadata. If there is no embedded profile,
|
||||||
* @input_profile_filename is used as a fall-back.
|
* @input_profile_filename is used as a fall-back.
|
||||||
|
* You can test for the
|
||||||
|
* presence of an embedded profile with
|
||||||
|
* vips_image_get_typeof() with #VIPS_META_ICC_NAME as an argument. This will
|
||||||
|
* return %GType 0 if there is no profile.
|
||||||
*
|
*
|
||||||
* If @embedded is not set, the input profile is taken from
|
* If @embedded is not set, the input profile is taken from
|
||||||
* @input_profile. If @input_profile is not supplied, the
|
* @input_profile. If @input_profile is not supplied, the
|
||||||
@ -1342,11 +1346,18 @@ vips_icc_export( VipsImage *in, VipsImage **out, ... )
|
|||||||
* If @embedded is set, the input profile is taken from the input image
|
* If @embedded is set, the input profile is taken from the input image
|
||||||
* metadata, if present. If there is no embedded profile,
|
* metadata, if present. If there is no embedded profile,
|
||||||
* @input_profile is used as a fall-back.
|
* @input_profile is used as a fall-back.
|
||||||
|
* You can test for the
|
||||||
|
* presence of an embedded profile with
|
||||||
|
* vips_image_get_typeof() with #VIPS_META_ICC_NAME as an argument. This will
|
||||||
|
* return %GType 0 if there is no profile.
|
||||||
*
|
*
|
||||||
* If @embedded is not set, the input profile is taken from
|
* If @embedded is not set, the input profile is taken from
|
||||||
* @input_profile. If @input_profile is not supplied, the
|
* @input_profile. If @input_profile is not supplied, the
|
||||||
* metadata profile, if any, is used as a fall-back.
|
* metadata profile, if any, is used as a fall-back.
|
||||||
*
|
*
|
||||||
|
* The output image has the output profile attached to the #VIPS_META_ICC_NAME
|
||||||
|
* field.
|
||||||
|
*
|
||||||
* Use vips_icc_import() and vips_icc_export() to do either the first or
|
* Use vips_icc_import() and vips_icc_export() to do either the first or
|
||||||
* second half of this operation in isolation.
|
* second half of this operation in isolation.
|
||||||
*
|
*
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
* 26/7/16
|
* 26/7/16
|
||||||
* - transparency was wrong if there was no EXTENSION_RECORD
|
* - transparency was wrong if there was no EXTENSION_RECORD
|
||||||
* - write 1, 2, 3, or 4 bands depending on file contents
|
* - write 1, 2, 3, or 4 bands depending on file contents
|
||||||
|
* 19/8/16
|
||||||
|
* - better transparency detection, thanks diegocsandrim
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -513,9 +515,10 @@ vips_foreign_load_gif_to_memory( VipsForeignLoadGif *gif, VipsImage *out )
|
|||||||
if( ext_code == GRAPHICS_EXT_FUNC_CODE &&
|
if( ext_code == GRAPHICS_EXT_FUNC_CODE &&
|
||||||
extension &&
|
extension &&
|
||||||
extension[0] == 4 &&
|
extension[0] == 4 &&
|
||||||
extension[1] == 1 ) {
|
(extension[1] & 0x1) ) {
|
||||||
/* Bytes are 4, 1, delay low, delay high,
|
/* Bytes are 4, 1, delay low, delay high,
|
||||||
* transparency.
|
* transparency. Bit 1 means transparency
|
||||||
|
* is being set.
|
||||||
*/
|
*/
|
||||||
gif->transparency = extension[4];
|
gif->transparency = extension[4];
|
||||||
gif->has_transparency = TRUE;
|
gif->has_transparency = TRUE;
|
||||||
@ -826,7 +829,7 @@ vips_foreign_load_gif_buffer_init( VipsForeignLoadGifBuffer *buffer )
|
|||||||
*
|
*
|
||||||
* Optional arguments:
|
* Optional arguments:
|
||||||
*
|
*
|
||||||
* * @page: %ginit, page (frame) to read
|
* * @page: %gint, page (frame) to read
|
||||||
*
|
*
|
||||||
* Read a GIF file into a VIPS image. Rendering uses the giflib library.
|
* Read a GIF file into a VIPS image. Rendering uses the giflib library.
|
||||||
*
|
*
|
||||||
@ -861,7 +864,7 @@ vips_gifload( const char *filename, VipsImage **out, ... )
|
|||||||
*
|
*
|
||||||
* Optional arguments:
|
* Optional arguments:
|
||||||
*
|
*
|
||||||
* * @page: %ginit, page (frame) to read
|
* * @page: %gint, page (frame) to read
|
||||||
*
|
*
|
||||||
* Read a GIF-formatted memory block into a VIPS image. Exactly as
|
* Read a GIF-formatted memory block into a VIPS image. Exactly as
|
||||||
* vips_gifload(), but read from a memory buffer.
|
* vips_gifload(), but read from a memory buffer.
|
||||||
|
@ -301,7 +301,7 @@ vips_foreign_load_tiff_buffer_init( VipsForeignLoadTiffBuffer *buffer )
|
|||||||
*
|
*
|
||||||
* Optional arguments:
|
* Optional arguments:
|
||||||
*
|
*
|
||||||
* * @page: int, load this page
|
* * @page: %gint, load this page
|
||||||
* * @autorotate: %gboolean, use orientation tag to rotate the image
|
* * @autorotate: %gboolean, use orientation tag to rotate the image
|
||||||
* during load
|
* during load
|
||||||
*
|
*
|
||||||
|
@ -168,13 +168,11 @@ vips__b64_encode( const unsigned char *data, size_t data_length )
|
|||||||
int i;
|
int i;
|
||||||
int cursor;
|
int cursor;
|
||||||
|
|
||||||
if( data_length == 0 ) {
|
if( output_data_length > 10 * 1024 * 1024 ) {
|
||||||
vips_error( "vips__b64_encode", "%s", _( "too little data" ) );
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
if( output_data_length > 1024 * 1024 ) {
|
|
||||||
/* We shouldn't really be used for large amounts of data, plus
|
/* We shouldn't really be used for large amounts of data, plus
|
||||||
* we are using int offsets.
|
* we are using int offsets.
|
||||||
|
*
|
||||||
|
* A large ICC profile can be 1MB, so allow 10MB of b64.
|
||||||
*/
|
*/
|
||||||
vips_error( "vips__b64_encode", "%s", _( "too much data" ) );
|
vips_error( "vips__b64_encode", "%s", _( "too much data" ) );
|
||||||
return( NULL );
|
return( NULL );
|
||||||
@ -228,9 +226,10 @@ vips__b64_decode( const char *buffer, size_t *data_length )
|
|||||||
{
|
{
|
||||||
const size_t buffer_length = strlen( buffer );
|
const size_t buffer_length = strlen( buffer );
|
||||||
|
|
||||||
/* Worst case.
|
/* Worst case. Add one, since we don't want to return NULL for an empty
|
||||||
|
* input string, it would look like an error return.
|
||||||
*/
|
*/
|
||||||
const size_t output_data_length = buffer_length * 3 / 4;
|
const size_t output_data_length = 1 + buffer_length * 3 / 4;
|
||||||
|
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
|
@ -467,8 +467,13 @@ vips_leak( void )
|
|||||||
vips_buf_append_size( &buf, vips_tracked_get_mem_highwater() );
|
vips_buf_append_size( &buf, vips_tracked_get_mem_highwater() );
|
||||||
vips_buf_appends( &buf, "\n" );
|
vips_buf_appends( &buf, "\n" );
|
||||||
|
|
||||||
|
if( strlen( vips_error_buffer() ) > 0 )
|
||||||
|
vips_buf_appendf( &buf, "error buffer: %s",
|
||||||
|
vips_error_buffer() );
|
||||||
|
|
||||||
fprintf( stderr, "%s", vips_buf_all( &buf ) );
|
fprintf( stderr, "%s", vips_buf_all( &buf ) );
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
vips_buffer_dump_all();
|
vips_buffer_dump_all();
|
||||||
#endif /*DEBUG*/
|
#endif /*DEBUG*/
|
||||||
|
@ -670,6 +670,11 @@ transform_blob_save_string( const GValue *src_value, GValue *dest_value )
|
|||||||
vips_value_set_save_string( dest_value, b64 );
|
vips_value_set_save_string( dest_value, b64 );
|
||||||
vips_free( b64 );
|
vips_free( b64 );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
/* No error return from transform, but we should set it to
|
||||||
|
* something.
|
||||||
|
*/
|
||||||
|
vips_value_set_save_string( dest_value, "" );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -683,6 +688,11 @@ transform_save_string_blob( const GValue *src_value, GValue *dest_value )
|
|||||||
if( (blob = vips__b64_decode( b64, &blob_length )) )
|
if( (blob = vips__b64_decode( b64, &blob_length )) )
|
||||||
vips_value_set_blob( dest_value,
|
vips_value_set_blob( dest_value,
|
||||||
(VipsCallbackFn) vips_free, blob, blob_length );
|
(VipsCallbackFn) vips_free, blob, blob_length );
|
||||||
|
else
|
||||||
|
/* No error return from transform, but we should set it to
|
||||||
|
* something.
|
||||||
|
*/
|
||||||
|
vips_value_set_save_string( dest_value, "" );
|
||||||
}
|
}
|
||||||
|
|
||||||
GType
|
GType
|
||||||
|
Loading…
Reference in New Issue
Block a user