Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Picture loaded from my server has wrong colors on iPad app

I am developing an iPad app which presents pictures from a photographer. Those photos are uploaded on a webserver, and served directly through the app, where they are downloaded and displayed using the method below :

if([[NSFileManager defaultManager] fileExistsAtPath:[url path]]){
    CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
    CGImageRef cgImage = nil;
    if(source){
        cgImage = CGImageSourceCreateImageAtIndex(source, 0, (CFDictionaryRef)dict);
    }

    UIImage *retImage = [UIImage imageWithCGImage:cgImage];

    if(cgImage){
        CGImageRelease(cgImage);
    }
    if(source){
        CFRelease(source);
    }

    return retImage;
}

I can observe a serious change in the display of the photos' colours between the original picture (which is the same when displayed from the disk or from the web on my Mac and the photographer's Mac) and on the iPad (the result is wrong in the app and even in Safari).

After some search I found some posts explaining how iDevices do not use embedded color profile, so I found I was going this way. The photos are saved using the following info :

colorspace: RGB, colorprofile: sRGB iec...

I found out on some articles (for example this link from imageoptim or analogsenses) that I should save the picture for device export by converting it to sRGB, without embedding the color profile, but I cant find out how could I do that ? Each time I tried (I don't have photoshop, so I used command line ImageMagick), the resulting picture has the following information, and is still not displayed correctly on my iPad (and any other iPads I've tested) :

colorspace: RGB

Here is a example of a picture that do not display correctly on the iPhone or iPad, but does on the web

I would like to transform it to display it correctly, any Idea would be really welcomed :)

[EDIT] I have succeeded to obtain a correct image using "save for web" options of photoshop using the following parameters : ok photoshop export parameters But I'm still unable to apply those settings automatically to all my pictures.

like image 999
PhilippeAuriach Avatar asked May 08 '16 17:05

PhilippeAuriach


1 Answers

To read an image, just use:

UIImage *image = [UIImage imageWithContentsOfFile:path];

As for the color profile issue, try the sips command-line tool to fix the image files. Something like:

mkdir converted
sips -m "/System/Library/ColorSync/Profiles/sRGB Profile.icc" *.JPG --out converted
like image 200
EricS Avatar answered Sep 30 '22 12:09

EricS