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
|
- improve im_openout() compat macro
|
||||||
- more vips7 compatibility fixes, thanks steve
|
- more vips7 compatibility fixes, thanks steve
|
||||||
- more robust vips_system()
|
- more robust vips_system()
|
||||||
|
- add webp support to vips7
|
||||||
|
|
||||||
30/6/14 started 7.40.3
|
30/6/14 started 7.40.3
|
||||||
- fix interlaced thumbnails in vipsthumbnail, thanks lovell
|
- fix interlaced thumbnails in vipsthumbnail, thanks lovell
|
||||||
|
@ -70,11 +70,13 @@ libdeprecated_la_SOURCES = \
|
|||||||
im_jpeg2vips.c \
|
im_jpeg2vips.c \
|
||||||
im_magick2vips.c \
|
im_magick2vips.c \
|
||||||
im_png2vips.c \
|
im_png2vips.c \
|
||||||
|
im_webp2vips.c \
|
||||||
im_ppm2vips.c \
|
im_ppm2vips.c \
|
||||||
im_tiff2vips.c \
|
im_tiff2vips.c \
|
||||||
im_vips2csv.c \
|
im_vips2csv.c \
|
||||||
im_vips2jpeg.c \
|
im_vips2jpeg.c \
|
||||||
im_vips2png.c \
|
im_vips2png.c \
|
||||||
|
im_vips2webp.c \
|
||||||
im_vips2ppm.c \
|
im_vips2ppm.c \
|
||||||
im_vips2tiff.c \
|
im_vips2tiff.c \
|
||||||
conver_dispatch.c \
|
conver_dispatch.c \
|
||||||
|
@ -458,6 +458,10 @@ im__format_init( void )
|
|||||||
extern GType vips_format_png_get_type();
|
extern GType vips_format_png_get_type();
|
||||||
vips_format_png_get_type();
|
vips_format_png_get_type();
|
||||||
#endif /*HAVE_PNG*/
|
#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_csv_get_type();
|
||||||
vips_format_ppm_get_type();
|
vips_format_ppm_get_type();
|
||||||
vips_format_analyze_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 im_vips2bufpng( VipsImage *in, VipsImage *out,
|
||||||
int compression, int interlace, char **obuf, size_t *olen );
|
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 im_raw2vips( const char *filename, VipsImage *out,
|
||||||
int width, int height, int bpp, int offset );
|
int width, int height, int bpp, int offset );
|
||||||
int im_vips2raw( VipsImage *in, int fd );
|
int im_vips2raw( VipsImage *in, int fd );
|
||||||
|
Loading…
Reference in New Issue
Block a user