make jpeg pyr write work with tiff4
there was a problem with sizing tiles in chrominance subsample mode
This commit is contained in:
parent
d98f5a28fc
commit
f65f9088f6
@ -2,6 +2,7 @@
|
|||||||
- better resolution unit handling in deprecated im_vips2tiff()
|
- better resolution unit handling in deprecated im_vips2tiff()
|
||||||
- use TIFF_CFLAGS output from pkg-config (thanks Jay)
|
- use TIFF_CFLAGS output from pkg-config (thanks Jay)
|
||||||
- much faster vips_argument_map()
|
- much faster vips_argument_map()
|
||||||
|
- make jpeg pyramids work with tiff4
|
||||||
|
|
||||||
19/4/12 started 7.28.5
|
19/4/12 started 7.28.5
|
||||||
- ifthenelse blend mode was broken
|
- ifthenelse blend mode was broken
|
||||||
|
@ -126,6 +126,9 @@
|
|||||||
* 2/12/11
|
* 2/12/11
|
||||||
* - make into a simple function call ready to be wrapped as a new-style
|
* - make into a simple function call ready to be wrapped as a new-style
|
||||||
* VipsForeign class
|
* VipsForeign class
|
||||||
|
* 2/6/12
|
||||||
|
* - copy jpeg pyramid in gather in RGB mode ... tiff4 doesn't do ycbcr
|
||||||
|
* mode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -904,7 +907,8 @@ shrink_region( VipsRegion *from, VipsRect *area,
|
|||||||
/* Write a tile from a layer.
|
/* Write a tile from a layer.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
save_tile( TiffWrite *tw, TIFF *tif, VipsPel *tbuf, VipsRegion *reg, VipsRect *area )
|
save_tile( TiffWrite *tw,
|
||||||
|
TIFF *tif, VipsPel *tbuf, VipsRegion *reg, VipsRect *area )
|
||||||
{
|
{
|
||||||
/* Have to repack pixels.
|
/* Have to repack pixels.
|
||||||
*/
|
*/
|
||||||
@ -1340,9 +1344,21 @@ tiff_copy( TiffWrite *tw, TIFF *out, TIFF *in )
|
|||||||
/* TIFFTAG_JPEGQUALITY is a pesudo-tag, so we can't copy it.
|
/* TIFFTAG_JPEGQUALITY is a pesudo-tag, so we can't copy it.
|
||||||
* Set explicitly from TiffWrite.
|
* Set explicitly from TiffWrite.
|
||||||
*/
|
*/
|
||||||
if( tw->compression == COMPRESSION_JPEG )
|
if( tw->compression == COMPRESSION_JPEG ) {
|
||||||
TIFFSetField( out, TIFFTAG_JPEGQUALITY, tw->jpqual );
|
TIFFSetField( out, TIFFTAG_JPEGQUALITY, tw->jpqual );
|
||||||
|
|
||||||
|
/* Enable rgb->ycbcr conversion in the jpeg write. See also
|
||||||
|
* the photometric selection below.
|
||||||
|
*/
|
||||||
|
TIFFSetField( out, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB );
|
||||||
|
|
||||||
|
/* And we want ycbcr expanded to rgb on read. Otherwise
|
||||||
|
* TIFFTileSize() will give us the size of a chrominance
|
||||||
|
* subsampled tile.
|
||||||
|
*/
|
||||||
|
TIFFSetField( in, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB );
|
||||||
|
}
|
||||||
|
|
||||||
/* We can't copy profiles :( Set again from TiffWrite.
|
/* We can't copy profiles :( Set again from TiffWrite.
|
||||||
*/
|
*/
|
||||||
if( embed_profile( tw, out ) )
|
if( embed_profile( tw, out ) )
|
||||||
@ -1357,7 +1373,7 @@ tiff_copy( TiffWrite *tw, TIFF *out, TIFF *in )
|
|||||||
* here to save compression/decompression, but sadly it seems
|
* here to save compression/decompression, but sadly it seems
|
||||||
* not to work :-( investigate at some point.
|
* not to work :-( investigate at some point.
|
||||||
*/
|
*/
|
||||||
len = TIFFReadEncodedTile( in, tile, buf, (tsize_t) -1 );
|
len = TIFFReadEncodedTile( in, tile, buf, -1 );
|
||||||
if( len < 0 ||
|
if( len < 0 ||
|
||||||
TIFFWriteEncodedTile( out, tile, buf, len ) < 0 ) {
|
TIFFWriteEncodedTile( out, tile, buf, len ) < 0 ) {
|
||||||
vips_free( buf );
|
vips_free( buf );
|
||||||
@ -1525,7 +1541,8 @@ vips__tiff_write( VipsImage *in, const char *filename,
|
|||||||
|
|
||||||
/* Gather layers together into final pyramid file.
|
/* Gather layers together into final pyramid file.
|
||||||
*/
|
*/
|
||||||
if( tw->pyramid && gather_pyramid( tw ) ) {
|
if( tw->pyramid &&
|
||||||
|
gather_pyramid( tw ) ) {
|
||||||
free_tiff_write( tw );
|
free_tiff_write( tw );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user