Merge remote-tracking branch 'origin/master'

Conflicts:
	ChangeLog
	configure.in
This commit is contained in:
John Cupitt 2012-08-06 15:22:25 +01:00
commit 9cffb5f939
24 changed files with 267 additions and 151 deletions

View File

@ -1,3 +1,9 @@
20/7/12 started 7.30.0
- support "rs" mode in vips7
- add --vips-version cmdline arg
- fix --without-tiff / exr / jpeg / png / magick
- add --vips-fatal flag
19/3/12 started 7.29.0
- sanity-check PNG read geometry
- nearest-neighbor interpolation rounds coordinates to nearest instead of
@ -26,6 +32,10 @@
- png save compression range was wrong
- more/moreeq was wrong
- vips7 ppm save with options was broken
<<<<<<< HEAD
=======
- don't cache write operations
>>>>>>> origin/master
18/6/12 started 7.28.9
- slightly more memory debugging output

View File

@ -3,7 +3,7 @@
if ENABLE_CXX
C_COMPILE_DIR = libvipsCC
C_DIST_DIR =
C_PKGCONFIG = vipsCC-7.${VIPS_MINOR_VERSION}.pc
C_PKGCONFIG = vipsCC.pc
# turn on Python if we can (requires C++)
if HAVE_PYTHON
@ -32,15 +32,15 @@ EXTRA_DIST = \
m4 \
benchmark \
bootstrap.sh \
vips-7.${VIPS_MINOR_VERSION}.pc.in \
vipsCC-7.${VIPS_MINOR_VERSION}.pc.in \
vips.pc.in \
vipsCC.pc.in \
acinclude.m4 \
depcomp \
$(C_DIST_DIR) \
$(P_DIST_DIR)
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = vips-7.${VIPS_MINOR_VERSION}.pc $(C_PKGCONFIG)
pkgconfig_DATA = vips.pc $(C_PKGCONFIG)
install-exec-hook:
-rm -rf ${DESTDIR}$(datadir)/doc/vips

View File

@ -2,7 +2,7 @@
# also update the version number in the m4 macros below
AC_INIT([vips], [7.29.0], [vipsip@jiscmail.ac.uk])
AC_INIT([vips], [7.30.0], [vipsip@jiscmail.ac.uk])
# required for gobject-introspection
AC_PREREQ(2.62)
@ -16,7 +16,7 @@ AC_CONFIG_MACRO_DIR([m4])
# user-visible library versioning
m4_define([vips_major_version], [7])
m4_define([vips_minor_version], [29])
m4_define([vips_minor_version], [30])
m4_define([vips_micro_version], [0])
m4_define([vips_version],
[vips_major_version.vips_minor_version.vips_micro_version])
@ -37,7 +37,7 @@ VIPS_VERSION_STRING=$VIPS_VERSION-`date`
# binary interface changes not backwards compatible?: reset age to 0
LIBRARY_CURRENT=33
LIBRARY_REVISION=2
LIBRARY_REVISION=3
LIBRARY_AGE=1
# patched into include/vips/version.h
@ -218,7 +218,7 @@ if test x"$enable_cxx" != x"no"; then
AC_DEFINE(ENABLE_CXX,1,[build C++ components])
AM_CONDITIONAL(ENABLE_CXX, true)
# need -lstdc++ for (eg.) the C++ format loaders
# this gets added to vips-7.xx.pc to help mingw and friends link programs
# this gets added to vips.pc to help mingw and friends link programs
# using libvips
VIPS_CXX_LIBS="-lstdc++"
enable_cxx=yes
@ -685,12 +685,9 @@ AC_SUBST(VIPS_LIBS)
AC_SUBST(VIPS_CXX_LIBS)
AC_SUBST(PACKAGES_USED)
# you'd think we could have
# vips-$VIPS_MAJOR_VERSION.$VIPS_MINOR_VERSION.pc
# in AC_OUTPUT, but that seems to break for some combinations of sh/m4
AC_OUTPUT([
vips-7.29.pc
vipsCC-7.29.pc
vips.pc
vipsCC.pc
Makefile
libvips/include/vips/version.h
libvips/include/Makefile

View File

@ -16,7 +16,7 @@
\fancyhead[LE,RO]{\leftmark} % left-even, right-odd
\fancyhead[RE,LO]{VIPS Manual} % right-even, left-odd
\fancyfoot[LE,RO]{\thepage} % left-even, right-odd
\fancyfoot[RE,LO]{February 2012}
\fancyfoot[RE,LO]{July 2012}
\begin{document}
@ -27,14 +27,14 @@
\begin{center}
\huge
VIPS Manual\\
\large Version 7.28\\
\large Version 7.30\\
\vspace{0.5in}
\large
John Cupitt,
Kirk Martinez\\
\end{center}
VIPS is currently (v. 7.28, February 2012) in an API transition. The API as
VIPS is currently (v. 7.30, July 2012) in an API transition. The API as
documented in 7.24 is still complete and supported and is the one you should
use. The 8.0 API is not yet done and may still change before completion.

View File

@ -110,7 +110,7 @@ input_image_init( im_object *obj, char *str )
{
IMAGE **im = (IMAGE **) obj;
return( !(*im = vips__deprecated_open_read( str )) );
return( !(*im = vips__deprecated_open_read( str, FALSE )) );
}
/* Input image type.

View File

@ -53,7 +53,13 @@
int
im_exr2vips( const char *filename, IMAGE *out )
{
#ifdef HAVE_OPENEXR
return( vips__openexr_read( filename, out ) );
#else
vips_error( "im_exr2vips", _( "no OpenEXR support in your libvips" ) );
return( -1 );
#endif /*HAVE_OPENEXR*/
}
static const char *exr_suffs[] = { ".exr", NULL };

View File

@ -58,6 +58,7 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only )
char mode[FILENAME_MAX];
char *p, *q;
int shrink;
int seq;
gboolean fail_on_warn;
/* By default, we ignore any warnings. We want to get as much of
@ -70,6 +71,7 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only )
im_filename_split( name, filename, mode );
p = &mode[0];
shrink = 1;
seq = 0;
if( (q = im_getnextoption( &p )) ) {
shrink = atoi( q );
@ -84,13 +86,9 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only )
if( im_isprefix( "fail", q ) )
fail_on_warn = TRUE;
}
/* vips__jpeg_read_file() is always sequential. Parse the option, but
* don't use it.
*/
if( (q = im_getnextoption( &p )) ) {
if( im_isprefix( "seq", q ) )
;
seq = 1;
}
/* Don't use vips_jpegload() ... we call the jpeg func directly in
@ -106,14 +104,21 @@ jpeg2vips( const char *name, IMAGE *out, gboolean header_only )
*/
if( !header_only &&
!seq &&
out->dtype == VIPS_IMAGE_PARTIAL ) {
if( vips__image_wio_output( out ) )
return( -1 );
}
#ifdef HAVE_JPEG
if( vips__jpeg_read_file( filename, out,
header_only, shrink, fail_on_warn ) )
return( -1 );
#else
vips_error( "im_jpeg2vips", _( "no JPEG support in your libvips" ) );
return( -1 );
#endif /*HAVE_JPEG*/
return( 0 );
}

