场景:
我在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 上。然后,在我的 Mac 代码中使用 NSImage
打开复制的图像,并尝试使用以下代码获取 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*表示是完全相同的。
我尝试过:
我尝试了一些方法,比如改变如何从ALAsset
对象获取UIImage对象,我尝试了UIImagePNGRepresentation
(以及在OS X中获取NSData
的对应方法)。我还尝试着在OS X中使用不同的参数来获取表示,但都没有成功。我还尝试着在两个平台上创建一个CGIImageRef
,将其转换为位图,并逐像素读取它们,即使这些也似乎有所偏差(是的,我确实意识到NSBitmapImageRep
具有不同的坐标系)。
- (CGImageRef)CGImageWithOptions:(NSDictionary *)options
,根据文件说明,这是获取资源的 CGImage 表示形式的一种便利方式。该方法返回可用的最大、最佳表示形式,未经任何调整。 - Tayyab