2 つのパラメーター (サイズ変更用の x と y) を持つ画像を返す最良の方法は何ですか。
例えば
~/api/image12345/200/200
200 x 200 の jpg/png/or gif を返します
オブジェクトを返すSystem.Drawing.Image
か、手動で定義する必要がありますHTTPReponseMessage.Content
か?
2 つのパラメーター (サイズ変更用の x と y) を持つ画像を返す最良の方法は何ですか。
例えば
~/api/image12345/200/200
200 x 200 の jpg/png/or gif を返します
オブジェクトを返すSystem.Drawing.Image
か、手動で定義する必要がありますHTTPReponseMessage.Content
か?
System.Drawing.Image
それを適切なバイトに変換する方法を知っているフォーマッタも追加しない限り、 a を返すべきではありません。
考えられる解決策の 1 つは、コンテンツにイメージが格納された を返すことですHttpResponseMessage
(以下に示すように)。質問で示した URL が必要な場合は、{imageName}、{width}、および {height} パラメーターをマップするルートが必要になることに注意してください。
public HttpResponseMessage Get(string imageName, int width, int height)
{
Image img = GetImage(imageName, width, height);
using(MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(ms.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return result;
}
}
しかし、繰り返しますが、これを多くの場所で行っている場合は、フォーマッタ ルートを使用することが「推奨される」方法である可能性があります。プログラミングのほとんどすべてと同様に、答えはシナリオによって異なります。
画像が重い。ASP.NET WebForms、HttpHandlers、MVC、および Web API はすべて、静的ファイルを提供するという非常にひどい仕事をします。IIS はこれを非常にうまく処理します。多くの場合、20 ~ 100 倍の効率です。
パフォーマンスを向上させたい場合は、遅くともPostAuthorizeRequest 中に URL 書き換えを実行して、IIS がファイルを取得して提供できるようにします。はい、これは HttpModule レベルのイベント処理を意味します。
[免責事項: 私は次の記事とオープンソース プロジェクトの著者です]
画像で何か動的なことをしている場合は、避けるべき画像処理の落とし穴に関するこの記事を確認し、 ImageResizerを検討することを検討してください。優れたディスク キャッシング (IIS 静的ファイル処理を使用) を備えており、あらゆる種類のイメージ生成に簡単に接続できます。高度な操作が必要な場合は、AForge、FreeImage、および WIC のオプションのバインディングも用意されています。