View File

@ -46,7 +46,14 @@
int
im_magick2vips( const char *filename, IMAGE *out )
{
#ifdef HAVE_MAGICK
return( vips__magick_read( filename, out ) );
#else
vips_error( "im_magick2vips",
_( "no libMagick support in your libvips" ) );
return( -1 );
#endif /*HAVE_MAGICK*/
}
static int

View File

@ -52,13 +52,15 @@ png2vips( const char *name, IMAGE *out, gboolean header_only )
char filename[FILENAME_MAX];
char mode[FILENAME_MAX];
char *p, *q;
int seq;
im_filename_split( name, filename, mode );
seq = 0;
p = &mode[0];
if( (q = im_getnextoption( &p )) ) {
if( im_isprefix( "seq", q ) )
;
seq = 1;
}
/* We need to be compatible with the pre-sequential mode
@ -72,19 +74,26 @@ png2vips( const char *name, IMAGE *out, gboolean header_only )
*/
if( !header_only &&
!seq &&
out->dtype == VIPS_IMAGE_PARTIAL ) {
if( vips__image_wio_output( out ) )
return( -1 );
}
#ifdef HAVE_PNG
if( header_only ) {
if( vips__png_read( filename, out ) )
return( -1 );
}
else {
if( vips__png_header( filename, out ) )
return( -1 );
}
else {
if( vips__png_read( filename, out ) )
return( -1 );
}
#else
vips_error( "im_png2vips", _( "no PNG support in your libvips" ) );
return( -1 );
#endif /*HAVE_PNG*/
return( 0 );
}

View File

@ -57,17 +57,19 @@ tiff2vips( const char *name, IMAGE *out, gboolean header_only )
char mode[FILENAME_MAX];
char *p, *q;
int page;
int seq;
im_filename_split( name, filename, mode );
page = 0;
seq = 0;
p = &mode[0];
if( (q = im_getnextoption( &p )) ) {
page = atoi( q );
}
if( (q = im_getnextoption( &p )) ) {
if( im_isprefix( "seq", q ) )
;
seq = 1;
}
/* We need to be compatible with the pre-sequential mode
@ -82,12 +84,14 @@ tiff2vips( const char *name, IMAGE *out, gboolean header_only )
*/
if( !header_only &&
!seq &&
!vips__istifftiled( filename ) &&
out->dtype == VIPS_IMAGE_PARTIAL ) {
if( vips__image_wio_output( out ) )
return( -1 );
}
#ifdef HAVE_TIFF
if( header_only ) {
if( vips__tiff_read_header( filename, out, page ) )
return( -1 );
@ -96,6 +100,11 @@ tiff2vips( const char *name, IMAGE *out, gboolean header_only )
if( vips__tiff_read( filename, out, page ) )
return( -1 );
}
#else
vips_error( "im_tiff2vips", _( "no TIFF support in your libvips" ) );
return( -1 );
#endif /*HAVE_TIFF*/
return( 0 );
}

View File

