write props to a separate file

and dump all vips props
This commit is contained in:
John Cupitt 2014-06-26 09:30:36 +01:00
parent e9a0acfa9b
commit 94f92fc014
1 changed files with 42 additions and 24 deletions

View File

@ -594,30 +594,9 @@ pyramid_build( VipsForeignSaveDz *dz, Layer *above,
return( layer );
}
static void *
write_dzi_field( VipsImage *image, const char *field, GValue *value, void *a )
{
GsfOutput *out = (GsfOutput *) a;
if( vips_isprefix( "openslide.", field ) &&
!vips_isprefix( "openslide.level", field ) ) {
char *str_value;
str_value = g_strdup_value_contents( value );
gsf_output_printf( out, " %s=\"%s\"\n",
field + 10, str_value );
g_free( str_value );
}
return( NULL );
}
static int
write_dzi( VipsForeignSaveDz *dz )
{
VipsForeignSave *save = (VipsForeignSave *) dz;
GsfOutput *out;
char buf[VIPS_PATH_MAX];
char *p;
@ -640,9 +619,6 @@ write_dzi( VipsForeignSaveDz *dz )
gsf_output_printf( out, " Height=\"%d\"\n", dz->layer->height );
gsf_output_printf( out, " Width=\"%d\"\n", dz->layer->width );
gsf_output_printf( out, " />\n" );
gsf_output_printf( out, " <Openslide\n" );
(void) vips_image_map( save->ready, write_dzi_field, out );
gsf_output_printf( out, " />\n" );
gsf_output_printf( out, "</Image>\n" );
(void) gsf_output_close( out );
@ -722,6 +698,45 @@ write_blank( VipsForeignSaveDz *dz )
return( 0 );
}
static void *
write_vips_property( VipsImage *image,
const char *field, GValue *value, void *a )
{
GsfOutput *out = (GsfOutput *) a;
char *str_value;
str_value = g_strdup_value_contents( value );
gsf_output_printf( out, " <name>%s</name>\n", field );
gsf_output_printf( out, " <value>%s</value>\n", str_value );
g_free( str_value );
return( NULL );
}
static int
write_vips_properties( VipsForeignSaveDz *dz )
{
VipsForeignSave *save = (VipsForeignSave *) dz;
GsfOutput *out;
out = vips_gsf_path( dz->tree,
"vips-properties.xml", dz->root_name, NULL );
gsf_output_printf( out,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
gsf_output_printf( out, "<image>\n" );
gsf_output_printf( out, " <properties>\n" );
(void) vips_image_map( save->ready, write_vips_property, out );
gsf_output_printf( out, " </properties>\n" );
gsf_output_printf( out, "</image>\n" );
(void) gsf_output_close( out );
g_object_unref( out );
return( 0 );
}
/* Generate area @target in @to using pixels in @from. VIPS_CODING_LABQ only.
*/
static void
@ -1651,6 +1666,9 @@ vips_foreign_save_dz_build( VipsObject *object )
return( -1 );
}
if( write_vips_properties( dz ) )
return( -1 );
if( vips_gsf_tree_close( dz->tree ) )
return( -1 );