enable alpha in heifsave
Check for image alpha and enable it. There seem to be some non-transparent tiles, curiously. See https://github.com/libvips/libvips/issues/1411
This commit is contained in:
parent
75b45cc2ef
commit
da8cee048f
@ -11,7 +11,7 @@
|
|||||||
- add vips_switch() / vips_case() ... fast many-way ifthenelse
|
- add vips_switch() / vips_case() ... fast many-way ifthenelse
|
||||||
- better const handling for arithmetic operators fixes comparisons against out
|
- better const handling for arithmetic operators fixes comparisons against out
|
||||||
of range values
|
of range values
|
||||||
- handle alpha in heifload [meyermarcel]
|
- handle alpha in heifload / heifsave [meyermarcel]
|
||||||
|
|
||||||
31/8/19 started 8.8.3
|
31/8/19 started 8.8.3
|
||||||
- revert sharpen restoring the input colourspace
|
- revert sharpen restoring the input colourspace
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
* - from niftisave.c
|
* - from niftisave.c
|
||||||
* 3/7/19 [lovell]
|
* 3/7/19 [lovell]
|
||||||
* - add "compression" option
|
* - add "compression" option
|
||||||
|
* 1/9/19 [meyermarcel]
|
||||||
|
* - save alpha when necessary
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -199,10 +201,8 @@ vips_foreign_save_heif_write_page( VipsForeignSaveHeif *heif, int page )
|
|||||||
|
|
||||||
#ifdef HAVE_HEIF_ENCODING_OPTIONS_ALLOC
|
#ifdef HAVE_HEIF_ENCODING_OPTIONS_ALLOC
|
||||||
options = heif_encoding_options_alloc();
|
options = heif_encoding_options_alloc();
|
||||||
/* FIXME .. should be an option, though I don't know of any way to
|
if( vips_image_hasalpha( save->ready ) )
|
||||||
* test it
|
options->save_alpha_channel = 1;
|
||||||
*/
|
|
||||||
options->save_alpha_channel = 1;
|
|
||||||
#else /*!HAVE_HEIF_ENCODING_OPTIONS_ALLOC*/
|
#else /*!HAVE_HEIF_ENCODING_OPTIONS_ALLOC*/
|
||||||
options = NULL;
|
options = NULL;
|
||||||
#endif /*HAVE_HEIF_ENCODING_OPTIONS_ALLOC*/
|
#endif /*HAVE_HEIF_ENCODING_OPTIONS_ALLOC*/
|
||||||
@ -294,6 +294,7 @@ vips_foreign_save_heif_build( VipsObject *object )
|
|||||||
VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) object;
|
VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) object;
|
||||||
|
|
||||||
struct heif_error error;
|
struct heif_error error;
|
||||||
|
enum heif_chroma chroma;
|
||||||
|
|
||||||
if( VIPS_OBJECT_CLASS( vips_foreign_save_heif_parent_class )->
|
if( VIPS_OBJECT_CLASS( vips_foreign_save_heif_parent_class )->
|
||||||
build( object ) )
|
build( object ) )
|
||||||
@ -335,8 +336,10 @@ vips_foreign_save_heif_build( VipsObject *object )
|
|||||||
/* Make a heif image the size of a page. We send sink_disc() output
|
/* Make a heif image the size of a page. We send sink_disc() output
|
||||||
* here and write a frame each time it fills.
|
* here and write a frame each time it fills.
|
||||||
*/
|
*/
|
||||||
|
chroma = vips_image_hasalpha( save->ready ) ?
|
||||||
|
heif_chroma_interleaved_RGBA : heif_chroma_interleaved_RGB;
|
||||||
error = heif_image_create( heif->page_width, heif->page_height,
|
error = heif_image_create( heif->page_width, heif->page_height,
|
||||||
heif_colorspace_RGB, heif_chroma_interleaved_RGB, &heif->img );
|
heif_colorspace_RGB, chroma, &heif->img );
|
||||||
if( error.code ) {
|
if( error.code ) {
|
||||||
vips__heif_error( &error );
|
vips__heif_error( &error );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
@ -394,7 +397,7 @@ vips_foreign_save_heif_class_init( VipsForeignSaveHeifClass *class )
|
|||||||
|
|
||||||
foreign_class->suffs = vips__heif_suffs;
|
foreign_class->suffs = vips__heif_suffs;
|
||||||
|
|
||||||
save_class->saveable = VIPS_SAVEABLE_RGB;
|
save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY;
|
||||||
save_class->format_table = vips_heif_bandfmt;
|
save_class->format_table = vips_heif_bandfmt;
|
||||||
|
|
||||||
VIPS_ARG_INT( class, "Q", 10,
|
VIPS_ARG_INT( class, "Q", 10,
|
||||||
|
Loading…
Reference in New Issue
Block a user