2014-10-09 49 views
0

我正在尝试从网站获取所有图像文件,并在图库中显示这些文件。所以人们可以滚动浏览所有的图像,比如我使用localy存储的图像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 2014-10-09 09:43:31

+0

@Vajura我会怎样解决这个问题?例如在[这种情况](http://gyazo.com/080be064a2e513891731bed1baf2fd9d)我有链接melloniax.com/images其中包含我想导入的几个不同的图像。 – 2014-10-09 09:47:25

+0

哦,这样的结构应该很容易,你可以给我这个网站的源代码吗?在引擎收录 – Vajura 2014-10-09 09:48:41

回答

1

由于正则表达式解析HTML really bad的方式,我认为这是最好使用一些库为您的目的。 最好的一个,我听到的是HtmlAgilityPack

如何用它来解析图像的例子,你可以找到here

然后你可以使用WebClient.DownloadFile方法下载相似图片this。请注意图片链接可能是相对的,所以你也需要处理它。

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的imgs告诉我。

+0

所以将它也有可能获得这些图像,而不必咨询的CSS? – 2014-10-09 10:13:31

+0

是如果这些图像是在这样的HTML链接** [^“] *)” **现在你在结果这些链接**“图像/ IMG-20131110-WA0005.jpg”让**你再次只需要粘贴在一起的基地网址来到img。你可以在http://regex101.com/r/cM0sD7/1这里测试它。如果您想直接刚刚访问所有imges那么你的应用程序需要permision访问/图片,然后你又刚刚经历有解析,并获得链接 – Vajura 2014-10-09 10:18:57

+0

这意味着图像应该无论是在CSS或然后将HTML文件中的一个被称为如果我理解正确。而我试图实现的是没有他们必须链接到一个HTML或CSS。只是在线存储的图像,不一定使用。 – 2014-10-09 10:22:03