2014-10-09 2 views
0

사이트에서 모든 이미지 파일을 가져 와서 갤러리에 표시하려고합니다. 그래서 사람들은 내가 로컬로 저장된 이미지로 here처럼 모든 이미지를 스크롤 할 수 있습니다.URL에서 모든 이미지를로드하는 방법은 무엇입니까?

일부 검색 후 this example이 발견되었지만 다음 이미지를 사용하여이 온라인 디렉토리 내의 모든 이미지가 아닌 단일 이미지로드 전용입니다.

//Location of image directory with xxx images. 
string directoryUrl = "http://www.foo.com/bar"; 

void DownloadTextures(string url) 
{ 
    try 
    { 
     WebRequest req = WebRequest.Create(url); 
     WebResponse response = req.GetResponse(); 
     Stream stream = response.GetResponseStream(); 
    } 
    catch (Exception e) 
    { 
     print("stuff went wrong: " +e) 
    } 
} 

그렇다면 온라인 디렉토리에서 모든 이미지를 가져올 수있는 방법은 무엇입니까?

ps. 모든 것이 단일성 엔진에서 이루어지며, 이는 몇 가지 한계가 있습니다.

+0

특정 사이트의 모든 이미지를 사용하려는 경우 사이트의 소스 코드를 통해 img 태그 및 이미지가있을 수있는 다른 요소를 검색하고 해당 링크를 사용하여 다운로드 한 후 – Vajura

+0

@ Vajura 어떻게 그걸 달성하겠습니까? 예를 들어 [이 시나리오] (http://gyazo.com/080be064a2e513891731bed1baf2fd9d)에서 가져 오려는 여러 이미지가 포함 된 melloniax.com/images 링크가 있습니다. –

+0

이런 구조는 쉽게 실패 할 수 있습니다.이 사이트의 소스 코드를 제게 줄 수 있습니까? 붙여 넣기 상자에 붙여 넣으십시오. – Vajura

답변

1

정규 표현식은 really bad입니다. html을 구문 분석하는 방법으로, 일부 라이브러리를 사용하는 것이 더 좋습니다. 내가들은 가장 좋은 하나에 대해 당신이

here이 그럼 당신은 this 같은 이미지를 다운로드 WebClient.DownloadFile 방법을 사용할 수 있습니다 찾을 수를 사용하여 이미지를 분석하는 방법을 HtmlAgilityPack

예입니다. 이미지 링크는 상대 링크 일 수 있으므로 처리해야합니다.

1
using System.Net; 
using System.IO; 
using System.Text.RegularExpressions; 
private void Form1_Load(object sender, EventArgs e) 
{ 
    string urlAddress = "http://melloniax.com/css/style.css"; 
    string urlBase = "http://melloniax.com"; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    string data = ""; 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     Stream receiveStream = response.GetResponseStream(); 
     StreamReader readStream = null; 
     if (response.CharacterSet == null) 
      readStream = new StreamReader(receiveStream); 
     else 
      readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet)); 
     data = readStream.ReadToEnd(); 
     response.Close(); 
     readStream.Close(); 
    } 
    MatchCollection matches = Regex.Matches(data, @"\(..(?<link>[^.]*(\.jpg|\.png|\.gif)) *\)"); 
    for (int a = 0; a < matches.Count; a++) 
     MessageBox.Show(urlBase + matches[a].Groups["link"].Value); 
} 

말해 주신 URL에서 img를 실제로 저장하는 방법과 같은 것이 필요한 경우이 예가 효과적입니다.

+0

.css를 참고하지 않고도 이미지를 얻을 수 있습니까? –

+0

예 ** 모든 이미지가 HTML로 링크되어있는 경우 ** [^ "] *)"** 이제 결과에 해당 링크 ** "images/IMG-20131110-WA0005.jpg"**가 표시됩니다. ** 다시 img에 도달하려면 기본 URL과 함께 붙여 넣기 만하면됩니다. http://regex101.com/r/cM0sD7/1에서 테스트 할 수 있습니다. 직접 모든 이미지에 액세스하고 싶다면 응용 프로그램에 퍼미션이 필요합니다. 이미지/이미지를 다시 읽으려면 다시 구문 분석을하고 – Vajura

+0

링크를 가져옵니다. 즉 CSS 또는 HTML 파일 중 하나에서 이미지를 참조해야합니다. 내가 제대로 이해한다면. 그리고 내가 달성하고자하는 것은 html이나 css에 연결하지 않아도되는 것입니다. 온라인에 저장된 이미지로, 반드시 사용되는 것은 아닙니다. –

관련 문제