场景:我在 iPhone 相机胶卷中有一张图像。我使用它访问它ALAssetLibrary
并获取一个ALAsset
对象。我使用类似下面的代码从中得到一个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 将相机胶卷中的图像复制到我的 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;
这样我在 OS X 和 iOS 中得到的 NSData* 表示是完全相同的,因为它们来自同一个源图像。
我试过的:
我已经尝试过如何从对象中获取 UIImage 对象ALAsset
,我尝试过(以及在 OS XUIImagePNGRepresentation
中获取的相应对象)。NSData
我还尝试使用不同的参数来获取 OS X 中的表示,但没有任何结果。我还尝试CGIImageRef
在两个平台上创建一个,将其转换为位图并逐个像素地读取它们,甚至那些似乎已关闭(是的,我确实意识到它们NSBitmapImageRep
具有不同的坐标系)。