From 171791ff60cebff41a353d53bf188bd194fa8c9c Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Tue, 10 Jun 2014 14:09:35 +0100 Subject: [PATCH] remove suffix from tiles see https://github.com/jcupitt/libvips/issues/129 --- libvips/foreign/dzsave.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/libvips/foreign/dzsave.c b/libvips/foreign/dzsave.c index 94e8510e..0456bd89 100644 --- a/libvips/foreign/dzsave.c +++ b/libvips/foreign/dzsave.c @@ -412,6 +412,11 @@ struct _VipsForeignSaveDz { * stuff, eg. $(basename)_files, etc. */ char *root_name; + + /* @suffix, but without any options. So @suffix == ".jpg[Q=90]" + * becomes ".jpg". + */ + char *file_suffix; }; typedef VipsForeignSaveClass VipsForeignSaveDzClass; @@ -441,6 +446,7 @@ vips_foreign_save_dz_dispose( GObject *gobject ) VIPS_FREE( dz->basename ); VIPS_FREE( dz->dirname ); VIPS_FREE( dz->root_name ); + VIPS_FREE( dz->file_suffix ); G_OBJECT_CLASS( vips_foreign_save_dz_parent_class )->dispose( gobject ); } @@ -931,7 +937,7 @@ tile_name( Layer *layer, int x, int y ) case VIPS_FOREIGN_DZ_LAYOUT_DZ: vips_snprintf( dirname, VIPS_PATH_MAX, "%d", layer->n ); vips_snprintf( name, VIPS_PATH_MAX, - "%d_%d%s", x, y, dz->suffix ); + "%d_%d%s", x, y, dz->file_suffix ); out = vips_gsf_path( dz->tree, name, dz->root_name, dirname, NULL ); @@ -957,7 +963,7 @@ tile_name( Layer *layer, int x, int y ) vips_snprintf( dirname, VIPS_PATH_MAX, "TileGroup%d", n / 256 ); vips_snprintf( name, VIPS_PATH_MAX, - "%d-%d-%d%s", layer->n, x, y, dz->suffix ); + "%d-%d-%d%s", layer->n, x, y, dz->file_suffix ); /* Used at the end in ImageProperties.xml */ @@ -970,7 +976,8 @@ tile_name( Layer *layer, int x, int y ) case VIPS_FOREIGN_DZ_LAYOUT_GOOGLE: vips_snprintf( dirname, VIPS_PATH_MAX, "%d", layer->n ); vips_snprintf( dirname2, VIPS_PATH_MAX, "%d", y ); - vips_snprintf( name, VIPS_PATH_MAX, "%d%s", x, dz->suffix ); + vips_snprintf( name, VIPS_PATH_MAX, + "%d%s", x, dz->file_suffix ); out = vips_gsf_path( dz->tree, name, dirname, dirname2, NULL ); @@ -1516,6 +1523,16 @@ vips_foreign_save_dz_build( VipsObject *object ) else dz->root_name = g_strdup( dz->basename ); + /* Drop any options from @suffix. + */ +{ + char filename[VIPS_PATH_MAX]; + char option_string[VIPS_PATH_MAX]; + + vips__filename_split8( dz->suffix, filename, option_string ); + dz->file_suffix = g_strdup( filename ); +} + /* Make the thing we write the tiles into. */ switch( dz->container ) {