从网页获取缩略图图像

时间:2013-03-19 19:51:07

标签: c# asp.net-mvc image

我有C#代码用于从http://i.imgur.com/QvkaduU.jpg等网址获取图片,但我如何从这样的网页中获取图片:http://imgur.com/gallery/QvkaduU

有没有“简单”的方法可以做到这一点,或者我必须获取HTML并构建一个C#解析器,它在HTML中查找比其他图像更大的图像?

让我澄清一下。如果您将http://imgur.com/gallery/QvkaduU(HTML版本)粘贴到例如Facebook的状态更新字段中,它将找到主图像并从中制作缩略图,这正是我正在寻找的行为。问题是,这是怎么做到的?我是否必须编写自己的HTML解析器,或者有一种简单的方法来获取它?

6 个答案:

答案 0 :(得分:5)

没有简单的方法可以为任意网址获取“好”的缩略图。

Facebook的算法算法相当复杂。页面开发人员可以通过向<head>添加各种元标记来提供提示,包括:

<meta property="og:image" content="http://url_to_your_image_here" />

<link rel="image_src" href="http://www.code-digital.co.uk/preview.jpg" />

more on this

...所以如果你想要复制Facebook的算法,你需要获取页面源,解析它上面的任何“提示”(你最好检查一下我没有错过任何其他的“提示“格式”,如果页面不包含其中一个,则提出一个回退算法。

更现实的解决方案是使用其他人的网址 - &gt;缩略图系统。

如果你喜欢Facebook的版本,我认为你应该能够通过他们的API为给定的URL请求Facebook的缩略图。

提供此类事情的其他服务包括:

答案 1 :(得分:1)

如果html页面和图像之间的QvkaduU部分始终相同,你可以直接替换字符串吗?

http://imgur.com/gallery/QvkaduU”。替换(“imgur.com/gallery”,“i.imgur.com”)+“.jpg”;

答案 2 :(得分:1)

我将使用正则表达式获取整个HTML源并将所有<img ... src="...">参数以及< ... style="... background-image: ...;"> css内联属性放入其中,并尝试下载临时链接后面的所有文件。然后我会(尝试将其转换为位图)并检查像素大小,最大的图片应该是你想要的图片。

Google可能会帮助您检查像素大小并转换任何图片。

从HTML源获取所有图像链接的正则表达式应为

<img[^>]+src=\"([^"]+)\".*?>|<[^>]+style=\"[^"]*background-image:\s*url\(\s*'?([^')])\s*'?)\s*;.*?>(未经测试,但非常确定)

结果将在第2组或第3组索引中,也不要忘记在相关链接上添加当前网址的前缀。

答案 3 :(得分:1)

您已经走上正轨,是最可靠的方法是获取HTML,解析并查找图像,然后根据位置和大小对图像进行排名。例如,如果您找到的第一个图像足够大,可以制作缩略图,那么很酷,如果它很小,则会转到下一个图像,等等。最好使用像Timthumb这样的图像插件(我认为我有时会看到一个ASP.NET版本并缓存图像,这样一旦你查找缩略图代表一个网站,你就可以从catch中调用图像。

答案 4 :(得分:0)

你能尝试这样做吗?

public void ProcessRequest(HttpContext context)
    {
      {
            // load here the image 
            ....
            // and send it to browser
            ctx.Response.OutputStream.Write(imageData, 0, imageData.Length);
       }
    }

您也可以尝试他们在这里谈论的内容。我尝试了它,它就像一个魅力。

http://www.dotnetspider.com/resources/42565-Download-images-from-URL-using-C.aspx

答案 5 :(得分:0)

你可以试试吗

public Bitmap getImageFromURL(String sURL)
{
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(sURL);
    myRequest.Method = "GET";
    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
    System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
    myResponse.Close();

    return bmp;
}

来自 How to get an image to a pictureBox from an URL? (Windows Mobile)