new tiff writer builds
This commit is contained in:
parent
0497fceb15
commit
47fdd3ae6d
2
TODO
2
TODO
|
@ -1,4 +1,4 @@
|
||||||
- dowes the tiff writer support "none" for the profile?
|
- does the tiff writer support "none" for the profile?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ C_LIB =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
foreign \
|
|
||||||
include \
|
include \
|
||||||
|
foreign \
|
||||||
arithmetic \
|
arithmetic \
|
||||||
resample \
|
resample \
|
||||||
colour \
|
colour \
|
||||||
|
|
|
@ -81,6 +81,8 @@ vips_foreign_save_tiff_build( VipsObject *object )
|
||||||
VipsForeignSave *save = (VipsForeignSave *) object;
|
VipsForeignSave *save = (VipsForeignSave *) object;
|
||||||
VipsForeignSaveTiff *tiff = (VipsForeignSaveTiff *) object;
|
VipsForeignSaveTiff *tiff = (VipsForeignSaveTiff *) object;
|
||||||
|
|
||||||
|
char *p;
|
||||||
|
|
||||||
if( VIPS_OBJECT_CLASS( vips_foreign_save_tiff_parent_class )->
|
if( VIPS_OBJECT_CLASS( vips_foreign_save_tiff_parent_class )->
|
||||||
build( object ) )
|
build( object ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
@ -88,25 +90,27 @@ vips_foreign_save_tiff_build( VipsObject *object )
|
||||||
/* Default xres/yres to the values in the image.
|
/* Default xres/yres to the values in the image.
|
||||||
*/
|
*/
|
||||||
if( !vips_argument_get_assigned( object, "xres" ) )
|
if( !vips_argument_get_assigned( object, "xres" ) )
|
||||||
tiff->xres = save->read->Xres * 10.0;
|
tiff->xres = save->ready->Xres * 10.0;
|
||||||
if( !vips_argument_get_assigned( object, "yres" ) )
|
if( !vips_argument_get_assigned( object, "yres" ) )
|
||||||
tiff->yres = save->read->Yres * 10.0;
|
tiff->yres = save->ready->Yres * 10.0;
|
||||||
if( !vips_argument_get_assigned( object, "resunit" ) &&
|
if( !vips_argument_get_assigned( object, "resunit" ) &&
|
||||||
vips_image_get_typeof( im, VIPS_META_RESOLUTION_UNIT ) &&
|
vips_image_get_typeof( save->ready,
|
||||||
!im_meta_get_string( im, VIPS_META_RESOLUTION_UNIT, &p ) &&
|
VIPS_META_RESOLUTION_UNIT ) &&
|
||||||
|
!vips_image_get_string( save->ready,
|
||||||
|
VIPS_META_RESOLUTION_UNIT, &p ) &&
|
||||||
vips_isprefix( "in", p ) ) {
|
vips_isprefix( "in", p ) ) {
|
||||||
tiff->resunit = VIPS_FOREIGN_TIFF_RESUNIT_INCH;
|
tiff->resunit = VIPS_FOREIGN_TIFF_RESUNIT_INCH;
|
||||||
tiff->xres *= 2.54;
|
tiff->xres *= 2.54;
|
||||||
tiff->yres *= 2.54;
|
tiff->yres *= 2.54;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( vips__tiff_write( save->ready, file->filename,
|
if( vips__tiff_write( save->ready, tiff->filename,
|
||||||
tiff->compression, tiff->Q, tiff->predictor,
|
tiff->compression, tiff->Q, tiff->predictor,
|
||||||
tiff->profile,
|
tiff->profile,
|
||||||
tiff->tile, tiff->tile_width, tiff->tile_height,
|
tiff->tile, tiff->tile_width, tiff->tile_height,
|
||||||
tiff->pyramid,
|
tiff->pyramid,
|
||||||
tiff->squash,
|
tiff->squash,
|
||||||
tiff->xres, tiff->yres,
|
tiff->resunit, tiff->xres, tiff->yres,
|
||||||
tiff->bigtiff ) )
|
tiff->bigtiff ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
|
@ -115,13 +119,22 @@ vips_foreign_save_tiff_build( VipsObject *object )
|
||||||
|
|
||||||
static const char *tiff_suffs[] = { ".tif", ".tiff", NULL };
|
static const char *tiff_suffs[] = { ".tif", ".tiff", NULL };
|
||||||
|
|
||||||
#define UC VIPS_FORMAT_UCHAR
|
/* Save a bit of typing.
|
||||||
|
|
||||||
/* Type promotion for save ... just always go to uchar.
|
|
||||||
*/
|
*/
|
||||||
|
#define UC VIPS_FORMAT_UCHAR
|
||||||
|
#define C VIPS_FORMAT_CHAR
|
||||||
|
#define US VIPS_FORMAT_USHORT
|
||||||
|
#define S VIPS_FORMAT_SHORT
|
||||||
|
#define UI VIPS_FORMAT_UINT
|
||||||
|
#define I VIPS_FORMAT_INT
|
||||||
|
#define F VIPS_FORMAT_FLOAT
|
||||||
|
#define X VIPS_FORMAT_COMPLEX
|
||||||
|
#define D VIPS_FORMAT_DOUBLE
|
||||||
|
#define DX VIPS_FORMAT_DPCOMPLEX
|
||||||
|
|
||||||
static int bandfmt_tiff[10] = {
|
static int bandfmt_tiff[10] = {
|
||||||
/* UC C US S UI I F X D DX */
|
/* UC C US S UI I F X D DX */
|
||||||
UC, UC, UC, UC, UC, UC, UC, UC, UC, UC
|
UC, UC, US, S, US, US, F, F, F, F
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -129,6 +142,7 @@ vips_foreign_save_tiff_class_init( VipsForeignSaveTiffClass *class )
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
|
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
|
||||||
VipsObjectClass *object_class = (VipsObjectClass *) class;
|
VipsObjectClass *object_class = (VipsObjectClass *) class;
|
||||||
|
VipsForeignClass *foreign_class = (VipsForeignClass *) class;
|
||||||
VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
|
VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
|
||||||
|
|
||||||
gobject_class->set_property = vips_object_set_property;
|
gobject_class->set_property = vips_object_set_property;
|
||||||
|
@ -136,18 +150,18 @@ vips_foreign_save_tiff_class_init( VipsForeignSaveTiffClass *class )
|
||||||
|
|
||||||
object_class->nickname = "tiffsave";
|
object_class->nickname = "tiffsave";
|
||||||
object_class->description = _( "save image to tiff file" );
|
object_class->description = _( "save image to tiff file" );
|
||||||
object_class->build = vips_foreign_save_tiff_file_build;
|
object_class->build = vips_foreign_save_tiff_build;
|
||||||
|
|
||||||
foreign_class->suffs = vips__tiff_suffs;
|
foreign_class->suffs = tiff_suffs;
|
||||||
|
|
||||||
save_class->saveable = VIPS_SAVEABLE_RGB_CMYK;
|
save_class->saveable = VIPS_SAVEABLE_ANY;
|
||||||
save_class->format_table = bandfmt_tiff;
|
save_class->format_table = bandfmt_tiff;
|
||||||
|
|
||||||
VIPS_ARG_STRING( class, "filename", 1,
|
VIPS_ARG_STRING( class, "filename", 1,
|
||||||
_( "Filename" ),
|
_( "Filename" ),
|
||||||
_( "Filename to save to" ),
|
_( "Filename to save to" ),
|
||||||
VIPS_ARGUMENT_REQUIRED_INPUT,
|
VIPS_ARGUMENT_REQUIRED_INPUT,
|
||||||
G_STRUCT_OFFSET( VipsForeignSaveTiffFile, filename ),
|
G_STRUCT_OFFSET( VipsForeignSaveTiff, filename ),
|
||||||
NULL );
|
NULL );
|
||||||
|
|
||||||
VIPS_ARG_ENUM( class, "compression", 6,
|
VIPS_ARG_ENUM( class, "compression", 6,
|
||||||
|
@ -184,7 +198,7 @@ vips_foreign_save_tiff_class_init( VipsForeignSaveTiffClass *class )
|
||||||
_( "Tile" ),
|
_( "Tile" ),
|
||||||
_( "Write a tiled tiff" ),
|
_( "Write a tiled tiff" ),
|
||||||
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
||||||
G_STRUCT_OFFSET( VipsForeignSaveTiff, tiff ),
|
G_STRUCT_OFFSET( VipsForeignSaveTiff, tile ),
|
||||||
FALSE );
|
FALSE );
|
||||||
|
|
||||||
VIPS_ARG_INT( class, "tile_width", 11,
|
VIPS_ARG_INT( class, "tile_width", 11,
|
||||||
|
@ -241,7 +255,7 @@ vips_foreign_save_tiff_class_init( VipsForeignSaveTiffClass *class )
|
||||||
_( "Bigtiff" ),
|
_( "Bigtiff" ),
|
||||||
_( "Write a bigtiff image" ),
|
_( "Write a bigtiff image" ),
|
||||||
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
||||||
G_STRUCT_OFFSET( VipsForeignSaveTiff, bigtif ),
|
G_STRUCT_OFFSET( VipsForeignSaveTiff, bigtiff ),
|
||||||
FALSE );
|
FALSE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1222,7 +1222,6 @@ make_tiff_write( IMAGE *im, const char *filename,
|
||||||
gboolean bigtiff )
|
gboolean bigtiff )
|
||||||
{
|
{
|
||||||
TiffWrite *tw;
|
TiffWrite *tw;
|
||||||
char *p, *q, *r;
|
|
||||||
|
|
||||||
if( !(tw = IM_NEW( im, TiffWrite )) )
|
if( !(tw = IM_NEW( im, TiffWrite )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
@ -1478,14 +1477,10 @@ vips__tiff_write( VipsImage *in, const char *filename,
|
||||||
/* Make output image. If this is a pyramid, write the base image to
|
/* Make output image. If this is a pyramid, write the base image to
|
||||||
* tmp/xx.tif rather than fred.tif.
|
* tmp/xx.tif rather than fred.tif.
|
||||||
*/
|
*/
|
||||||
if( !(tw = make_tiff_write( in, filename
|
if( !(tw = make_tiff_write( in, filename,
|
||||||
tiff->compression, tiff->Q, tiff->predictor,
|
compression, Q, predictor, profile,
|
||||||
tiff->profile,
|
tile, tile_width, tile_height, pyramid, squash,
|
||||||
tiff->tile, tiff->tile_width, tiff->tile_height,
|
resunit, xres, yres, bigtiff )) )
|
||||||
tiff->pyramid,
|
|
||||||
tiff->squash,
|
|
||||||
tiff->resunit, tiff->xres, tiff->yres,
|
|
||||||
tiff->bigtiff )) )
|
|
||||||
return( -1 );
|
return( -1 );
|
||||||
if( tw->pyramid ) {
|
if( tw->pyramid ) {
|
||||||
if( !(tw->bname = im__temp_name( "%s.tif" )) ||
|
if( !(tw->bname = im__temp_name( "%s.tif" )) ||
|
||||||
|
|
|
@ -11,6 +11,12 @@ GType vips_foreign_flags_get_type (void) G_GNUC_CONST;
|
||||||
#define VIPS_TYPE_FOREIGN_FLAGS (vips_foreign_flags_get_type())
|
#define VIPS_TYPE_FOREIGN_FLAGS (vips_foreign_flags_get_type())
|
||||||
GType vips_saveable_get_type (void) G_GNUC_CONST;
|
GType vips_saveable_get_type (void) G_GNUC_CONST;
|
||||||
#define VIPS_TYPE_SAVEABLE (vips_saveable_get_type())
|
#define VIPS_TYPE_SAVEABLE (vips_saveable_get_type())
|
||||||
|
GType vips_foreign_tiff_compression_get_type (void) G_GNUC_CONST;
|
||||||
|
#define VIPS_TYPE_FOREIGN_TIFF_COMPRESSION (vips_foreign_tiff_compression_get_type())
|
||||||
|
GType vips_foreign_tiff_predictor_get_type (void) G_GNUC_CONST;
|
||||||
|
#define VIPS_TYPE_FOREIGN_TIFF_PREDICTOR (vips_foreign_tiff_predictor_get_type())
|
||||||
|
GType vips_foreign_tiff_resunit_get_type (void) G_GNUC_CONST;
|
||||||
|
#define VIPS_TYPE_FOREIGN_TIFF_RESUNIT (vips_foreign_tiff_resunit_get_type())
|
||||||
/* enumerations from "../../../libvips/include/vips/arithmetic.h" */
|
/* enumerations from "../../../libvips/include/vips/arithmetic.h" */
|
||||||
GType vips_operation_math_get_type (void) G_GNUC_CONST;
|
GType vips_operation_math_get_type (void) G_GNUC_CONST;
|
||||||
#define VIPS_TYPE_OPERATION_MATH (vips_operation_math_get_type())
|
#define VIPS_TYPE_OPERATION_MATH (vips_operation_math_get_type())
|
||||||
|
|
|
@ -275,7 +275,7 @@ typedef enum {
|
||||||
VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL = 2,
|
VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL = 2,
|
||||||
VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT = 3,
|
VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT = 3,
|
||||||
VIPS_FOREIGN_TIFF_PREDICTOR_LAST
|
VIPS_FOREIGN_TIFF_PREDICTOR_LAST
|
||||||
} VipsForeignTiffPrediction;
|
} VipsForeignTiffPredictor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VipsForeignTiffResunit:
|
* VipsForeignTiffResunit:
|
||||||
|
|
|
@ -44,6 +44,65 @@ vips_saveable_get_type( void )
|
||||||
|
|
||||||
return( etype );
|
return( etype );
|
||||||
}
|
}
|
||||||
|
GType
|
||||||
|
vips_foreign_tiff_compression_get_type( void )
|
||||||
|
{
|
||||||
|
static GType etype = 0;
|
||||||
|
|
||||||
|
if( etype == 0 ) {
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{VIPS_FOREIGN_TIFF_COMPRESSION_NONE, "VIPS_FOREIGN_TIFF_COMPRESSION_NONE", "none"},
|
||||||
|
{VIPS_FOREIGN_TIFF_COMPRESSION_JPEG, "VIPS_FOREIGN_TIFF_COMPRESSION_JPEG", "jpeg"},
|
||||||
|
{VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE, "VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE", "deflate"},
|
||||||
|
{VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS, "VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS", "packbits"},
|
||||||
|
{VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4, "VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4", "ccittfax4"},
|
||||||
|
{VIPS_FOREIGN_TIFF_COMPRESSION_LZW, "VIPS_FOREIGN_TIFF_COMPRESSION_LZW", "lzw"},
|
||||||
|
{VIPS_FOREIGN_TIFF_COMPRESSION_LAST, "VIPS_FOREIGN_TIFF_COMPRESSION_LAST", "last"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
etype = g_enum_register_static( "VipsForeignTiffCompression", values );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( etype );
|
||||||
|
}
|
||||||
|
GType
|
||||||
|
vips_foreign_tiff_predictor_get_type( void )
|
||||||
|
{
|
||||||
|
static GType etype = 0;
|
||||||
|
|
||||||
|
if( etype == 0 ) {
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{VIPS_FOREIGN_TIFF_PREDICTOR_NONE, "VIPS_FOREIGN_TIFF_PREDICTOR_NONE", "none"},
|
||||||
|
{VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL, "VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL", "horizontal"},
|
||||||
|
{VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT, "VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT", "float"},
|
||||||
|
{VIPS_FOREIGN_TIFF_PREDICTOR_LAST, "VIPS_FOREIGN_TIFF_PREDICTOR_LAST", "last"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
etype = g_enum_register_static( "VipsForeignTiffPredictor", values );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( etype );
|
||||||
|
}
|
||||||
|
GType
|
||||||
|
vips_foreign_tiff_resunit_get_type( void )
|
||||||
|
{
|
||||||
|
static GType etype = 0;
|
||||||
|
|
||||||
|
if( etype == 0 ) {
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{VIPS_FOREIGN_TIFF_RESUNIT_CM, "VIPS_FOREIGN_TIFF_RESUNIT_CM", "cm"},
|
||||||
|
{VIPS_FOREIGN_TIFF_RESUNIT_INCH, "VIPS_FOREIGN_TIFF_RESUNIT_INCH", "inch"},
|
||||||
|
{VIPS_FOREIGN_TIFF_RESUNIT_LAST, "VIPS_FOREIGN_TIFF_RESUNIT_LAST", "last"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
etype = g_enum_register_static( "VipsForeignTiffResunit", values );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( etype );
|
||||||
|
}
|
||||||
/* enumerations from "../../libvips/include/vips/conversion.h" */
|
/* enumerations from "../../libvips/include/vips/conversion.h" */
|
||||||
GType
|
GType
|
||||||
vips_extend_get_type( void )
|
vips_extend_get_type( void )
|
||||||
|
|
Loading…
Reference in New Issue