Сценарий: У меня есть изображение в рулоне камеры для iPhone. Я обращаюсь к нему с помощью ALAssetLibrary
и получаю объект ALAsset
. Я получаю объект UIImage
и NSData
, используя что-то вроде следующего кода.NSImage и UIImage дают разные представления NSData
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
if (iref)
{
UIImage *largeimage = [UIImage imageWithCGImage:iref ];
NSData * data = UIImageJPEGRepresentation(largeimage, 1.0f);
}
Затем я копирую изображение из рулона камеры, используя Image Capture to my mac. Затем я использую NSImage
в своем Mac-коде, чтобы открыть скопированное изображение и попытаться получить представление NSData
, используя следующий код.
NSImage * image = [[NSImage alloc] initWithContentsOfURL:fileURL];
NSBitmapImageRep *imgRep = [[image representations] objectAtIndex: 0];
NSData *data = [imgRep representationUsingType: NSJPEGFileType properties: nil];
Проблема: К сожалению, эти два NSData
представления я получаю очень разные. Я хочу иметь возможность получить то же самое представление NSData
в обоих случаях (так как это тот же файл). Затем я могу перейти к хэш-объектам NSData
и сравнить хэши, чтобы заключить, что эти два являются (возможно) одним и тем же изображением. В идеале я хотел бы использовать следующие две функции;
//In iOS
-(NSData *) getDataFromALAsset:(ALAsset*)asset;
//or
-(NSData *) getDataFromUIImage:(UIImage*)image;
//In OS X
-(NSData *) getDataFromFileAtURL:(NSURL*)url;
//or
-(NSData *) getDataFromNSImage:(NSImage*)image;
Такое представление о том, что NSData * Я получаю в OS X и прошивке точно так же, учитывая, что они исходят из того же исходного изображения.
То, что я пробовал:
Я пытался поиграть с тем, как я получаю объект UIImage из ALAsset
объекта, я попытался UIImagePNGRepresentation
(и соответствующий для получения NSData
в OS X). Я также пытался играть с различными параметрами для получения представления в OS X, но ничего не получилось. Я также попытался создать на обеих платформах CGIImageRef
, преобразовать их в растровые изображения и прочитать их по пикселям, и даже те, которые кажутся выключенными (и да, я понимаю, что NSBitmapImageRep
имеет другую систему координат).
Выполняется сжатие JPEG на изображении несколько раз, поэтому биты неизбежно будут меняться. – NSAdam
@NSAdam вы можете предложить способ избежать этого? Любые идеи по решению актуальной проблемы? – Tayyab
Я также попытался получить объект NSData с использованием CGImageRef, но это тоже не сработает. – Tayyab