add file type sniffing

This commit is contained in:
John Cupitt 2016-02-08 17:04:31 +00:00
parent 5db2c64d90
commit b7030d004a
2 changed files with 28 additions and 2 deletions

2
TODO
View File

@ -2,8 +2,6 @@
- add load PDF from buffer
- add file type sniffing .. "%PDF" should be enough
- trim page edges? we often have black now
- new vips_reduce:

View File

@ -126,6 +126,33 @@ vips_foreign_load_poppler_get_flags( VipsForeignLoad *load )
return( VIPS_FOREIGN_PARTIAL );
}
static gboolean
vips_foreign_load_poppler_is_a_buffer( const void *buf, size_t len )
{
const guchar *str = (const guchar *) buf;
if( len >= 4 &&
str[0] == '%' &&
str[1] == 'P' &&
str[2] == 'D' &&
str[3] == 'F' )
return( 1 );
return( 0 );
}
static gboolean
vips_foreign_load_poppler_is_a( const char *filename )
{
unsigned char buf[4];
if( vips__get_bytes( filename, buf, 4 ) &&
vips_foreign_load_poppler_is_a_buffer( buf, 4 ) )
return( 1 );
return( 0 );
}
/* String-based metadatra fields we extract.
*/
typedef struct _VipsForeignLoadPopperMetadata {
@ -335,6 +362,7 @@ vips_foreign_load_poppler_class_init( VipsForeignLoadPopplerClass *class )
load_class->get_flags_filename =
vips_foreign_load_poppler_get_flags_filename;
load_class->get_flags = vips_foreign_load_poppler_get_flags;
load_class->is_a = vips_foreign_load_poppler_is_a;
load_class->header = vips_foreign_load_poppler_header;
load_class->load = vips_foreign_load_poppler_load;