add changelog notes

and linewrap for 80 column limit
This commit is contained in:
John Cupitt 2022-05-07 12:51:58 +01:00
parent 894ed1cb13
commit cdcafbc4c5
8 changed files with 30 additions and 22 deletions

View File

@ -19,6 +19,10 @@
- deprecate "properties" option to dzsave (now always on) - deprecate "properties" option to dzsave (now always on)
- always set the min stack size for pthreads, if we can - always set the min stack size for pthreads, if we can
- add fail-on to thumbnail - add fail-on to thumbnail
- add "gap" option to vips_reduce[hv]() and vips_resize() [kleisauke]
- add "ceil" option to vips_shrink() [kleisauke]
- quality improvements for image resizing [kleisauke]
26/11/21 started 8.12.3 26/11/21 started 8.12.3
- better arg checking for hist_find_ndim [travisbell] - better arg checking for hist_find_ndim [travisbell]

View File

@ -138,7 +138,7 @@
typedef struct _VipsReduce { typedef struct _VipsReduce {
VipsResample parent_instance; VipsResample parent_instance;
double hshrink; /* Shrink factors */ double hshrink; /* Shrink factors */
double vshrink; double vshrink;
double gap; /* Reduce gap */ double gap; /* Reduce gap */

View File

@ -65,7 +65,7 @@
typedef struct _VipsReduceh { typedef struct _VipsReduceh {
VipsResample parent_instance; VipsResample parent_instance;
double hshrink; /* Reduce factor */ double hshrink; /* Reduce factor */
double gap; /* Reduce gap */ double gap; /* Reduce gap */
/* The thing we use to make the kernel. /* The thing we use to make the kernel.
@ -477,8 +477,8 @@ vips_reduceh_build( VipsObject *object )
/* The int part of our reduce. /* The int part of our reduce.
*/ */
int_hshrink = VIPS_MAX( 1, int_hshrink = VIPS_MAX( 1, VIPS_FLOOR(
VIPS_FLOOR( (double) in->Xsize / width / reduceh->gap ) ); (double) in->Xsize / width / reduceh->gap ) );
if( int_hshrink > 1 ) { if( int_hshrink > 1 ) {
g_info( "shrinkh by %d", int_hshrink ); g_info( "shrinkh by %d", int_hshrink );

View File

@ -105,7 +105,7 @@ typedef struct _VipsReducev {
VipsResample parent_instance; VipsResample parent_instance;
double vshrink; /* Reduce factor */ double vshrink; /* Reduce factor */
double gap; /* Reduce gap */ double gap; /* Reduce gap */
/* The thing we use to make the kernel. /* The thing we use to make the kernel.
*/ */
@ -846,8 +846,8 @@ vips_reducev_build( VipsObject *object )
/* The int part of our reduce. /* The int part of our reduce.
*/ */
int_vshrink = VIPS_MAX( 1, int_vshrink = VIPS_MAX( 1, VIPS_FLOOR(
VIPS_FLOOR( (double) in->Ysize / height / reducev->gap ) ); (double) in->Ysize / height / reducev->gap ) );
if( int_vshrink > 1 ) { if( int_vshrink > 1 ) {
g_info( "shrinkv by %d", int_vshrink ); g_info( "shrinkv by %d", int_vshrink );

View File

@ -178,10 +178,12 @@ vips_resize_build( VipsObject *object )
target_width = VIPS_ROUND_UINT( in->Xsize * hscale ); target_width = VIPS_ROUND_UINT( in->Xsize * hscale );
target_height = VIPS_ROUND_UINT( in->Ysize * vscale ); target_height = VIPS_ROUND_UINT( in->Ysize * vscale );
int_hshrink = int_hshrink = VIPS_FLOOR(
VIPS_FLOOR( (double) in->Xsize / target_width / resize->gap ); (double) in->Xsize / target_width /
int_vshrink = resize->gap );
VIPS_FLOOR( (double) in->Ysize / target_height / resize->gap ); int_vshrink = VIPS_FLOOR(
(double) in->Ysize / target_height /
resize->gap );
} }
int_hshrink = VIPS_MAX( 1, int_hshrink ); int_hshrink = VIPS_MAX( 1, int_hshrink );

View File

@ -65,7 +65,7 @@ typedef struct _VipsShrink {
double hshrink; /* Shrink factors */ double hshrink; /* Shrink factors */
double vshrink; double vshrink;
gboolean ceil; /* Round operation */ gboolean ceil; /* Round operation */
} VipsShrink; } VipsShrink;
@ -95,21 +95,21 @@ vips_shrink_build( VipsObject *object )
/* Shrink by int factors, reduce to final size. /* Shrink by int factors, reduce to final size.
*/ */
if( vips_reducev( resample->in, &t[0], shrink->vshrink, if( vips_reducev( resample->in, &t[0], shrink->vshrink,
"gap", 1.0, "gap", 1.0,
NULL ) || NULL ) ||
vips_reduceh( t[0], &t[1], shrink->hshrink, vips_reduceh( t[0], &t[1], shrink->hshrink,
"gap", 1.0, "gap", 1.0,
NULL ) || NULL ) ||
vips_image_write( t[1], resample->out ) ) vips_image_write( t[1], resample->out ) )
return( -1 ); return( -1 );
} }
else { else {
if( vips_shrinkv( resample->in, &t[0], shrink->vshrink, if( vips_shrinkv( resample->in, &t[0], shrink->vshrink,
"ceil", shrink->ceil, "ceil", shrink->ceil,
NULL ) || NULL ) ||
vips_shrinkh( t[0], &t[1], shrink->hshrink, vips_shrinkh( t[0], &t[1], shrink->hshrink,
"ceil", shrink->ceil, "ceil", shrink->ceil,
NULL ) || NULL ) ||
vips_image_write( t[1], resample->out ) ) vips_image_write( t[1], resample->out ) )
return( -1 ); return( -1 );
} }

View File

@ -278,7 +278,8 @@ vips_shrinkh_build( VipsObject *object )
*/ */
resample->out->Xsize = shrink->ceil ? resample->out->Xsize = shrink->ceil ?
VIPS_CEIL( (double) resample->in->Xsize / shrink->hshrink ) : VIPS_CEIL( (double) resample->in->Xsize / shrink->hshrink ) :
VIPS_ROUND_UINT( (double) resample->in->Xsize / shrink->hshrink ); VIPS_ROUND_UINT(
(double) resample->in->Xsize / shrink->hshrink );
if( resample->out->Xsize <= 0 ) { if( resample->out->Xsize <= 0 ) {
vips_error( class->nickname, vips_error( class->nickname,
"%s", _( "image has shrunk to nothing" ) ); "%s", _( "image has shrunk to nothing" ) );

View File

@ -383,7 +383,8 @@ vips_shrinkv_build( VipsObject *object )
*/ */
t[2]->Ysize = shrink->ceil ? t[2]->Ysize = shrink->ceil ?
VIPS_CEIL( (double) resample->in->Ysize / shrink->vshrink ) : VIPS_CEIL( (double) resample->in->Ysize / shrink->vshrink ) :
VIPS_ROUND_UINT( (double) resample->in->Ysize / shrink->vshrink ); VIPS_ROUND_UINT(
(double) resample->in->Ysize / shrink->vshrink );
if( t[2]->Ysize <= 0 ) { if( t[2]->Ysize <= 0 ) {
vips_error( class->nickname, vips_error( class->nickname,
"%s", _( "image has shrunk to nothing" ) ); "%s", _( "image has shrunk to nothing" ) );