6

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

是否有任何“简单”的方法可以做到这一点,或者我将不得不获取 HTML 并构建一个 C# 解析器,该解析器在 HTML 中查找比其他所有图像都大的图像?

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

4

6 回答 6

5

没有简单的方法可以为任意 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 的版本,我认为您应该能够通过他们的 API 为给定 URL 请求 Facebook 的缩略图。

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

于 2013-03-26T15:26:17.007 回答
1

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

" http://imgur.com/gallery/QvkaduU ".Replace("imgur.com/gallery","i.imgur.com") + ".jpg";

于 2013-03-22T21:31:34.930 回答
1

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

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

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

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

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

于 2013-03-27T13:34:31.127 回答
1

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

于 2013-03-27T20:41:54.720 回答
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

于 2013-03-19T20:11:37.270 回答
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;
}

如何从 URL 中获取图片到图片框?(Windows 移动版)

于 2013-03-19T21:23:46.837 回答