transform cmyk->rgb automatically
if: - we are writing a cmyk image - there is an embedded profile - the saver does not support cmyk see https://github.com/jcupitt/libvips/issues/676
This commit is contained in:
parent
7bcf0bb93f
commit
4d846534b8
@ -1,3 +1,7 @@
|
|||||||
|
12/6/17 started 8.5.7
|
||||||
|
- transform cmyk->rgb automatically on write if there's an embedded profile
|
||||||
|
and the saver does not support cmyk
|
||||||
|
|
||||||
19/5/17 started 8.5.6
|
19/5/17 started 8.5.6
|
||||||
- tiff read with start page > 0 could break edge tiles or strips
|
- tiff read with start page > 0 could break edge tiles or strips
|
||||||
- raise b64 limit to allow for huge profiles (thanks jaume)
|
- raise b64 limit to allow for huge profiles (thanks jaume)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# also update the version number in the m4 macros below
|
# also update the version number in the m4 macros below
|
||||||
|
|
||||||
AC_INIT([vips], [8.5.6], [vipsip@jiscmail.ac.uk])
|
AC_INIT([vips], [8.5.7], [vipsip@jiscmail.ac.uk])
|
||||||
# required for gobject-introspection
|
# required for gobject-introspection
|
||||||
AC_PREREQ(2.62)
|
AC_PREREQ(2.62)
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ AC_CONFIG_MACRO_DIR([m4])
|
|||||||
# user-visible library versioning
|
# user-visible library versioning
|
||||||
m4_define([vips_major_version], [8])
|
m4_define([vips_major_version], [8])
|
||||||
m4_define([vips_minor_version], [5])
|
m4_define([vips_minor_version], [5])
|
||||||
m4_define([vips_micro_version], [6])
|
m4_define([vips_micro_version], [7])
|
||||||
m4_define([vips_version],
|
m4_define([vips_version],
|
||||||
[vips_major_version.vips_minor_version.vips_micro_version])
|
[vips_major_version.vips_minor_version.vips_micro_version])
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ VIPS_VERSION_STRING=$VIPS_VERSION-`date`
|
|||||||
# binary interface changes not backwards compatible?: reset age to 0
|
# binary interface changes not backwards compatible?: reset age to 0
|
||||||
|
|
||||||
LIBRARY_CURRENT=49
|
LIBRARY_CURRENT=49
|
||||||
LIBRARY_REVISION=5
|
LIBRARY_REVISION=6
|
||||||
LIBRARY_AGE=7
|
LIBRARY_AGE=7
|
||||||
|
|
||||||
# patched into include/vips/version.h
|
# patched into include/vips/version.h
|
||||||
|
@ -596,6 +596,7 @@ static int
|
|||||||
vips_icc_import_build( VipsObject *object )
|
vips_icc_import_build( VipsObject *object )
|
||||||
{
|
{
|
||||||
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
|
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
|
||||||
|
VipsColour *colour = (VipsColour *) object;
|
||||||
VipsColourCode *code = (VipsColourCode *) object;
|
VipsColourCode *code = (VipsColourCode *) object;
|
||||||
VipsIcc *icc = (VipsIcc *) object;
|
VipsIcc *icc = (VipsIcc *) object;
|
||||||
VipsIccImport *import = (VipsIccImport *) object;
|
VipsIccImport *import = (VipsIccImport *) object;
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
* - forward progress signals from load
|
* - forward progress signals from load
|
||||||
* 23/5/16
|
* 23/5/16
|
||||||
* - remove max-alpha stuff, this is now automatic
|
* - remove max-alpha stuff, this is now automatic
|
||||||
|
* 12/6/17
|
||||||
|
* - transform cmyk->rgb if there's an embedded profile
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1190,6 +1192,37 @@ vips__foreign_convert_saveable( VipsImage *in, VipsImage **ready,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If this image is CMYK and the saver is RGB-only, use lcms to try to
|
||||||
|
* import to XYZ. This will only work if the image has an embedded
|
||||||
|
* profile.
|
||||||
|
*/
|
||||||
|
if( in->Type == VIPS_INTERPRETATION_CMYK &&
|
||||||
|
in->Bands >= 4 &&
|
||||||
|
(saveable == VIPS_SAVEABLE_RGB ||
|
||||||
|
saveable == VIPS_SAVEABLE_RGBA ||
|
||||||
|
saveable == VIPS_SAVEABLE_RGBA_ONLY) ) {
|
||||||
|
VipsImage *out;
|
||||||
|
|
||||||
|
if( vips_icc_import( in, &out,
|
||||||
|
"pcs", VIPS_PCS_XYZ,
|
||||||
|
NULL ) ) {
|
||||||
|
g_object_unref( in );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
g_object_unref( in );
|
||||||
|
|
||||||
|
in = out;
|
||||||
|
|
||||||
|
/* We've imported to PCS, we must remove the embedded profile,
|
||||||
|
* since it no longer matches the image.
|
||||||
|
*
|
||||||
|
* For example, when converting CMYK JPG to RGB PNG, we need
|
||||||
|
* to remove the CMYK profile on import, or the png writer will
|
||||||
|
* try to attach it when we write the image as RGB.
|
||||||
|
*/
|
||||||
|
vips_image_remove( in, VIPS_META_ICC_NAME );
|
||||||
|
}
|
||||||
|
|
||||||
/* If this is something other than CMYK or RAD, eg. maybe a LAB image,
|
/* If this is something other than CMYK or RAD, eg. maybe a LAB image,
|
||||||
* we need to transform to RGB.
|
* we need to transform to RGB.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user