Загрузка изображения в виде изображения с URL-адреса, используя iPhone SDK? - PullRequest
2 голосов
/ 30 августа 2011

Я просмотрел много кода из Интернета, пытаясь загрузить вид изображения через URL.К сожалению, ни одно из решений, которые я пробовал, не помогло мне, и я получаю очень странные ошибки.Я получаю данные изображения, но нет изображения из этого NSData.Я использовал приведенный ниже код с примером URL, и он работает, давая мне представленное изображение.Однако, когда я переключаю его, чтобы использовать свой фактический URL, я сталкиваюсь с проблемами, потому что кажется, что он пытается создать / вернуть изображение слишком большого размера.Вот мой код:

    NSString *urlString = [[[_xmlDictionary objectForKey:@"response"] objectForKey:@"movie"] objectForKey:@"poster"];   

    NSArray *parts = [urlString componentsSeparatedByString:@"\""];
    urlString = [parts objectAtIndex:1];

    urlString = [urlString stringByAppendingFormat:@"/"];
    urlString = [urlString  
        stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    //NSURL * imageURL = [NSURL URLWithString:urlString];
    NSLog(@"URL:%@",urlString);
    NSURL * imageURL = [NSURL URLWithString:urlString];
    NSData * imageData = [[NSData alloc] initWithContentsOfURL:imageURL];
    UIImage * image = [[UIImage alloc] initWithData:imageData];
    m_imageView = [[UIImageView alloc] initWithImage:image];
    m_imageView.frame = CGRectMake(10, 10,300,300);
    [self.view addSubview:m_imageView];
    [imageData release];
    [image release];

Буду признателен за любую помощь, заранее спасибо.

Ответы [ 5 ]

13 голосов
/ 30 августа 2011

Вы можете преобразовать свой ответ из URL в NSData и затем использовать

NSURL *url = [NSURL URLWithString:@"<YOUR URL STRING HERE>"];

NSData *data = [[NSData alloc] initWithContentsOfURL:url];

UIImage *tmpImage = [[UIImage alloc] initWithData:data];

yourImageView.image = tmpImage;

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:

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

  [NSThread detachNewThreadSelector:@selector(downloadAndLoadImage) toTarget:self withObject:nil];
3 голосов
/ 30 августа 2011

Для больших объемов данных вы должны рассмотреть возможность использования NSURLConnection:

NSURLRequest * request = [[NSURLRequest alloc] initWithURL:url];

NSURLConnection * conn = [NSURLConnection connectionWithRequest:request delegate:myDelegate];

Таким образом, вы можете отслеживать данные, возвращенные с сервера:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
}

Вы указаличто I have used below code with different url and it is giving image тогда было бы полезно, если бы вы указали URL , который вы пытаетесь использовать.

Еще одна идея, которая поможет отследить проблему, будет UIWebView чтобы убедиться, что вы можете загрузить необходимое изображение.

1 голос
/ 19 июля 2013

Пожалуйста, попробуйте следующий код. Я проверил это. работает нормально.

//in .h file

 IBOutlet UIImageView *imgTest;

-(IBAction)buttonTapped:(id)sender;
-(void)LoadImage:(NSString *) irlString;
-(void)setImage:(NSData *) imgData;

//in .m file write the following code:

-(IBAction)buttonTapped:(id)sender
{
    [self performSelectorOnMainThread:@selector(LoadImage:) withObject:@"http://www.google.com/images/errors/logo_sm.gif" waitUntilDone:NO];
}

-(void)LoadImage:(NSString *) urlString
{
    NSURL *imgURL=[NSURL URLWithString:urlString];
    NSData *imgData=[NSData dataWithContentsOfURL:imgURL];
    [self performSelectorInBackground:@selector(setImage:) withObject:imgData];
}

-(void)setImage:(NSData *) imgData;
{
    imgTest.image=[UIImage imageWithData:imgData];
}
0 голосов
/ 19 декабря 2014

ЭТО ПОМОЖЕТ ВАМ ПОЛУЧИТЬ ИЗОБРАЖЕНИЕ, ПАРАГРАФ И НАЗВАНИЕ С ВАШЕГО САЙТА!

Если вы хотите, чтобы я помог вам, или получил второе изображение или любую другую помощь, которую вы получитеНужно напечатать комментарий. Я напишу свой код.

Это ответ довольно поздно, но я думаю, что он все еще может помочь в вашем будущем.Вы можете приступить к разбору веб-сайта, и это правильный способ сделать это, но я покажу вам, как это сделать по-другому, это также может быть использовано для чтения XML, HTML, .COM, чего угодно, а также .RSS такон может читать RSS-каналы.
Здесь:

Это может получить ваш первый абзац, если вы попросите, я покажу вам, как получить второй абзац и так далее.Поэтому, если вы хотите получить деньги, измените свой сканер, чтобы найти $ Заголовок был бы именем, но если это не так, скажите мне, я покажу вам, как получить второй заголовок или заголовок.Смотрите это и вниз.Я покажу вам, как получить html или xml со всего сайта, чтобы вы могли видеть весь код сайта и искать информацию, поэтому сначала прочтите сайт, а затем прочитайте код, и вы увидите имя собаки в коде поиска.что это под заголовком или заголовком и измените код под ваши нужды, прочитайте весь этот пост, чтобы все понять.Ниже приведен основной код получения информации.Перейдите ко второму блоку кода, чтобы узнать, как получить код вашего сайта в журнале или консоли.Чтобы найти ваше изображение, просмотрите NSLog и найдите любые ссылки на изображения, такие как www.example.com/images/image.jpg или image.png или image.gif, или какое-либо расширение изображения, и посмотрите, какой код инициирует это.это или буквально сотни кодов изображений в html и xml, найдите URL, посмотрите на код и затем используйте его в своем сканере, измените

