Ensure embedded ICC profiles output with perceptual intent #321

This commit is contained in:
Lovell Fuller
2015-12-06 20:24:17 +00:00
parent 16e0d54b15
commit 58e6368525
4 changed files with 11 additions and 6 deletions

View File

@@ -421,7 +421,10 @@ class PipelineWorker : public AsyncWorker {
if (HasProfile(image)) {
// Convert to sRGB using embedded profile
VipsImage *transformed;
if (!vips_icc_transform(image, &transformed, srgbProfile.data(), "embedded", TRUE, nullptr)) {
if (
!vips_icc_transform(image, &transformed, srgbProfile.data(),
"embedded", TRUE, "intent", VIPS_INTENT_PERCEPTUAL, nullptr)
) {
// Embedded profile can fail, so only update references on success
vips_object_local(hook, transformed);
image = transformed;
@@ -430,7 +433,10 @@ class PipelineWorker : public AsyncWorker {
// Convert to sRGB using default "USWebCoatedSWOP" CMYK profile
std::string cmykProfile = baton->iccProfilePath + "USWebCoatedSWOP.icc";
VipsImage *transformed;
if (vips_icc_transform(image, &transformed, srgbProfile.data(), "input_profile", cmykProfile.data(), nullptr)) {
if (
vips_icc_transform(image, &transformed, srgbProfile.data(),
"input_profile", cmykProfile.data(), "intent", VIPS_INTENT_PERCEPTUAL, nullptr)
) {
return Error();
}
vips_object_local(hook, transformed);