ASP.NETMVC3と4つのWebサイトがいくつかあります。すべてのサイトは、ライブラリとは別の同じリソースを使用しています。リソースは.resxファイルです。これらのサイト内のHTMLで、これらのリソースの画像を使用したいと思います。以前はresxファイルを使用していなかったので、それらを操作するための良い方法がわかりません。適切なリソースファイルから適切な画像を提供するサービスを作成するかもしれないと思いますが、もっと良い方法があるはずです。私の質問は、resxファイルからこれらの画像を使用するための良い方法は何ですか?resxに画像を保存するのは本当に良くないかもしれませんか?
5123 次
1 に答える
5
これを行う簡単な方法の1つは、コントローラーにアクションを追加することです。これFileStreamResult
により、リソースキーに基づいてイメージが返されます。
public FileStreamResult Image(string key)
{
var bitmap = (Bitmap)Resources.Images.ResourceManager.GetObject(key);
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Png);
stream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(stream, "image/png");
}
これで、次のようにビューからアクセスできるようになります。
<img src='@Url.Action("Image", "MyController", new { key = "Image1" })' />
別の方法(ビューのみを使用して実行できます)は、base64でエンコードされた文字列を作成することです。
@{
var stream = new MemoryStream();
var bitmap = Resources.Images.ResourceManager.GetObject("Image1") as System.Drawing.Bitmap;
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Seek(0, SeekOrigin.Begin);
string base64 = Convert.ToBase64String(stream.ToArray());
}
<img src="data:image/gif;base64,@base64" />
これを実装する良い方法は、Razorヘルパーを使用して、ビューでより単純な構文を有効にすること@Html.GetImageFor(Resources.Images.Image1, "alt")
です。
public static MvcHtmlString GetImageFor(this HtmlHelper helper, Bitmap bitmap, string AltText = "")
{
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Seek(0, SeekOrigin.Begin);
string base64 = Convert.ToBase64String(stream.ToArray());
return new MvcHtmlString(
string.Format("<img src='data:image/gif;base64,{0}' alt='{1}' />",
base64, AltText)
);
}
注: .ResXファイルのプロパティは、次のように設定する必要があります(MVCプロジェクトの場合と同様)。
- PublicResXFileCodeGenerator
CustomTool
に設定 - リソース
Custom Tool Namespace
に設定
于 2012-09-21T02:40:41.293 に答える