所以我正在调用使用Nimbus' NINetworkImageView对象从照片服务器中提取图像。我需要检查返回的对象是否有效。如果无效,则
方法- (void) networkImageView:(NINetworkImageView *) imageView didLoadImage:(UIImage *) image {
返回一个透明UIImage对象。我认为该方法是返回我一个jpg图像与清晰的像素,这是导致我的问题。我尝试了以下检查,看看图像是否透明,没有运气(下面所有的尝试都发生在上面方法的范围内):
失败尝试1:
UIImageView *tempView = [[UIImageView alloc] initWithImage:image];
if(tempView.alpha != 0.0f)
{
//the image is a valid (nonclear) image
}
else
{
//the image is invalid (clear)
}
尝试失败2:
CGImageRef cgref = [[UIImage alloc] CGImage];
CIImage *cim = [[UIImage alloc] CIImage];
if(!([image CIImage] == cim && [image CGImage] == cgref))
{
//the image is a valid (nonclear) image
}
else
{
//the image is invalid (clear)
}
尝试失败3:
if(image)
{
//the image is a valid (nonclear) image
}
else
{
//the image is invalid (clear)
}
尝试失败4:
CGImageRef cgref = [image CGImage];
CIImage *cim = [image CIImage];
if(cim == nil && cgref == NULL)
{
//the image is invalid (clear)
}
else
{
//the image is a valid (nonclear) image
}
编辑
我能够从模拟器中提取"无效图像"。networkimageview方法返回一个全白色的jpg图像。然而,在模拟器中,它显示为一个清晰的图像,思想?
我可以建议将此图像保存到磁盘,并在Photoshop/其他图形工具中查看它的alpha值。
UIImageWriteToSavedPhotosAlbum(image, nil, nil, NULL);
现在你可以在照片应用程序中找到这张照片。
下面的函数将名称为image.png
的UIImage文件保存在用户文档文件夹中:
- (void)saveImage: (UIImage*)image
{
if (image != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithString: @"test.png"] ];
NSData* data = UIImagePNGRepresentation(image);
[data writeToFile:path atomically:YES];
}
}
我找到了修复。根据berylium的建议,我下载了jpg图像,然后将其添加到XCODE项目中。我将其命名为BlankImage.jpg并添加。然后进行以下比较
- (void) networkImageView:(NINetworkImageView *) imageView didLoadImage:(UIImage *) image
{
if([ UIImageJPEGRepresentation([UIImage imageNamed:@"BlankImage.JPG"], 1.0f ) isEqualToData: UIImageJPEGRepresentation(image, 1.0f ) ])
{
//This is a blank image so handle that case
}
else
{
//This is a valid image
}
}
另一个选择是做疯狂的石英材料逐像素比较。这工作得很好。