Проверьте, действительно ли UIImage, возвращенный из NINetworkImageView
Поэтому я звоню, чтобы вытащить изображение с сервера фотографий с помощью объекта NINetworkImageView от Nimbus. Мне нужно проверить, верен ли возвращенный объект. Если это не верно, метод
- (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, которое полностью белое. Тем не менее, в симуляторе это проявляется в виде четкой картины, мысли?
2 ответа
Я могу посоветовать сохранить это изображение на диск и посмотреть его альфа-значение в Photoshop/ другом графическом инструменте.
UIImageWriteToSavedPhotosAlbum(image, nil, nil, NULL);
Теперь вы можете найти это изображение в приложении Фотографии.
Следующая функция сохраняет UIImage с именем image.png
файл в пользовательской папке с документами:
- (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];
}
}
Я нашел исправление. Используя предложение Бериллиума, я скачал изображение 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
}
}
Другой вариант заключался в том, чтобы делать сумасшедшие кварцевые вещи для попиксельного сравнения. Это работало просто отлично.