2013-03-19 25 views
6

http://i.imgur.com/QvkaduU.jpgのようなURLから画像を取得するC#コードがありますが、Webページからこのような画像を取得するにはどうすればよいですか:http://imgur.com/gallery/QvkaduUWebページからサムネイル画像を取得する

これを行うには簡単な方法がありますか、またはHTMLをフェッチして、他のすべてより大きいイメージをHTMLで検索するC#パーサーを構築する必要がありますか?

これをクリアしてください。 http://imgur.com/gallery/QvkaduU(HTML版)をたとえばFacebookのステータス更新フィールドに貼り付けると、メイン画像が見つかることになり、そこからサムネイルを作成します。これはまさに私が探している動作です。問題は、これはどのように行われるのでしょうか?私は自分自身のHTMLパーサーを書く必要がありますか?これを手に入れる簡単な方法はありますか?

+1

[API](http://api.imgur.com/)にチェックを入れましたか? – Filburt

+0

いいえ、私はimgurlだけでなく一般的な解決策を望んでいました。 – Banshee

+1

私はスクリーンスクレイピングは常に*最後の*リゾートだと思います。ほとんどの場合、それは使用条件に違反します。 – Filburt

答えて

4

任意のURLに対して「良い」サムネイル画像を取得する簡単な方法はありません。

そうするためのFacebookのアルゴリズムはかなり複雑です。あなたがしたかったので、もし...

<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

:ページの開発者には、 <head>に様々なメタタグを追加することによって、それにヒントを与えることができますFacebookのアルゴリズムを再現するには、ページソースを取得し、上記のような "ヒント"を解析する必要があります(他の "ヒント"フォーマットを見逃していないことを確認することをお勧めします)。ページにそれらのいずれかが含まれていない場合はアルゴリズム。

もっと現実的な解決策は、誰かのURL - >サムネイルシステムを使用することです。

Facebookのバージョンが好きなら、自分のAPIを使ってFacebookのサムネイルを特定のURLにリクエストできるはずです。私はフェッチう

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

+1

これは、オブジェクトをダウンロードするだけですそのURLがあなたに与えてくれるのであれば、そのイメージだけはうまくいくはずですが、複数のイメージを持つHTMLページ(主な大きなイメージに加えて)がおそらく問題になるでしょう。 – Banshee

0

あなたはQvkaduU部分が常にHTMLページと画像と同じである場合 How to get an image to a pictureBox from an URL? (Windows Mobile)

+1

このコードは、URLがあなたに与えたオブジェクトをダウンロードします。そのイメージは動作しますが、HTMLページの場合は動作しません。私の問題は最後のものです(画像を含むHTMLページ)。 – Banshee

1

から得てこの

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; 
} 

を試すことができ、あなただけの文字列を行うことができます置換?

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

1

この種のものを提供する他のサービスがあります全体のHTMLソースと<img ... src="...">パラメータと同様に< ... style="... background-image: ...;"> cssのインラインプロパティを使用して正規表現を使用してd一時的にリンクの背後にあるすべてのファイルをダウンロードしようとします。それから私は(ビットマップに変換しようとすると)ピクセルサイズを確認し、最大の画像はあなたが望む画像にすべきです。

Googleでは、ピクセルサイズを確認して画像を変換する方法をお手伝いします。

HTMLソースからのすべての画像リンクが

<img[^>]+src=\"([^"]+)\".*?>|<[^>]+style=\"[^"]*background-image:\s*url\(\s*'?([^')])\s*'?)\s*;.*?>する必要があります取得するための正規表現(テストが、かなり確信していない)

結果もない、第二または第三グループインデックスになります現在のURLを相対リンクに接頭辞を付けることを忘れないでください。

1

あなたはすでに適切な道を歩んでいます。最も信頼できる方法は、HTMLを取り出して解析し、画像を探すことです。位置と大きさに基づいて画像をランク付けします。たとえば、見つかった最初の画像がサムネイルを作成するのに十分な大きさであれば、それが小さくても、次の画像に移動します。Timthumbのような画像プラグインを使用することをお勧めします。私はいつかASP.NETバージョンを見たことがあります)、あなたがウェブサイトを表現するためにサムネイルを探したら、その代わりにキャッチからイメージを呼び出すことができるように画像をキャッシュします。

関連する問題