12

次のような画像のURLを検出する方法はありますか?

http://mysite.com/image.jpg

しかし、他のフォーマットでも?.NET 4.0でC#を使用しています。

何かのようなもの

bool isImageUrl(string URL){
}

編集私は、URLが画像を指しているかどうかを意味しました。例:URL

http://mysite.com/image.jpg

有効な画像ですが、

http://mysite.com/image

ではありません。

4

5 に答える 5

17

Httpの方法を使用して決定できHEADます(画像全体をダウンロードせずに)

bool IsImageUrl(string URL)
{
    var req = (HttpWebRequest)HttpWebRequest.Create(URL);
    req.Method = "HEAD";
    using (var resp = req.GetResponse())
    {
        return resp.ContentType.ToLower(CultureInfo.InvariantCulture)
                   .StartsWith("image/");
    }
}
于 2012-06-18T12:39:29.877 に答える
8

(を使用してHttpWebRequest)URLにHTTPリクエストを送信し、返されたが。ContentTypeで始まるかどうかを確認できimage/ます。

于 2012-06-18T12:26:42.117 に答える
3

もちろん、URLが既知の画像ファイル拡張子で終わっているかどうかを簡単に確認することもできます。ただし、より安全な方法は、実際にリソースをダウンロードして、取得したコンテンツが実際に画像であるかどうかを確認することです。

public static bool IsUrlImage(string url)
{
    try
    {
        var request = WebRequest.Create(url);
        request.Timeout = 5000;
        using (var response = request.GetResponse())
        {
            using (var responseStream = response.GetResponseStream())
            {
                if (!response.ContentType.Contains("text/html"))
                {
                    using (var br = new BinaryReader(responseStream))
                    {
                        // e.g. test for a JPEG header here
                        var soi = br.ReadUInt16();  // Start of Image (SOI) marker (FFD8)
                        var jfif = br.ReadUInt16(); // JFIF marker (FFE0)
                        return soi == 0xd8ff && jfif == 0xe0ff;
                    }
                }
            }
        }
    }
    catch (WebException ex)
    {
        Trace.WriteLine(ex);
        throw;
    }
    return false;
}
于 2012-06-18T12:30:48.880 に答える
2

定義した文字列のセットごとに、.EndsWith()を使用して文字列を確認できます。

そのURLのオブジェクトが実際に画像であるかどうかを知りたい場合は、自分でWebリクエストを実行し、コンテンツタイプのHTTPヘッダーを確認する必要があります。

ただし、サーバーによっては、それでも不正確になる場合があります。

于 2012-06-18T12:27:03.693 に答える
0

オプションは、System.Net.HttpのHttpClientを使用することです。

HttpClient client = new HttpClient();

HttpResponseMessage res = await client.GetAsync("https://picsum.photos/200/300");

bool IsTypeImage = res.ToString().Contains("Content-Type: image");

于 2020-12-09T01:07:40.980 に答える