我有C#代码用于从http://i.imgur.com/QvkaduU.jpg
等网址获取图片,但我如何从这样的网页中获取图片:http://imgur.com/gallery/QvkaduU
?
有没有“简单”的方法可以做到这一点,或者我必须获取HTML并构建一个C#解析器,它在HTML中查找比其他图像更大的图像?
让我澄清一下。如果您将http://imgur.com/gallery/QvkaduU
(HTML版本)粘贴到例如Facebook的状态更新字段中,它将找到主图像并从中制作缩略图,这正是我正在寻找的行为。问题是,这是怎么做到的?我是否必须编写自己的HTML解析器,或者有一种简单的方法来获取它?
答案 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" />
...所以如果你想要复制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)