@ -63,7 +63,7 @@ typedef struct {
VipsImage *image;
VipsFormatClass *format;/* Read in pixels with this */
char *filename; /* Get pixels from here */
gboolean disc; /* Read via disc requested */
gboolean sequential; /* Sequential read requested */
VipsImage *real; /* The real decompressed image */
} Lazy;
@ -80,7 +80,7 @@ lazy_free_cb( VipsImage *image, Lazy *lazy )
static Lazy *
lazy_new( VipsImage *image,
VipsFormatClass *format, const char *filename, gboolean disc )
VipsFormatClass *format, const char *filename, gboolean sequential )
{
Lazy *lazy;
@ -89,7 +89,7 @@ lazy_new( VipsImage *image,
lazy->image = image;
lazy->format = format;
lazy->filename = g_strdup( filename );
lazy->disc = disc;
lazy->sequential = sequential;
lazy->real = NULL;
g_signal_connect( image, "close", G_CALLBACK( lazy_free_cb ), lazy );
@ -132,13 +132,13 @@ lazy_real_image( Lazy *lazy )
VipsImage *real;
/* We open via disc if:
* - 'disc' is set
* - 'sequential' is not set
* - disc_threshold() has not been set to zero
* - the format does not support lazy read
* - the uncompressed image will be larger than disc_threshold()
*/
real = NULL;
if( lazy->disc &&
if( !lazy->sequential &&
disc_threshold() &&
!(vips_format_get_flags( lazy->format, lazy->filename ) &
VIPS_FORMAT_PARTIAL) &&
@ -203,11 +203,11 @@ open_lazy_generate( VipsRegion *or,
*/
static int
vips_image_open_lazy( VipsImage *image,
VipsFormatClass *format, const char *filename, gboolean disc )
VipsFormatClass *format, const char *filename, gboolean sequential )
{
Lazy *lazy;
lazy = lazy_new( image, format, filename, disc );
lazy = lazy_new( image, format, filename, sequential );
/* Is there a ->header() function? We need to do a lazy load.
*/
@ -273,7 +273,7 @@ vips_attach_save( VipsImage *image, int (*save_fn)(), const char *filename )
}
IMAGE *
vips__deprecated_open_read( const char *filename )
vips__deprecated_open_read( const char *filename, gboolean sequential )
{
VipsFormatClass *format;
@ -293,7 +293,8 @@ vips__deprecated_open_read( const char *filename )
IMAGE *image;
image = vips_image_new();
if( vips_image_open_lazy( image, format, filename, TRUE ) ) {
if( vips_image_open_lazy( image, format,
filename, sequential ) ) {
g_object_unref( image );
return( NULL );
}

View File

@ -62,10 +62,16 @@ im_open( const char *filename, const char *mode )
/* We have to go via the old VipsFormat system so we can support the
* "filename:option" syntax.
*
* Use "rs" to turn on seq mode.
*/
if( strcmp( mode, "r" ) == 0 ||
strcmp( mode, "rd" ) == 0 ) {
if( !(image = vips__deprecated_open_read( filename )) )
if( !(image = vips__deprecated_open_read( filename, FALSE )) )
return( NULL );
}
else if( strcmp( mode, "rs" ) == 0 ) {
if( !(image = vips__deprecated_open_read( filename, TRUE )) )
return( NULL );
}
else if( strcmp( mode, "w" ) == 0 ) {

View File

@ -890,7 +890,7 @@ vips_foreign_load_build( VipsObject *object )
}
static VipsOperationFlags
vips_foreign_load_real_get_flags( VipsOperation *operation )
vips_foreign_load_operation_get_flags( VipsOperation *operation )
{
VipsForeignLoad *load = VIPS_FOREIGN_LOAD( operation );
VipsOperationFlags flags;
@ -920,7 +920,7 @@ vips_foreign_load_class_init( VipsForeignLoadClass *class )
object_class->nickname = "fileload";
object_class->description = _( "file loaders" );
operation_class->get_flags = vips_foreign_load_real_get_flags;
operation_class->get_flags = vips_foreign_load_operation_get_flags;
VIPS_ARG_IMAGE( class, "out", 2,
_( "Output" ),
@ -1428,6 +1428,10 @@ vips_foreign_save_class_init( VipsForeignSaveClass *class )
*/
operation_class->flags |= VIPS_OPERATION_SEQUENTIAL;
/* Must not cache savers.
*/
operation_class->flags |= VIPS_OPERATION_NOCACHE;
/* Default to no coding allowed.
*/
for( i = 0; i < VIPS_CODING_LAST; i++ )

View File

@ -66,6 +66,10 @@ extern int vips__thinstrip_height;
*/
extern int vips__concurrency;
/* abort() on any error.
*/
extern int vips__fatal;
/* Give progress feedback.
*/
extern int vips__progress;
@ -297,7 +301,7 @@ void vips_foreign_operation_init( void );
guint64 vips__parse_size( const char *size_string );
IMAGE *vips__deprecated_open_read( const char *filename );
IMAGE *vips__deprecated_open_read( const char *filename, gboolean sequential );
IMAGE *vips__deprecated_open_write( const char *filename );
#ifdef __cplusplus

View File

@ -96,8 +96,7 @@ typedef struct _VipsOperationClass {
*/
void (*usage)( struct _VipsOperationClass *, VipsBuf * );
/* Return a set of operation flags. If @get_flags is NULL, just use
* flags.
/* Return a set of operation flags.
*/
VipsOperationFlags (*get_flags)( VipsOperation * );
VipsOperationFlags flags;

View File

@ -155,6 +155,9 @@ vips_verror( const char *domain, const char *fmt, va_list ap )
g_mutex_unlock( vips__global_lock );
VIPS_DEBUG_MSG( "vips_verror: %s\n", fmt );
if( vips__fatal )
vips_error_exit( "vips__fatal" );
}
/**
@ -363,6 +366,9 @@ vips_vwarn( const char *domain, const char *fmt, va_list ap )
(void) fprintf( stderr, "\n" );
g_mutex_unlock( vips__global_lock );
}
if( vips__fatal )
vips_error_exit( "vips__fatal" );
}
/**
@ -421,7 +427,10 @@ vips_error_exit( const char *fmt, ... )
vips_shutdown();
exit( 1 );
if( vips__fatal )
abort();
else
exit( 1 );
}
/**

View File

@ -80,6 +80,10 @@
#include <vips/internal.h>
#include <vips/vector.h>
/* abort() on the first warning or error.
*/
int vips__fatal = 0;
/* Use in various small places where we need a mutex and it's not worth
* making a private one.
*/
@ -365,20 +369,50 @@ vips__ngettext( const char *msgid, const char *plural, unsigned long int n )
return( dngettext( GETTEXT_PACKAGE, msgid, plural, n ) );
}
static gboolean
vips_lib_version_cb( const gchar *option_name, const gchar *value,
gpointer data, GError **error )
{
printf( "libvips %s\n", VIPS_VERSION_STRING );
vips_shutdown();
exit( 0 );
}
static gboolean
vips_set_fatal_cb( const gchar *option_name, const gchar *value,
gpointer data, GError **error )
{
vips__fatal = 1;
/* Set masks for debugging ... stop on any problem.
*/
g_log_set_always_fatal(
G_LOG_FLAG_RECURSION |
G_LOG_FLAG_FATAL |
G_LOG_LEVEL_ERROR |
G_LOG_LEVEL_CRITICAL |
G_LOG_LEVEL_WARNING );
return( TRUE );
}
static GOptionEntry option_entries[] = {
{ "vips-fatal", 'f', G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG,
G_OPTION_ARG_CALLBACK, (gpointer) &vips_set_fatal_cb,
N_( "abort on first error or warning" ), NULL },
{ "vips-concurrency", 'c', 0,
G_OPTION_ARG_INT, &vips__concurrency,
N_( "evaluate with N concurrent threads" ), "N" },
{ "vips-tile-width", 'w', 0,
{ "vips-tile-width", 'w', G_OPTION_FLAG_HIDDEN,
G_OPTION_ARG_INT, &vips__tile_width,
N_( "set tile width to N (DEBUG)" ), "N" },
{ "vips-tile-height", 'h', 0,
{ "vips-tile-height", 'h', G_OPTION_FLAG_HIDDEN,
G_OPTION_ARG_INT, &vips__tile_height,
N_( "set tile height to N (DEBUG)" ), "N" },
{ "vips-thinstrip-height", 't', 0,
{ "vips-thinstrip-height", 't', G_OPTION_FLAG_HIDDEN,
G_OPTION_ARG_INT, &vips__thinstrip_height,
N_( "set thinstrip height to N (DEBUG)" ), "N" },
{ "vips-fatstrip-height", 'f', 0,
{ "vips-fatstrip-height", 'f', G_OPTION_FLAG_HIDDEN,
G_OPTION_ARG_INT, &vips__fatstrip_height,
N_( "set fatstrip height to N (DEBUG)" ), "N" },
{ "vips-progress", 'p', 0,
@ -408,6 +442,9 @@ static GOptionEntry option_entries[] = {
{ "vips-cache-dump", 'r', 0,
G_OPTION_ARG_NONE, &vips__cache_dump,
N_( "dump operation cache on exit" ), NULL },
{ "vips-version", 'v', G_OPTION_FLAG_NO_ARG,
G_OPTION_ARG_CALLBACK, (gpointer) &vips_lib_version_cb,
N_( "print libvips version" ), NULL },
{ NULL }
};

Binary file not shown.

View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=glib&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-13 14:50+0100\n"
"POT-Creation-Date: 2012-07-20 15:34+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -352,11 +352,11 @@ msgstr ""
msgid "Height of extract area"
msgstr ""
#: ../libvips/arithmetic/math2.c:196
#: ../libvips/arithmetic/math2.c:198
msgid "pow( left, right)"
msgstr ""
#: ../libvips/arithmetic/math2.c:204 ../libvips/arithmetic/math2.c:401
#: ../libvips/arithmetic/math2.c:206 ../libvips/arithmetic/math2.c:403
#: ../libvips/arithmetic/complex.c:222 ../libvips/arithmetic/complex.c:476
#: ../libvips/arithmetic/math.c:205 ../libvips/arithmetic/relational.c:227
#: ../libvips/arithmetic/relational.c:560 ../libvips/arithmetic/boolean.c:217
@ -364,12 +364,12 @@ msgstr ""
msgid "Operation"
msgstr ""
#: ../libvips/arithmetic/math2.c:205 ../libvips/arithmetic/math2.c:402
#: ../libvips/arithmetic/math2.c:207 ../libvips/arithmetic/math2.c:404
#: ../libvips/arithmetic/math.c:206
msgid "math to perform"
msgstr ""
#: ../libvips/arithmetic/math2.c:393
#: ../libvips/arithmetic/math2.c:395
msgid "pow( @in, @c )"
msgstr ""
@ -397,7 +397,7 @@ msgstr ""
#: ../libvips/conversion/rot.c:355 ../libvips/conversion/replicate.c:196
#: ../libvips/conversion/tilecache.c:446 ../libvips/conversion/embed.c:524
#: ../libvips/conversion/cache.c:106 ../libvips/conversion/recomb.c:203
#: ../libvips/conversion/sequential.c:153 ../libvips/foreign/foreign.c:1438
#: ../libvips/conversion/sequential.c:168 ../libvips/foreign/foreign.c:1442
#: ../libvips/resample/resample.c:89
msgid "Input"
msgstr ""
@ -466,7 +466,7 @@ msgstr ""
msgid "Vertical position of minimum"
msgstr ""
#: ../libvips/arithmetic/im_point_bilinear.c:74
#: ../libvips/arithmetic/im_point_bilinear.c:75
msgid "coords outside image"
msgstr ""
@ -569,7 +569,7 @@ msgstr ""
#: ../libvips/conversion/copy.c:322 ../libvips/conversion/rot.c:356
#: ../libvips/conversion/replicate.c:197 ../libvips/conversion/tilecache.c:447
#: ../libvips/conversion/embed.c:525 ../libvips/conversion/cache.c:107
#: ../libvips/conversion/sequential.c:154
#: ../libvips/conversion/sequential.c:169
msgid "Input image"
msgstr ""
@ -798,7 +798,7 @@ msgid "flatten alpha out of an image"
msgstr ""
#: ../libvips/conversion/flatten.c:381 ../libvips/conversion/join.c:250
#: ../libvips/conversion/insert.c:390
#: ../libvips/conversion/insert.c:392
msgid "Background"
msgstr ""
@ -829,7 +829,7 @@ msgstr ""
msgid "bad extract area"
msgstr ""
#: ../libvips/conversion/extract.c:190
#: ../libvips/conversion/extract.c:191
msgid "extract an area from an image"
msgstr ""
@ -1023,11 +1023,11 @@ msgstr ""
msgid "Join left-right or up-down"
msgstr ""
#: ../libvips/conversion/join.c:236 ../libvips/conversion/insert.c:383
#: ../libvips/conversion/join.c:236 ../libvips/conversion/insert.c:385
msgid "Expand"
msgstr ""
#: ../libvips/conversion/join.c:237 ../libvips/conversion/insert.c:384
#: ../libvips/conversion/join.c:237 ../libvips/conversion/insert.c:386
msgid "Expand output to hold all of both inputs"
msgstr ""
@ -1039,7 +1039,7 @@ msgstr ""
msgid "Pixels between images"
msgstr ""
#: ../libvips/conversion/join.c:251 ../libvips/conversion/insert.c:391
#: ../libvips/conversion/join.c:251 ../libvips/conversion/insert.c:393
msgid "Colour for new pixels"
msgstr ""
@ -1068,39 +1068,39 @@ msgstr ""
msgid "vectors not same length"
msgstr ""
#: ../libvips/conversion/insert.c:349
#: ../libvips/conversion/insert.c:353
msgid "insert an image"
msgstr ""
#: ../libvips/conversion/insert.c:357
#: ../libvips/conversion/insert.c:359
msgid "Main"
msgstr ""
#: ../libvips/conversion/insert.c:358
#: ../libvips/conversion/insert.c:360
msgid "Main input image"
msgstr ""
#: ../libvips/conversion/insert.c:363
#: ../libvips/conversion/insert.c:365
msgid "Sub-image"
msgstr ""
#: ../libvips/conversion/insert.c:364
#: ../libvips/conversion/insert.c:366
msgid "Sub-image to insert into main image"
msgstr ""
#: ../libvips/conversion/insert.c:369
#: ../libvips/conversion/insert.c:371
msgid "X"
msgstr ""
#: ../libvips/conversion/insert.c:370
#: ../libvips/conversion/insert.c:372
msgid "Left edge of sub in main"
msgstr ""
#: ../libvips/conversion/insert.c:376
#: ../libvips/conversion/insert.c:378
msgid "Y"
msgstr ""
#: ../libvips/conversion/insert.c:377
#: ../libvips/conversion/insert.c:379
msgid "Top edge of sub in main"
msgstr ""
@ -1225,13 +1225,13 @@ msgstr ""
msgid "matrix of coefficients"
msgstr ""
#: ../libvips/conversion/sequential.c:86
#: ../libvips/conversion/sequential.c:83
#, c-format
msgid ""
"non-sequential read --- at position %d in file, but position %d requested"
msgstr ""
#: ../libvips/conversion/sequential.c:149
#: ../libvips/conversion/sequential.c:164
msgid "check sequential access"
msgstr ""
@ -1289,7 +1289,7 @@ msgstr ""
#: ../libvips/foreign/jpegload.c:245 ../libvips/foreign/rawload.c:115
#: ../libvips/foreign/matload.c:128 ../libvips/foreign/fitssave.c:128
#: ../libvips/foreign/radsave.c:119 ../libvips/foreign/vipssave.c:125
#: ../libvips/foreign/pngsave.c:166 ../libvips/iofuncs/image.c:945
#: ../libvips/foreign/pngsave.c:168 ../libvips/iofuncs/image.c:945
msgid "Filename"
msgstr ""
@ -1297,7 +1297,7 @@ msgstr ""
#: ../libvips/foreign/tiffsave.c:172 ../libvips/foreign/jpegsave.c:194
#: ../libvips/foreign/csvsave.c:122 ../libvips/foreign/fitssave.c:129
#: ../libvips/foreign/radsave.c:120 ../libvips/foreign/vipssave.c:126
#: ../libvips/foreign/pngsave.c:167
#: ../libvips/foreign/pngsave.c:169
msgid "Filename to save to"
msgstr ""
@ -1447,7 +1447,7 @@ msgstr ""
msgid "save image to tiff file"
msgstr ""
#: ../libvips/foreign/tiffsave.c:178 ../libvips/foreign/pngsave.c:103
#: ../libvips/foreign/tiffsave.c:178 ../libvips/foreign/pngsave.c:105
msgid "Compression"
msgstr ""
@ -1569,11 +1569,11 @@ msgid "save image to jpeg buffer"
msgstr ""
#: ../libvips/foreign/jpegsave.c:260 ../libvips/foreign/jpegload.c:315
#: ../libvips/foreign/pngsave.c:228
#: ../libvips/foreign/pngsave.c:230
msgid "Buffer"
msgstr ""
#: ../libvips/foreign/jpegsave.c:261 ../libvips/foreign/pngsave.c:229
#: ../libvips/foreign/jpegsave.c:261 ../libvips/foreign/pngsave.c:231
msgid "Buffer to save to"
msgstr ""
@ -1853,8 +1853,8 @@ msgstr ""
msgid "end of file while skipping start"
msgstr ""
#: ../libvips/foreign/csv.c:246 ../libvips/iofuncs/util.c:1072
#: ../libvips/iofuncs/util.c:1078
#: ../libvips/foreign/csv.c:246 ../libvips/iofuncs/util.c:1084
#: ../libvips/iofuncs/util.c:1090
msgid "unable to seek"
msgstr ""
@ -1954,27 +1954,27 @@ msgstr ""
msgid "reading associated image: %s"
msgstr ""
#: ../libvips/foreign/pngsave.c:95
#: ../libvips/foreign/pngsave.c:97
msgid "save png"
msgstr ""
#: ../libvips/foreign/pngsave.c:104
#: ../libvips/foreign/pngsave.c:106
msgid "Compression factor"
msgstr ""
#: ../libvips/foreign/pngsave.c:110
#: ../libvips/foreign/pngsave.c:112
msgid "Interlace"
msgstr ""
#: ../libvips/foreign/pngsave.c:111
#: ../libvips/foreign/pngsave.c:113
msgid "Interlace image"
msgstr ""
#: ../libvips/foreign/pngsave.c:162
#: ../libvips/foreign/pngsave.c:164
msgid "save image to png file"
msgstr ""
#: ../libvips/foreign/pngsave.c:224
#: ../libvips/foreign/pngsave.c:226
msgid "save image to png buffer"
msgstr ""
@ -2074,7 +2074,7 @@ msgstr ""
msgid "file savers"
msgstr ""
#: ../libvips/foreign/foreign.c:1439
#: ../libvips/foreign/foreign.c:1443
msgid "Image to save"
msgstr ""
@ -2315,7 +2315,7 @@ msgstr ""
msgid "unable to create thread"
msgstr ""
#: ../libvips/iofuncs/sinkdisc.c:262 ../libvips/iofuncs/util.c:656
#: ../libvips/iofuncs/sinkdisc.c:262 ../libvips/iofuncs/util.c:668
msgid "write failed"
msgstr ""
@ -2387,7 +2387,7 @@ msgstr ""
msgid "unknown band format %d"
msgstr ""
#: ../libvips/iofuncs/header.c:611 ../libvips/iofuncs/generate.c:377
#: ../libvips/iofuncs/header.c:611 ../libvips/iofuncs/generate.c:376
msgid "too many images"
msgstr ""
@ -2500,7 +2500,7 @@ msgstr ""
msgid "bad image descriptor"
msgstr ""
#: ../libvips/iofuncs/image.c:1959 ../libvips/iofuncs/generate.c:716
#: ../libvips/iofuncs/image.c:1959 ../libvips/iofuncs/generate.c:715
#, c-format
msgid "unable to output to a %s image"
msgstr ""
@ -2510,25 +2510,25 @@ msgstr ""
msgid "auto-rewind for %s failed"
msgstr ""
#: ../libvips/iofuncs/image.c:2079 ../libvips/iofuncs/image.c:2274
#: ../libvips/iofuncs/image.c:2291
#: ../libvips/iofuncs/image.c:2079 ../libvips/iofuncs/image.c:2275
#: ../libvips/iofuncs/image.c:2292
msgid "no image data"
msgstr ""
#: ../libvips/iofuncs/image.c:2147 ../libvips/iofuncs/image.c:2314
#: ../libvips/iofuncs/image.c:2147 ../libvips/iofuncs/image.c:2315
msgid "image not readable"
msgstr ""
#: ../libvips/iofuncs/image.c:2168 ../libvips/iofuncs/image.c:2344
#: ../libvips/iofuncs/image.c:2353
#: ../libvips/iofuncs/image.c:2168 ../libvips/iofuncs/image.c:2345
#: ../libvips/iofuncs/image.c:2354
msgid "image already written"
msgstr ""
#: ../libvips/iofuncs/image.c:2192 ../libvips/iofuncs/image.c:2365
#: ../libvips/iofuncs/image.c:2192 ../libvips/iofuncs/image.c:2366
msgid "image not writeable"
msgstr ""
#: ../libvips/iofuncs/image.c:2238
#: ../libvips/iofuncs/image.c:2239
msgid "bad file type"
msgstr ""
@ -2727,58 +2727,58 @@ msgstr ""
msgid "mask must be 1D"
msgstr ""
#: ../libvips/iofuncs/util.c:639
#: ../libvips/iofuncs/util.c:651
msgid "unable to get file stats"
msgstr ""
#: ../libvips/iofuncs/util.c:720
#: ../libvips/iofuncs/util.c:732
#, c-format
msgid "unable to open file \"%s\" for reading"
msgstr ""
#: ../libvips/iofuncs/util.c:742
#: ../libvips/iofuncs/util.c:754
#, c-format
msgid "unable to open file \"%s\" for writing"
msgstr ""
#: ../libvips/iofuncs/util.c:767
#: ../libvips/iofuncs/util.c:779
#, c-format
msgid "\"%s\" too long"
msgstr ""
#: ../libvips/iofuncs/util.c:784
#: ../libvips/iofuncs/util.c:796
msgid "out of memory"
msgstr ""
#: ../libvips/iofuncs/util.c:810
#: ../libvips/iofuncs/util.c:822
#, c-format
msgid "error reading from file \"%s\""
msgstr ""
#: ../libvips/iofuncs/util.c:857
#: ../libvips/iofuncs/util.c:869
#, c-format
msgid "write error (%zd out of %zd blocks written) ... disc full?"
msgstr ""
#: ../libvips/iofuncs/util.c:1106 ../libvips/iofuncs/util.c:1113
#: ../libvips/iofuncs/util.c:1118 ../libvips/iofuncs/util.c:1125
msgid "unable to truncate"
msgstr ""
#: ../libvips/iofuncs/util.c:1204
#: ../libvips/iofuncs/util.c:1216
#, c-format
msgid "unable to create directory \"%s\", %s"
msgstr ""
#: ../libvips/iofuncs/util.c:1338
#: ../libvips/iofuncs/util.c:1350
msgid "unexpected end of string"
msgstr ""
#: ../libvips/iofuncs/util.c:1356
#: ../libvips/iofuncs/util.c:1368
#, c-format
msgid "expected %s, saw %s"
msgstr ""
#: ../libvips/iofuncs/util.c:1526
#: ../libvips/iofuncs/util.c:1538
#, c-format
msgid "unable to make temporary file %s"
msgstr ""
@ -2823,11 +2823,11 @@ msgstr ""
msgid "too much data"
msgstr ""
#: ../libvips/iofuncs/generate.c:640
#: ../libvips/iofuncs/generate.c:639
msgid "demand hint not set"
msgstr ""
#: ../libvips/iofuncs/generate.c:659 ../libvips/iofuncs/generate.c:684
#: ../libvips/iofuncs/generate.c:658 ../libvips/iofuncs/generate.c:683
msgid "generate() called twice"
msgstr ""
@ -2883,67 +2883,71 @@ msgstr ""
msgid "unable to mmap \"%s\" to same address"
msgstr ""
#: ../libvips/iofuncs/init.c:371
#: ../libvips/iofuncs/init.c:380
msgid "evaluate with N concurrent threads"
msgstr ""
#: ../libvips/iofuncs/init.c:374
#: ../libvips/iofuncs/init.c:383
msgid "set tile width to N (DEBUG)"
msgstr ""
#: ../libvips/iofuncs/init.c:377
#: ../libvips/iofuncs/init.c:386
msgid "set tile height to N (DEBUG)"
msgstr ""
#: ../libvips/iofuncs/init.c:380
#: ../libvips/iofuncs/init.c:389
msgid "set thinstrip height to N (DEBUG)"
msgstr ""
#: ../libvips/iofuncs/init.c:383
#: ../libvips/iofuncs/init.c:392
msgid "set fatstrip height to N (DEBUG)"
msgstr ""
#: ../libvips/iofuncs/init.c:386
#: ../libvips/iofuncs/init.c:395
msgid "show progress feedback"
msgstr ""
#: ../libvips/iofuncs/init.c:389
#: ../libvips/iofuncs/init.c:398
msgid "leak-check on exit"
msgstr ""
#: ../libvips/iofuncs/init.c:392
#: ../libvips/iofuncs/init.c:401
msgid "images larger than N are decompressed to disc"
msgstr ""
#: ../libvips/iofuncs/init.c:395
#: ../libvips/iofuncs/init.c:404
msgid "disable vectorised versions of operations"
msgstr ""
#: ../libvips/iofuncs/init.c:398
#: ../libvips/iofuncs/init.c:407
msgid "cache at most N operations"
msgstr ""
#: ../libvips/iofuncs/init.c:401
#: ../libvips/iofuncs/init.c:410
msgid "cache at most N bytes in memory"
msgstr ""
#: ../libvips/iofuncs/init.c:404
#: ../libvips/iofuncs/init.c:413
msgid "allow at most N open files"
msgstr ""
#: ../libvips/iofuncs/init.c:407
#: ../libvips/iofuncs/init.c:416
msgid "trace operation cache"
msgstr ""
#: ../libvips/iofuncs/init.c:410
#: ../libvips/iofuncs/init.c:419
msgid "dump operation cache on exit"
msgstr ""
#: ../libvips/iofuncs/init.c:433
#: ../libvips/iofuncs/init.c:422
msgid "print libvips version"
msgstr ""
#: ../libvips/iofuncs/init.c:445
msgid "VIPS Options"
msgstr ""
#: ../libvips/iofuncs/init.c:433
#: ../libvips/iofuncs/init.c:445
msgid "Show VIPS options"
msgstr ""
@ -3505,59 +3509,59 @@ msgstr ""
msgid "unknown action \"%s\""
msgstr ""
#: ../tools/vipsthumbnail.c:61
#: ../tools/vipsthumbnail.c:62
msgid "set thumbnail size to SIZE"
msgstr ""
#: ../tools/vipsthumbnail.c:62
#: ../tools/vipsthumbnail.c:63
msgid "SIZE"
msgstr ""
#: ../tools/vipsthumbnail.c:64
#: ../tools/vipsthumbnail.c:66
msgid "set output to FORMAT"
msgstr ""
#: ../tools/vipsthumbnail.c:65
#: ../tools/vipsthumbnail.c:67
msgid "FORMAT"
msgstr ""
#: ../tools/vipsthumbnail.c:67
#: ../tools/vipsthumbnail.c:70
msgid "resample with INTERPOLATOR"
msgstr ""
#: ../tools/vipsthumbnail.c:68
#: ../tools/vipsthumbnail.c:71
msgid "INTERPOLATOR"
msgstr ""
#: ../tools/vipsthumbnail.c:70
#: ../tools/vipsthumbnail.c:74
msgid "don't sharpen thumbnail"
msgstr ""
#: ../tools/vipsthumbnail.c:72
#: ../tools/vipsthumbnail.c:77
msgid "export with PROFILE"
msgstr ""
#: ../tools/vipsthumbnail.c:73 ../tools/vipsthumbnail.c:76
#: ../tools/vipsthumbnail.c:78 ../tools/vipsthumbnail.c:82
msgid "PROFILE"
msgstr ""
#: ../tools/vipsthumbnail.c:75
#: ../tools/vipsthumbnail.c:81
msgid "import untagged images with PROFILE"
msgstr ""
#: ../tools/vipsthumbnail.c:78
#: ../tools/vipsthumbnail.c:85
msgid "delete profile from exported image"
msgstr ""
#: ../tools/vipsthumbnail.c:80
#: ../tools/vipsthumbnail.c:88
msgid "(deprecated, does nothing)"
msgstr ""
#: ../tools/vipsthumbnail.c:82
#: ../tools/vipsthumbnail.c:91
msgid "verbose output"
msgstr ""
#: ../tools/vipsthumbnail.c:423
#: ../tools/vipsthumbnail.c:432
msgid "- thumbnail generator"
msgstr ""

View File

@ -26,10 +26,10 @@ bin_SCRIPTS = \
batch_image_convert \
batch_rubber_sheet \
batch_crop \
vips-7.29
vips-7.30
EXTRA_DIST = \
vips-7.29 \
vips-7.30 \
light_correct.in \
shrink_width.in \
batch_image_convert.in \

View File

@ -57,28 +57,37 @@ static gboolean nodelete_profile = FALSE;
static gboolean verbose = FALSE;
static GOptionEntry options[] = {
{ "size", 's', 0, G_OPTION_ARG_INT, &thumbnail_size,
{ "size", 's', 0,
G_OPTION_ARG_INT, &thumbnail_size,
N_( "set thumbnail size to SIZE" ),
N_( "SIZE" ) },
{ "output", 'o', 0, G_OPTION_ARG_STRING, &output_format,
{ "output", 'o', 0,
G_OPTION_ARG_STRING, &output_format,
N_( "set output to FORMAT" ),
N_( "FORMAT" ) },
{ "interpolator", 'p', 0, G_OPTION_ARG_STRING, &interpolator,
{ "interpolator", 'p', 0,
G_OPTION_ARG_STRING, &interpolator,
N_( "resample with INTERPOLATOR" ),
N_( "INTERPOLATOR" ) },
{ "nosharpen", 'n', 0, G_OPTION_ARG_NONE, &nosharpen,
{ "nosharpen", 'n', 0,
G_OPTION_ARG_NONE, &nosharpen,
N_( "don't sharpen thumbnail" ), NULL },
{ "eprofile", 'e', 0, G_OPTION_ARG_STRING, &export_profile,
{ "eprofile", 'e', 0,
G_OPTION_ARG_STRING, &export_profile,
N_( "export with PROFILE" ),
N_( "PROFILE" ) },
{ "iprofile", 'i', 0, G_OPTION_ARG_STRING, &import_profile,
{ "iprofile", 'i', 0,
G_OPTION_ARG_STRING, &import_profile,
N_( "import untagged images with PROFILE" ),
N_( "PROFILE" ) },
{ "delete", 'd', 0, G_OPTION_ARG_NONE, &delete_profile,
{ "delete", 'd', 0,
G_OPTION_ARG_NONE, &delete_profile,
N_( "delete profile from exported image" ), NULL },
{ "nodelete", 'l', 0, G_OPTION_ARG_NONE, &nodelete_profile,
{ "nodelete", 'l', G_OPTION_FLAG_HIDDEN,
G_OPTION_ARG_NONE, &nodelete_profile,
N_( "(deprecated, does nothing)" ), NULL },
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
{ "verbose", 'v', 0,
G_OPTION_ARG_NONE, &verbose,
N_( "verbose output" ), NULL },
{ NULL }
};