get/set resolution in png files
This commit is contained in:
parent
6425cd2660
commit
ea99beb727
@ -3,6 +3,7 @@
|
|||||||
- faster tiff read for some common cases
|
- faster tiff read for some common cases
|
||||||
- faster im_tile_cache()
|
- faster im_tile_cache()
|
||||||
- add -lstdc++ to vips-7.xx.pc, if we used it
|
- add -lstdc++ to vips-7.xx.pc, if we used it
|
||||||
|
- im_vips2png() / im_png2vips() set / get png resolution (thanks Zhiyu Wu)
|
||||||
|
|
||||||
30/11/10 started 7.24.0
|
30/11/10 started 7.24.0
|
||||||
- bump for new stable
|
- bump for new stable
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
* - small cleanups
|
* - small cleanups
|
||||||
* 4/2/10
|
* 4/2/10
|
||||||
* - gtkdoc
|
* - gtkdoc
|
||||||
|
* 8/1/11
|
||||||
|
* - get png resolution (thanks Zhiyu Wu)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -229,6 +231,9 @@ static int
|
|||||||
png2vips( Read *read, int header_only )
|
png2vips( Read *read, int header_only )
|
||||||
{
|
{
|
||||||
int bands, bpp, type;
|
int bands, bpp, type;
|
||||||
|
png_uint_32 res_x, res_y;
|
||||||
|
int unit_type;
|
||||||
|
double Xres, Yres;
|
||||||
|
|
||||||
if( setjmp( read->pPng->jmpbuf ) )
|
if( setjmp( read->pPng->jmpbuf ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
@ -296,13 +301,32 @@ png2vips( Read *read, int header_only )
|
|||||||
if( read->pInfo->bit_depth > 8 && !im_amiMSBfirst() )
|
if( read->pInfo->bit_depth > 8 && !im_amiMSBfirst() )
|
||||||
png_set_swap( read->pPng );
|
png_set_swap( read->pPng );
|
||||||
|
|
||||||
|
/* Get resolution. I'm not sure what we should do for UNKNOWN, since
|
||||||
|
* vips is always pixels/mm.
|
||||||
|
*/
|
||||||
|
png_get_pHYs( read->pPng, read->pInfo,
|
||||||
|
&res_x, &res_y, &unit_type );
|
||||||
|
switch( unit_type ) {
|
||||||
|
case PNG_RESOLUTION_METER:
|
||||||
|
Xres = res_x / 1000.0;
|
||||||
|
Yres = res_y / 1000.0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Xres = res_x;
|
||||||
|
Yres = res_y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set VIPS header.
|
/* Set VIPS header.
|
||||||
*/
|
*/
|
||||||
im_initdesc( read->out,
|
im_initdesc( read->out,
|
||||||
read->pInfo->width, read->pInfo->height, bands,
|
read->pInfo->width, read->pInfo->height, bands,
|
||||||
bpp == 1 ? IM_BBITS_BYTE : IM_BBITS_SHORT,
|
bpp == 1 ? IM_BBITS_BYTE : IM_BBITS_SHORT,
|
||||||
bpp == 1 ? IM_BANDFMT_UCHAR : IM_BANDFMT_USHORT,
|
bpp == 1 ? IM_BANDFMT_UCHAR : IM_BANDFMT_USHORT,
|
||||||
IM_CODING_NONE, type, 1.0, 1.0, 0, 0 );
|
IM_CODING_NONE, type,
|
||||||
|
Xres, Yres,
|
||||||
|
0, 0 );
|
||||||
|
|
||||||
if( !header_only ) {
|
if( !header_only ) {
|
||||||
if( png_set_interlace_handling( read->pPng ) > 1 ) {
|
if( png_set_interlace_handling( read->pPng ) > 1 ) {
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
* - lololo but broke 8-bit save, fixed again
|
* - lololo but broke 8-bit save, fixed again
|
||||||
* 20/7/10 Tim Elliott
|
* 20/7/10 Tim Elliott
|
||||||
* - added im_vips2bufpng()
|
* - added im_vips2bufpng()
|
||||||
|
* 8/1/11
|
||||||
|
* - set png resolution (thanks Zhiyu Wu)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -255,6 +257,12 @@ write_vips( Write *write, int compress, int interlace )
|
|||||||
g_assert( 0 );
|
g_assert( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set resolution. libpnbg uses pixels per meter.
|
||||||
|
*/
|
||||||
|
png_set_pHYs( write->pPng, write->pInfo,
|
||||||
|
IM_RINT( in->Xres * 1000 ), IM_RINT( in->Yres * 1000 ),
|
||||||
|
PNG_RESOLUTION_METER );
|
||||||
|
|
||||||
png_write_info( write->pPng, write->pInfo );
|
png_write_info( write->pPng, write->pInfo );
|
||||||
|
|
||||||
/* If we're an intel byte order CPU and this is a 16bit image, we need
|
/* If we're an intel byte order CPU and this is a 16bit image, we need
|
||||||
|
Loading…
Reference in New Issue
Block a user