на ваш код и убедитесь, что только URL изображения все еще там.например, продолжайте сокращать его, пока у вас ничего не будет, кроме URL.

Итак, у вас есть

, который вы хотите: www.example.com/images/image.jpg

Вы должны использовать приведенный ниже сканер и изменить

на <media:content url:\", поэтому сканируйте его до тех пор, пока он не станет статичным, поэтому, если вы знаете, что эта часть всегда будет одинаковой, отсканируйте его там, а затем и вторую частьсканер заканчивает его \"

Видите первый кодовый блок под большим?Эту часть нам нужно изменить -

NSString * webString2222 = mastaString;

        NSScanner *stringScanner2222 = [NSScanner scannerWithString:webString2222];



        NSString *content2222 = [[NSString alloc] init];




        //Change <p> to suit your need like <description> or <h1>
        [stringScanner2222 scanUpToString:@"<p>" intoString:Nil];



        [stringScanner2222 scanUpToString:@"." intoString:&content2222];







        NSString *filteredTitle = [content2222 stringByReplacingOccurrencesOfString:@"<p>" withString:@""];

        description.text = filteredTitle;

В нашем случае мы изменим эту часть на -

[stringScanner2222 scanUpToString:@"<media:content url:\"" intoString:Nil];
                [stringScanner2222 scanUpToString:@"\">" intoString:&content2222];

Теперь этоимеет URL, но первая часть сканера всегда остается, поэтому используйте -

NSString * FilterTitle = [content2222 stringByReplacingOccurferencesOfString: @ "

Затем используйте это для загрузки изображения -

NSURL * imageURL = [NSURL URLWithString:[filteredTitle stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation([UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]])];

        UIImage * image = [UIImage imageWithData:imageData];

        [imageView setImage:image];

// Это ваш URL NSURL * URL = [NSURL URLWithString: @ "URL HERE"]; // Это данные, которые вы извлекаете (не меняете) NSData * data = [NSData dataWithContentsOfURL: URL];

// Assuming data is in UTF8. (dont change)
NSString *string = [NSString stringWithUTF8String:[data bytes]];
//Your textView your not done.
description.text = string;



//Do this with your textview

NSString *webStringz = description.text;



// Leave this
NSString *mastaString;
mastaString = webStringz;
{
    NSString *webString2222 = mastaString;



    NSScanner *stringScanner2222 = [NSScanner scannerWithString:webString2222];



    NSString *content2222 = [[NSString alloc] init];




    //Change <p> to suit your need like <description> or <h1>
    [stringScanner2222 scanUpToString:@"<p>" intoString:Nil];



    [stringScanner2222 scanUpToString:@"." intoString:&content2222];







    NSString *filteredTitle = [content2222 stringByReplacingOccurrencesOfString:@"<p>" withString:@""];

    description.text = filteredTitle;


}

Заголовок: та же сделка меняет <p> на <title> в RSS <description> и <title>. Изображение? Та же сделка меняет <p> to what ever your RSS or website uses to get a image to find But remember for both of them when you change the

`вы видите ссылку, которая говоритstringByReplacingOccurences из вас также должны изменить это.

, затем вы должны удалить это и сделать ваш код следующим образом:

//This is your URL
        NSURL *URL = [NSURL URLWithString:@"URL HERE"];
        //This is the data your pulling (dont change)
        NSData *data = [NSData dataWithContentsOfURL:URL];

        // Assuming data is in UTF8. (dont change)
        NSString *string = [NSString stringWithUTF8String:[data bytes]];
        //Your textView your not done.
        description.text = string;
        NLog(@"%@", string)


        //Do this with your textview

        NSString *webStringz = description.text;



        // Leave this
        NSString *mastaString;
        mastaString = webStringz;

Теперь проверьте ваш журнал, он показывает весь ваш сайт HTML иликод rss, то вы прокручиваете и читаете его и находите свое изображение.и проверьте код перед ним и измените String Scanner в соответствии с вашими потребностями, что довольно здорово, и вы должны изменить stringByReplacingOccurences of.

Как я уже говорил, изображения немного сложнее, когда вы делаете это с помощью этого метода, но XML-синтаксический анализ намного проще, РАЗ, когда вы его изучаете, смеется.Если вы попросите, я покажу вам, как это сделать.Скажите, если у вас возникли проблемы с просмотром html или xml, и укажите, какой сайт еще раз, и я посмотрю, и я расскажу вам, как получить все, что вы хотите.Убедитесь:

Если вы хотите, чтобы я показал вам, как это сделать в XML, просто прокомментируйте.Если вы хотите, чтобы я показал вам, как найти второй абзац, или изображение, или заголовок, или что-то еще, просто прокомментируйте.

ЕСЛИ ТЫ НУЖЕН НИЧЕГО, ТОЛЬКО КОММЕНТАРИЙ.

Пока повеселитесь с кодом, который я предоставил, что-то не так, просто комментируйте!!!!!

: D

0 голосов
/ 25 августа 2014
        NSString *img=[NSString stringWithFormat:@"https://i1.sndcdn.com/avatars-000098290475-iw9m74-large.jpg?e76cf77"];
        NSURL *url = [NSURL URLWithString:img];
        NSData *data = [[NSData alloc] initWithContentsOfURL:url];
        UIImage *img1 = [[UIImage alloc]initWithData:data];
        self.artWorksImage.image = img1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...