mirror of https://github.com/GNOME/gimp.git
Issue #7956: Add full BigTiff open/export support to GIMP.
Recent libtiff supports loading BigTiff automatically so we didn't have anything to do there (as long as a recent libtiff was used). For creating a BigTIFF though, we simply needed to add a "8" flag to TIFFOpen/TIFFClientOpen when creating a new image (i.e. using "w8" mode) as explained here in the "Implementation Strategy" section: http://www.simplesystems.org/libtiff/BigTIFFProposal.html What this commit does: - Explicitly bump our libtiff requirement to version 4.0.0 or higher (which is where BigTiff support appeared). libtiff 4.0.0 was apparently released on 2011-12-22 and is available on all current distributions, so it's probably not a problem. - Switch to detect libtiff with a pkg-config test (added in libtiff commit faf5f3eb before 4.0.0 release, so it's fine) instead of function checks. (Note: meson was already detecting for libtiff-4 with pkg-config, which was obviously wrong since it should have mimicked autotools, but well… then changes were minimal on meson) - Add a new "bigtiff" boolean argument to the "file-tiff-save" PDB procedure, FALSE by default. I set this as the first argument as I figure that choosing the format you want is quite a major choice. Unless I misunderstood something, since BigTIFF is really designed to be an evolution of TIFF with a "minimum change strategy", i.e. mostly using 64-bit instead of 32-bit offsets, everything which is possible in TIFF will be in BigTIFF (and oppositely as well, except of course having huge files) so there is no need to have 2 separate procedures. - Adding this new argument to the GUI dialog as a checkbox. - Tweak the load and export procedures' documentation strings to make clear we support both TIFF and BigTIFF. Note: interestingly there doesn't seem to be a separate mimetype for BigTIFF so nothing to update on this side. - Tweak the procedure labels too to mention BigTIFF. Since BigTIFF is still a different format (though very closely resembling) from TIFF, unlike some others which are just extensions embedded in a TIFF file (like GeoTIFF we recently added), I figure it deserves to be explicitly cited.
This commit is contained in:
parent
fc5e6e6c26
commit
871796a126
|
@ -212,7 +212,7 @@ header files installed.
|
|||
libpng @LIBPNG_REQUIRED_VERSION@
|
||||
libpoppler-glib @POPPLER_REQUIRED_VERSION@
|
||||
librsvg @RSVG_REQUIRED_VERSION@
|
||||
libtiff
|
||||
libtiff @LIBTIFF_REQUIRED_VERSION@
|
||||
Little CMS @LCMS_REQUIRED_VERSION@
|
||||
mypaint-brushes-1.0
|
||||
pangocairo @PANGOCAIRO_REQUIRED_VERSION@
|
||||
|
|
29
configure.ac
29
configure.ac
|
@ -79,6 +79,7 @@ m4_define([libjxl_required_version], [0.6.1])
|
|||
m4_define([liblzma_required_version], [5.0.0])
|
||||
m4_define([libmypaint_required_version], [1.3.0])
|
||||
m4_define([libpng_required_version], [1.6.25])
|
||||
m4_define([libtiff_required_version], [4.0.0])
|
||||
m4_define([libunwind_required_version], [1.1.0])
|
||||
m4_define([openexr_required_version], [1.6.1])
|
||||
m4_define([openjpeg_required_version], [2.1.0])
|
||||
|
@ -181,6 +182,7 @@ LIBJXL_REQUIRED_VERSION=libjxl_required_version
|
|||
LIBLZMA_REQUIRED_VERSION=liblzma_required_version
|
||||
LIBMYPAINT_REQUIRED_VERSION=libmypaint_required_version
|
||||
LIBPNG_REQUIRED_VERSION=libpng_required_version
|
||||
LIBTIFF_REQUIRED_VERSION=libtiff_required_version
|
||||
OPENEXR_REQUIRED_VERSION=openexr_required_version
|
||||
OPENJPEG_REQUIRED_VERSION=openjpeg_required_version
|
||||
PANGOCAIRO_REQUIRED_VERSION=pangocairo_required_version
|
||||
|
@ -217,6 +219,7 @@ AC_SUBST(LIBJXL_REQUIRED_VERSION)
|
|||
AC_SUBST(LIBLZMA_REQUIRED_VERSION)
|
||||
AC_SUBST(LIBMYPAINT_REQUIRED_VERSION)
|
||||
AC_SUBST(LIBPNG_REQUIRED_VERSION)
|
||||
AC_SUBST(LIBTIFF_REQUIRED_VERSION)
|
||||
AC_SUBST(OPENEXR_REQUIRED_VERSION)
|
||||
AC_SUBST(OPENJPEG_REQUIRED_VERSION)
|
||||
AC_SUBST(PANGOCAIRO_REQUIRED_VERSION)
|
||||
|
@ -1489,32 +1492,10 @@ AC_MSG_RESULT([$enable_relocatable_bundle])
|
|||
# Check for libtiff
|
||||
###################
|
||||
|
||||
libtiff_error=
|
||||
if test -z "$TIFF_LIBS"; then
|
||||
AC_CHECK_LIB(tiff, TIFFReadScanline,
|
||||
[AC_CHECK_HEADER(tiffio.h,
|
||||
FILE_TIFF_LOAD='file-tiff-load$(EXEEXT)'; FILE_TIFF_SAVE='file-tiff-save$(EXEEXT)'; TIFF_LIBS='-ltiff',
|
||||
[libtiff_error="TIFF header files not found"])],
|
||||
[AC_CHECK_LIB(tiff, TIFFWriteScanline,
|
||||
[AC_CHECK_HEADER(tiffio.h,
|
||||
FILE_TIFF_LOAD='file-tiff-load$(EXEEXT)'; FILE_TIFF_SAVE='file-tiff-save$(EXEEXT)'; TIFF_LIBS='-ltiff -ljpeg -lz',
|
||||
[libtiff_error="TIFF header files not found"])],
|
||||
[AC_CHECK_LIB(tiff34, TIFFFlushData,
|
||||
[AC_CHECK_HEADER(tiffio.h,
|
||||
FILE_TIFF_LOAD='file-tiff-load$(EXEEXT)'; FILE_TIFF_SAVE='file-tiff-save$(EXEEXT)'; TIFF_LIBS='-ltiff34 -ljpeg -lz',
|
||||
[libtiff_error="TIFF header files not found"])],
|
||||
[libtiff_error="TIFF library not found"], -ljpeg -lz -lm)], -ljpeg -lz -lm)], -lm)
|
||||
fi
|
||||
|
||||
if test -z "$TIFF_LIBS"; then
|
||||
add_deps_error([libtiff], [Checks for TIFF library failed: $libtiff_error])
|
||||
fi
|
||||
|
||||
PKG_CHECK_MODULES(TIFF, [libtiff-4 >= libtiff_required_version],,
|
||||
[add_deps_error([libtiff-4 >= libtiff_required_version])])
|
||||
MIME_TYPES="$MIME_TYPES;image/tiff"
|
||||
|
||||
AC_SUBST(TIFF_LIBS)
|
||||
|
||||
|
||||
###################
|
||||
# Check for libjpeg
|
||||
###################
|
||||
|
|
|
@ -629,7 +629,8 @@ MIMEtypes = [
|
|||
|
||||
|
||||
|
||||
libtiff = dependency('libtiff-4')
|
||||
libtiff_minver = '4.0.0'
|
||||
libtiff = dependency('libtiff-4', version: '>=' + libtiff_minver)
|
||||
MIMEtypes += 'image/tiff'
|
||||
|
||||
|
||||
|
@ -1540,6 +1541,7 @@ install_conf.set('INTLTOOL_REQUIRED_VERSION', '0.40.1')
|
|||
install_conf.set('LCMS_REQUIRED_VERSION', lcms_minver)
|
||||
install_conf.set('LIBHEIF_REQUIRED_VERSION', libheif_minver)
|
||||
install_conf.set('LIBLZMA_REQUIRED_VERSION', liblzma_minver)
|
||||
install_conf.set('LIBTIFF_REQUIRED_VERSION', libtiff_minver)
|
||||
install_conf.set('LIBMYPAINT_REQUIRED_VERSION', libmypaint_minver)
|
||||
install_conf.set('LIBPNG_REQUIRED_VERSION', libpng_minver)
|
||||
install_conf.set('OPENEXR_REQUIRED_VERSION', openexr_minver)
|
||||
|
|
|
@ -107,7 +107,7 @@ tiff_open (GFile *file,
|
|||
|
||||
tiff_io.stream = G_OBJECT (tiff_io.input);
|
||||
}
|
||||
else if(! strcmp (mode, "w"))
|
||||
else if(! strcmp (mode, "w") || ! strcmp (mode, "w8"))
|
||||
{
|
||||
tiff_io.output = G_OUTPUT_STREAM (g_file_replace (file,
|
||||
NULL, FALSE,
|
||||
|
|
|
@ -997,10 +997,12 @@ save_image (GFile *file,
|
|||
gint origin_x = 0;
|
||||
gint origin_y = 0;
|
||||
gint saved_bpp;
|
||||
gboolean bigtiff;
|
||||
gboolean config_save_profile;
|
||||
gboolean config_save_thumbnail;
|
||||
|
||||
g_object_get (config,
|
||||
"bigtiff", &bigtiff,
|
||||
"save-color-profile", &config_save_profile,
|
||||
"save-thumbnail", &config_save_thumbnail,
|
||||
NULL);
|
||||
|
@ -1013,7 +1015,7 @@ save_image (GFile *file,
|
|||
gimp_file_get_utf8_name (file));
|
||||
|
||||
/* Open file and write some global data */
|
||||
tif = tiff_open (file, "w", error);
|
||||
tif = tiff_open (file, (bigtiff ? "w8" : "w"), error);
|
||||
|
||||
if (! tif)
|
||||
{
|
||||
|
@ -1267,6 +1269,7 @@ save_dialog (GimpImage *image,
|
|||
|
||||
gimp_procedure_dialog_fill (GIMP_PROCEDURE_DIALOG (dialog),
|
||||
"compression",
|
||||
"bigtiff",
|
||||
"layers-frame",
|
||||
"save-transparent-pixels",
|
||||
NULL);
|
||||
|
|
|
@ -57,7 +57,6 @@
|
|||
|
||||
|
||||
#define SAVE_PROC "file-tiff-save"
|
||||
#define SAVE2_PROC "file-tiff-save2"
|
||||
#define PLUG_IN_BINARY "file-tiff"
|
||||
|
||||
|
||||
|
@ -144,11 +143,12 @@ tiff_create_procedure (GimpPlugIn *plug_in,
|
|||
GIMP_PDB_PROC_TYPE_PLUGIN,
|
||||
tiff_load, NULL, NULL);
|
||||
|
||||
gimp_procedure_set_menu_label (procedure, N_("TIFF image"));
|
||||
gimp_procedure_set_menu_label (procedure, N_("TIFF or BigTIFF image"));
|
||||
|
||||
gimp_procedure_set_documentation (procedure,
|
||||
"loads files of the tiff file format",
|
||||
"FIXME: write help for tiff_load",
|
||||
"Loads files of the TIFF and BigTIFF file formats",
|
||||
"Loads files of the Tag Image File Format (TIFF) and "
|
||||
"its 64-bit offsets variant (BigTIFF)",
|
||||
name);
|
||||
gimp_procedure_set_attribution (procedure,
|
||||
"Spencer Kimball, Peter Mattis & Nick Lamb",
|
||||
|
@ -172,14 +172,13 @@ tiff_create_procedure (GimpPlugIn *plug_in,
|
|||
|
||||
gimp_procedure_set_image_types (procedure, "*");
|
||||
|
||||
gimp_procedure_set_menu_label (procedure, N_("TIFF image"));
|
||||
gimp_procedure_set_menu_label (procedure, N_("TIFF or BigTIFF image"));
|
||||
|
||||
gimp_procedure_set_documentation (procedure,
|
||||
"Saves files in the tiff file format",
|
||||
"Saves files in the Tagged Image File "
|
||||
"Format. The value for the saved "
|
||||
"comment is taken from the "
|
||||
"'gimp-comment' parasite",
|
||||
"Exports files in the TIFF or BigTIFF file formats",
|
||||
"Exports files in the Tag Image File Format (TIFF) or "
|
||||
"its 64-bit offsets variant (BigTIFF) able to support "
|
||||
"much bigger file sizes",
|
||||
name);
|
||||
gimp_procedure_set_attribution (procedure,
|
||||
"Spencer Kimball & Peter Mattis",
|
||||
|
@ -195,6 +194,13 @@ tiff_create_procedure (GimpPlugIn *plug_in,
|
|||
gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure),
|
||||
"tif,tiff");
|
||||
|
||||
GIMP_PROC_ARG_BOOLEAN (procedure, "bigtiff",
|
||||
"Export in BigTIFF variant file format",
|
||||
"The BigTIFF variant file format uses 64-bit offsets, "
|
||||
"hence supporting over 4GiB files and bigger",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE);
|
||||
|
||||
GIMP_PROC_ARG_INT (procedure, "compression",
|
||||
"Co_mpression",
|
||||
"Compression type: { NONE (0), LZW (1), PACKBITS (2), "
|
||||
|
|
Loading…
Reference in New Issue