从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解析器,或者是否有一种简单的方法来获得它?

从Web页面获取缩略图图像

对于任意一个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)