add webp support to vips7
see https://github.com/jcupitt/libvips/issues/144
This commit is contained in:
parent
a0a6868d90
commit
0ced5cb24b
@ -5,6 +5,7 @@
|
||||
- improve im_openout() compat macro
|
||||
- more vips7 compatibility fixes, thanks steve
|
||||
- more robust vips_system()
|
||||
- add webp support to vips7
|
||||
|
||||
30/6/14 started 7.40.3
|
||||
- fix interlaced thumbnails in vipsthumbnail, thanks lovell
|
||||
|
@ -70,11 +70,13 @@ libdeprecated_la_SOURCES = \
|
||||
im_jpeg2vips.c \
|
||||
im_magick2vips.c \
|
||||
im_png2vips.c \
|
||||
im_webp2vips.c \
|
||||
im_ppm2vips.c \
|
||||
im_tiff2vips.c \
|
||||
im_vips2csv.c \
|
||||
im_vips2jpeg.c \
|
||||
im_vips2png.c \
|
||||
im_vips2webp.c \
|
||||
im_vips2ppm.c \
|
||||
im_vips2tiff.c \
|
||||
conver_dispatch.c \
|
||||
|
@ -458,6 +458,10 @@ im__format_init( void )
|
||||
extern GType vips_format_png_get_type();
|
||||
vips_format_png_get_type();
|
||||
#endif /*HAVE_PNG*/
|
||||
#ifdef HAVE_LIBWEBP
|
||||
extern GType vips_format_webp_get_type();
|
||||
vips_format_webp_get_type();
|
||||
#endif /*HAVE_LIBWEBP*/
|
||||
vips_format_csv_get_type();
|
||||
vips_format_ppm_get_type();
|
||||
vips_format_analyze_get_type();
|
||||
|
70
libvips/deprecated/im_vips2webp.c
Normal file
70
libvips/deprecated/im_vips2webp.c
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
|
||||
This file is part of VIPS.
|
||||
|
||||
VIPS is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
#define VIPS_DEBUG
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif /*HAVE_CONFIG_H*/
|
||||
#include <vips/intl.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <vips/vips.h>
|
||||
#include <vips/internal.h>
|
||||
#include <vips/debug.h>
|
||||
|
||||
int
|
||||
im_vips2webp( IMAGE *in, const char *filename )
|
||||
{
|
||||
int compression;
|
||||
int lossless;
|
||||
|
||||
char *p, *q;
|
||||
|
||||
char name[FILENAME_MAX];
|
||||
char mode[FILENAME_MAX];
|
||||
char buf[FILENAME_MAX];
|
||||
|
||||
im_filename_split( filename, name, mode );
|
||||
strcpy( buf, mode );
|
||||
p = &buf[0];
|
||||
compression = 6;
|
||||
lossless = 0;
|
||||
if( (q = im_getnextoption( &p )) )
|
||||
compression = atoi( q );
|
||||
if( (q = im_getnextoption( &p )) )
|
||||
lossless = atoi( q );
|
||||
|
||||
return( vips_webpsave( in, name,
|
||||
"Q", compression, "lossless", lossless, NULL ) );
|
||||
}
|
||||
|
114
libvips/deprecated/im_webp2vips.c
Normal file
114
libvips/deprecated/im_webp2vips.c
Normal file
@ -0,0 +1,114 @@
|
||||
/*
|
||||
|
||||
This file is part of VIPS.
|
||||
|
||||
VIPS is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
#define DEBUG
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif /*HAVE_CONFIG_H*/
|
||||
#include <vips/intl.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <vips/vips.h>
|
||||
#include <vips/internal.h>
|
||||
|
||||
#include "../foreign/webp.h"
|
||||
|
||||
static int
|
||||
webp2vips( const char *name, IMAGE *out, gboolean header_only )
|
||||
{
|
||||
char filename[FILENAME_MAX];
|
||||
char mode[FILENAME_MAX];
|
||||
|
||||
im_filename_split( name, filename, mode );
|
||||
|
||||
#ifdef HAVE_LIBWEBP
|
||||
if( header_only ) {
|
||||
if( vips__webp_read_file_header( filename, out ) )
|
||||
return( -1 );
|
||||
}
|
||||
else {
|
||||
if( vips__webp_read_file( filename, out ) )
|
||||
return( -1 );
|
||||
}
|
||||
#else
|
||||
vips_error( "im_webp2vips",
|
||||
"%s", _( "no webp support in your libvips" ) );
|
||||
|
||||
return( -1 );
|
||||
#endif /*HAVE_LIBWEBP*/
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
int
|
||||
im_webp2vips( const char *name, IMAGE *out )
|
||||
{
|
||||
return( webp2vips( name, out, FALSE ) );
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBWEBP
|
||||
|
||||
static int
|
||||
im_webp2vips_header( const char *name, IMAGE *out )
|
||||
{
|
||||
return( webp2vips( name, out, TRUE ) );
|
||||
}
|
||||
|
||||
static const char *webp_suffs[] = { ".webp", NULL };
|
||||
|
||||
typedef VipsFormat VipsFormatWebp;
|
||||
typedef VipsFormatClass VipsFormatWebpClass;
|
||||
|
||||
static void
|
||||
vips_format_webp_class_init( VipsFormatWebpClass *class )
|
||||
{
|
||||
VipsObjectClass *object_class = (VipsObjectClass *) class;
|
||||
VipsFormatClass *format_class = (VipsFormatClass *) class;
|
||||
|
||||
object_class->nickname = "webp";
|
||||
object_class->description = _( "webp" );
|
||||
|
||||
format_class->is_a = vips__iswebp;
|
||||
format_class->header = im_webp2vips_header;
|
||||
format_class->load = im_webp2vips;
|
||||
format_class->save = im_vips2webp;
|
||||
format_class->suffs = webp_suffs;
|
||||
}
|
||||
|
||||
static void
|
||||
vips_format_webp_init( VipsFormatWebp *object )
|
||||
{
|
||||
}
|
||||
|
||||
G_DEFINE_TYPE( VipsFormatWebp, vips_format_webp, VIPS_TYPE_FORMAT );
|
||||
|
||||
#endif /*HAVE_LIBWEBP*/
|
||||
|
@ -153,6 +153,9 @@ int im_vips2png( VipsImage *in, const char *filename );
|
||||
int im_vips2bufpng( VipsImage *in, VipsImage *out,
|
||||
int compression, int interlace, char **obuf, size_t *olen );
|
||||
|
||||
int im_webp2vips( const char *filename, VipsImage *out );
|
||||
int im_vips2webp( VipsImage *in, const char *filename );
|
||||
|
||||
int im_raw2vips( const char *filename, VipsImage *out,
|
||||
int width, int height, int bpp, int offset );
|
||||
int im_vips2raw( VipsImage *in, int fd );
|
||||
|
Loading…
Reference in New Issue
Block a user