Fail4FunTV Ответов: 4

[C#] получить изображение с веб-сайта на C#


Сайт находится здесь: http://pixplorer.co.uk/#/[^]

API-это: http://pixplorer.co.uk/getimage/

Текст на сайте API:
{ "0": { "imglink": "http://t3.gstatic.com/images?q=tbn:ANd9GcRykxeuR9P3M-5QOrHhf0xxWER44ab1MQn2ByVvqBjSiI8_em9yk5OGa4Q", "word": "stamp" } }


Как я могу показать эту картинку "imglink" в графическом поле на моей форме C#?

ZurdoDev

Проанализируйте данные, а затем покажите изображение. Где ты застрял?

Fail4FunTV

По части "разбора".. Я не понимаю, как правильно анализировать. Я пытался сделать это последние несколько часов, но безуспешно..

ZurdoDev

Похоже на json. Я бы поискал в google примеры json.

Fail4FunTV

У вас есть решение?

[no name]

- Похоже на Джейсона. Я бы поискал в google примеры json"

ZurdoDev

Да.
Шаг 1. Найдите в google примеры того, как разбирать json
Шаг 2. внедрите примеры в свой конкретный код.

4 Ответов

Рейтинг:
35

lukaszbl

Мое решение ниже:
Я предполагаю, что у вас есть:
-добавлен пакет Json.Продажи через NuGet
-на вашем контроле есть текстовое поле:кнопка, текстовое поле textbox1,: кнопки button1 с методе clickhandler: обработчика button1_click и коробке картинка:имя picturebox1

тогда simplyfied handler будет выглядеть примерно так:

private void button1_Click(object sender, EventArgs e)
     {
         WebRequest wr = WebRequest.Create("http://pixplorer.co.uk/getimage/" + string.Join("+",this.textBox1.Text.Split(' ')));
         WebResponse res = wr.GetResponse();
         using (StreamReader reader = new StreamReader(res.GetResponseStream()))
         {
             string json = reader.ReadToEnd();
             dynamic images = JsonConvert.DeserializeObject(json);
             this.pictureBox1.Load(images["0"].imglink.Value);
         }
     }


Использование:
Введите ключевые слова для изображения в текстовое поле и нажмите кнопку, случайная картинка появится в PictureBox.


Fail4FunTV

Я изменил первую кодовую ссылку на это:

WebRequest wr = WebRequest.Создать("http://pixplorer.co.uk/getimage/" + строка.Присоединяйтесь к("+", это.текстовое поле textbox1.Текст));

Сработало!

BillWoodruff

+5 Хороший ответ. Вы можете сделать это без специального использования JSON, как я показываю в своем пересмотренном ответе здесь.

Рейтинг:
1

Member 13640748

Спасибо Вам за вашу ценную помощь!


CHill60

Если вы хотите прокомментировать решение, то используйте команду "есть вопрос или комментарий?" ссылка рядом с ним. Как бы то ни было, вы вернули этот вопрос в активный список, и мы понятия не имеем, кого вы пытаетесь поблагодарить!

Рейтинг:
0

BillWoodruff

Чтобы получить ссылку на картинку, вам нужно сделать простой веб-запрос формы:

// чтобы получить фотографию кошки
http://pixplorer.co.uk/getimage/cat

Это вернет закодированную строку, которая вам нужна, и вы можете разобрать ее и загрузить, как показано ниже.

// requires: using System.Net;
// requires using System.IO;

private void GetAPic_Click(object sender, EventArgs e)
{        
    WebRequest request = HttpWebRequest.Create("http://pixplorer.co.uk/getimage/cat");
    
    var response = (HttpWebResponse) request.GetResponse();
    
    string path;
    
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        path = reader.ReadToEnd();
    
        path = path.Substring(path.IndexOf("http:"));
    
        path = path.Remove(path.IndexOf("\",\n        \"word\""));
    }
    
    using (Stream picStream = new MemoryStream(new WebClient().DownloadData(path)))
    {
        pictureBox1.Image = Image.FromStream(picStream);
    }
}


Fail4FunTV

Да, это показывает картину.. Но если я хочу фотографию кошки или собаки вместо этого?
Если я пишу слово "кошка" в своем текстовом поле, я хочу фотографию кошки.
Если я пишу слово "собака" в своем текстовом поле, я хочу фотографию собаки.

Afzaal Ahmad Zeeshan

Это условие! Примените его с помощью if else блок в вашем коде.

Fail4FunTV

А?

Afzaal Ahmad Zeeshan

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

BillWoodruff

Теперь смотрите пересмотренный пример кода: он успешно извлекает указанную картинку ... в данном случае кошка ... по веб-запросу.

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

Рейтинг:
0

Afzaal Ahmad Zeeshan

Текст, предоставляемый API веб-сайта, называется JSON. И он используется для предоставления и доступа к данным и ресурсам в виде текста.

http://json.org/[^]

Ваш код может быть дополнительно отформатирован следующим образом

{ 
   "0": { 
      "imglink": "http://t3.gstatic.com/images?q=tbn:ANd9GcRykxeuR9P3M-5QOrHhf0xxWER44ab1MQn2ByVvqBjSiI8_em9yk5OGa4Q", 
      "word": "stamp" 
   } 
}


JSON-это формат для отправки ответов в виде текста. Вы можете видеть, что эти свойства и результаты представлены в виде текста, а не собственных типов бинарных ответов. Существует множество библиотек для C# для работы с данными JSON. Некоторые из них предоставляются разработчиками .NET, но лично мне нравится Newtonsoft.Библиотека JSON. Вы можете получить это из библиотеки NuGet.

Вы можете использовать этот код библиотеки, чтобы извлечь его. Убедитесь, что ответ является строкой.

// create a new class as
class Response {
   public string imglink { get; set; }
   public string word { get; set; }
}


Вы можете еще больше преобразовать данные (строку) в Response объект как

// take the response as the string
string resp = "your response from API here, as string";
// convert the string to the response, fill the properties
Response response = JsonConvert.DeserializeObject<response>(resp);


Как показать изображение из URL-адреса в PictureBox.

После того, как это будет сделано, и вы достанете данные. Передайте его источнику изображения. Если вы используете PictureBox (Win Forms), то передайте эту строку как ImageLocation as

// myPictureBox = the picture box control
// imgLink = the image link from the response
myPictureBox.ImageLocation = imgLink;


Подробнее об этом читайте здесь: http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.imagelocation(v=против 110).aspx[^]


Fail4FunTV

Я не понимаю часть "вы можете еще больше преобразовать данные (строку) в объект ответа как". Куда это девать?

Afzaal Ahmad Zeeshan

Это делает первый блок кода. Преобразует строковые данные в объект ответа. Помните, что ответ, если класс я определил, вы можете пропустить его, если вы можете просто получить imglink из API.