use Type/Interpretation for using the format when saving
This commit is contained in:
parent
fa0514a4d4
commit
dd79cfd89d
|
@ -654,56 +654,52 @@ wtiff_write_header( Wtiff *wtiff, Layer *layer )
|
||||||
TIFFSetField( tif, TIFFTAG_BITSPERSAMPLE,
|
TIFFSetField( tif, TIFFTAG_BITSPERSAMPLE,
|
||||||
vips_format_sizeof( wtiff->im->BandFmt ) << 3 );
|
vips_format_sizeof( wtiff->im->BandFmt ) << 3 );
|
||||||
|
|
||||||
if( wtiff->im->Bands < 3 ) {
|
if (wtiff->im->Type == VIPS_INTERPRETATION_B_W ||
|
||||||
/* Mono or mono + alpha.
|
wtiff->im->Type == VIPS_INTERPRETATION_GREY16) {
|
||||||
*/
|
// Mono or mono + alpha.
|
||||||
photometric = wtiff->miniswhite ?
|
photometric = wtiff->miniswhite ?
|
||||||
PHOTOMETRIC_MINISWHITE :
|
PHOTOMETRIC_MINISWHITE :
|
||||||
PHOTOMETRIC_MINISBLACK;
|
PHOTOMETRIC_MINISBLACK;
|
||||||
colour_bands = 1;
|
colour_bands = 1;
|
||||||
}
|
}
|
||||||
|
else if( wtiff->im->Type == VIPS_INTERPRETATION_LAB ||
|
||||||
|
wtiff->im->Type == VIPS_INTERPRETATION_LABS ) {
|
||||||
|
photometric = PHOTOMETRIC_CIELAB;
|
||||||
|
colour_bands = 3;
|
||||||
|
}
|
||||||
|
else if( wtiff->im->Type == VIPS_INTERPRETATION_CMYK &&
|
||||||
|
wtiff->im->Bands >= 4 ) {
|
||||||
|
photometric = PHOTOMETRIC_SEPARATED;
|
||||||
|
TIFFSetField( tif,
|
||||||
|
TIFFTAG_INKSET, INKSET_CMYK );
|
||||||
|
colour_bands = 4;
|
||||||
|
}
|
||||||
|
else if (wtiff->im->Type == VIPS_INTERPRETATION_MULTIBAND ) {
|
||||||
|
photometric = PHOTOMETRIC_SEPARATED;
|
||||||
|
TIFFSetField(tif,
|
||||||
|
TIFFTAG_INKSET, INKSET_MULTIINK);
|
||||||
|
colour_bands = 4;
|
||||||
|
}
|
||||||
|
else if( wtiff->compression == COMPRESSION_JPEG &&
|
||||||
|
wtiff->im->Bands == 3 &&
|
||||||
|
wtiff->im->BandFmt == VIPS_FORMAT_UCHAR &&
|
||||||
|
(!wtiff->rgbjpeg && wtiff->Q < 90) ) {
|
||||||
|
/* This signals to libjpeg that it can do
|
||||||
|
* YCbCr chrominance subsampling from RGB, not
|
||||||
|
* that we will supply the image as YCbCr.
|
||||||
|
*/
|
||||||
|
photometric = PHOTOMETRIC_YCBCR;
|
||||||
|
TIFFSetField( tif, TIFFTAG_JPEGCOLORMODE,
|
||||||
|
JPEGCOLORMODE_RGB );
|
||||||
|
colour_bands = 3;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
/* Could be: RGB, CMYK, LAB, perhaps with extra alpha.
|
/* Some kind of generic multi-band image ..
|
||||||
*/
|
* save the first three bands as RGB, the rest
|
||||||
if( wtiff->im->Type == VIPS_INTERPRETATION_LAB ||
|
* as alpha.
|
||||||
wtiff->im->Type == VIPS_INTERPRETATION_LABS ) {
|
*/
|
||||||
photometric = PHOTOMETRIC_CIELAB;
|
photometric = PHOTOMETRIC_RGB;
|
||||||
colour_bands = 3;
|
colour_bands = 3;
|
||||||
}
|
|
||||||
else if( wtiff->im->Type == VIPS_INTERPRETATION_CMYK &&
|
|
||||||
wtiff->im->Bands >= 4 ) {
|
|
||||||
photometric = PHOTOMETRIC_SEPARATED;
|
|
||||||
TIFFSetField( tif,
|
|
||||||
TIFFTAG_INKSET, INKSET_CMYK );
|
|
||||||
colour_bands = 4;
|
|
||||||
}
|
|
||||||
else if (wtiff->im->Type == VIPS_INTERPRETATION_MULTIBAND ) {
|
|
||||||
photometric = PHOTOMETRIC_SEPARATED;
|
|
||||||
TIFFSetField(tif,
|
|
||||||
TIFFTAG_INKSET, INKSET_MULTIINK);
|
|
||||||
colour_bands = 4;
|
|
||||||
}
|
|
||||||
else if( wtiff->compression == COMPRESSION_JPEG &&
|
|
||||||
wtiff->im->Bands == 3 &&
|
|
||||||
wtiff->im->BandFmt == VIPS_FORMAT_UCHAR &&
|
|
||||||
(!wtiff->rgbjpeg && wtiff->Q < 90) ) {
|
|
||||||
/* This signals to libjpeg that it can do
|
|
||||||
* YCbCr chrominance subsampling from RGB, not
|
|
||||||
* that we will supply the image as YCbCr.
|
|
||||||
*/
|
|
||||||
photometric = PHOTOMETRIC_YCBCR;
|
|
||||||
TIFFSetField( tif, TIFFTAG_JPEGCOLORMODE,
|
|
||||||
JPEGCOLORMODE_RGB );
|
|
||||||
colour_bands = 3;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* Some kind of generic multi-band image ..
|
|
||||||
* save the first three bands as RGB, the rest
|
|
||||||
* as alpha.
|
|
||||||
*/
|
|
||||||
photometric = PHOTOMETRIC_RGB;
|
|
||||||
colour_bands = 3;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alpha_bands = VIPS_CLIP( 0,
|
alpha_bands = VIPS_CLIP( 0,
|
||||||
|
|
Loading…
Reference in New Issue