从Web页面获取缩略图图像
本文关键字:略图 图像 获取 Web | 更新日期: 2023-09-27 18:04:39
我有c#代码从像http://i.imgur.com/QvkaduU.jpg
这样的url获取图像,但我如何从这样的网页获取图像:http://imgur.com/gallery/QvkaduU
?
是否有任何"简单"的方法来做到这一点,或者我将不得不获取HTML并构建一个c#解析器,在HTML中寻找比其他所有更大的图像?
让我把这个弄清楚。如果你将http://imgur.com/gallery/QvkaduU
(HTML版本)粘贴到例如Facebook的状态更新字段中,它会找到主图像并从中制作缩略图,这正是我正在寻找的行为。问题是,这是怎么做到的?我是否必须编写自己的HTML解析器,或者是否有一种简单的方法来获得它?
对于任意一个URL,要获得一个"好的"缩略图是不容易的。
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的算法,你需要获取页面源,解析它的任何"提示",就像上面的(你最好检查一下,我没有错过任何其他"提示"格式),并提出一个后备算法,如果页面不包括其中一个。
一个更现实的解决方案是使用别人的URL ->缩略图系统。
如果你喜欢Facebook的版本,我认为你应该能够通过Facebook的API请求给定URL的Facebook缩略图。
其他提供这类服务的服务有:
- http://webthumb.bluga.net/home(非免费)
- http://immediatenet.com/thumbnail_api.html(免费,可能有限制性TOS)
- url https://www.google.com/search?q=get +缩略图+ +
如果QvkaduU部分在html页面和图像之间总是相同的,您可以只是做一个字符串替换吗?
" https://i.stack.imgur.com/6YbCj.jpg " .Replace("imgur.com/gallery"、"i.imgur.com")+"jpg";
我会获取整个HTML源代码,并使用regex放置所有<img ... src="...">
参数以及< ... style="... background-image: ...;">
css内联属性,并尝试下载链接后面的所有文件。然后我会(尝试将其转换为位图和)检查像素大小,最大的图片应该是你想要的图片。
谷歌可能会帮助你如何检查像素大小和转换任何图像。
从HTML源获取所有图像链接的正则表达式应为
<img[^>]+src='"([^"]+)'".*?>|<[^>]+style='"[^"]*background-image:'s*url'('s*'?([^')])'s*'?)'s*;.*?>
(未测试,但很确定)
结果将在第二或第三组索引中,也不要忘记在相对链接上加上当前url的前缀。
你已经在正确的轨道上了,是的,最可靠的方法是获取HTML,解析它并寻找图像,然后你会根据位置和大小对图像进行排名。例如,如果你找到的第一张图片足够大,可以制作缩略图,那么很酷,如果它很小,你就去看下一张图片,等等。这将是最明智的使用像Timthumb这样的图像插件(我想我已经看到了一个ASP。. NET版本)并缓存图像,这样一旦你查找缩略图来表示一个网站,你就可以从catch中调用图像。
你能试着这样做吗?
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你可以试试这个吗
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;
}
了如何从URL获取图像到pictureBox ?(Windows Mobile)