Как загрузить изображение из каталога документов / IPHONE - PullRequest
1 голос
/ 04 февраля 2011

Я сохраняю изображения, когда в моем iphone есть подключение к интернету.Теперь я хочу загрузить изображения, которые сохранены в каталоге документов.Я получаю путь, но изображение не отображается.Пожалуйста, помогите мне в этом.Заранее спасибо.

Вот мой код:

+(UIImage *) getImagewithName:(NSString*) imagepath
{
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    UIImage *gimage=[UIImage imageWithContentsOfFile: [NSString stringWithFormat:@"%@/%@",docDir,imagepath]];

    NSLog(@"%@/%@",docDir,imagepath);

    return gimage;
}

+(void)DownloadImage:(NSString*)ImagePath {
    if ([ImagePath isEqualToString:@""])
       return;

    UIImage *dimage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http:/uploads/%@",ImagePath]]]];
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSLog(@"pathIMAGEPATHS:::::::%@",ImagePath);
    NSLog(@"path:::::::%@",docDir);
    NSArray *patharr=[ImagePath componentsSeparatedByString:@"."];
    NSString* Ext=[NSString stringWithFormat: @"%@",[patharr objectAtIndex:1]];
    NSString *FilePath = [NSString stringWithFormat: [NSString stringWithFormat:@"%@/%@",docDir,ImagePath]];
    if([Ext isEqualToString:@"png"])
    {
        NSLog(@"saving png");

        NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(dimage)];
        [data1 writeToFile:FilePath atomically:YES];
    }
    else if([Ext isEqualToString:@"jpeg"])
    {
        NSLog(@"saving jpeg");
        //NSString *jpegFilePath = [NSString stringWithFormat:@"%@/test.jpeg",docDir];
        NSData *data2 = [NSData dataWithData:UIImageJPEGRepresentation(dimage, 1.0f)];//1.0f = 100% quality
        [data2 writeToFile:FilePath atomically:YES];
    }
    else 
    {
        NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(dimage)];
        [data1 writeToFile:FilePath atomically:YES];

    }
    NSLog(@"saving image done");

    [dimage release];

}

1 Ответ

2 голосов
/ 04 февраля 2011

viggio24 делает хорошую мысль.Но, кроме того, этот код кажется невероятно сложным, чтобы сделать что-то невероятно простое.Почему вы загружаете данные, затем превращаете их в изображение, просто превращаете обратно в данные и, наконец, записываете?А потом вы прочитаете это снова и создадите новый образ?Почему бы просто не скачать файл на диск и не прочитать его?UIImage сделает всю работу по управлению PNG и JPEG для вас.Что-то вроде:

+(void)downloadImage:(NSString*)imagePath {
    if ([imagePath isEqualToString:@""])
        return;

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[@"http://110.234.132.132/MBCMcAdmin/uploads" stringByAppendingPathComponent:imagePath]]];
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [data writeToFile:[docDir stringByAppendingPathComponent:imagePath] atomically:YES];
}

В большинстве случаев это все еще ужасная идея, поскольку она блокирует вызывающий поток.Лучше сделать это с NSURLDownload, который сделает все это в фоновом режиме и сообщит вам, когда это будет сделано.

Я бы упростил код, а затем следовал бы комментариям viggio24, чтобы убедиться, что вы ошиблисьпроверь это.Возможно, вы просто неправильно читаете файл или не можете его записать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...