2

ASP.NETで通常のギャラリーを作成していますが、サムネイルの作成の経験はほとんどありません。アルゴリズムとGetThumbnailImageメソッドは知っていますが、問題は別の場所にあります。現在、ImageButtonコントロールを使用して画像(サイズを変更したばかり)を表示しています。そして、それがポイントです。「サムネイル」画像をImageUrlプロパティに接続する方法がわかりません。それも可能ですか、もしそうなら、どのように?または、代わりに他のコントロールを使用する必要がありますか?提案をありがとう!

4

3 に答える 3

6

HttpHandlerを設定する必要があるようです。これにより、サイズ変更された画像が作成され、おそらくディスクにもキャッシュされて、リクエストごとにサムネイルを再作成する手間が省けます。

したがって、たとえば:

<asp:ImageButton ID="ImageButton1" ImageUrl="~/ImageHandler.ashx?ImageId=123" runat="server />

次に、ハンドラーがあります。

namespace MyProject
{
    public class ImageHandler : IHttpHandler
    {
        public virtual void ProcessRequest(HttpContext context)
        {
            // 1. Get querystring parameter
            // 2. Check if resized image is in cache
            // 3. If not, create it and cache to disk
            // 5. Send the image

            // Example Below
            // -------------

            // Get ID from querystring
            string id = context.Request.QueryString.Get("ImageId");

            // Construct path to cached thumbnail file
            string path = context.Server.MapPath("~/ImageCache/" + id + ".jpg");

            // Create the file if it doesn't exist already
            if (!File.Exists(path))
                CreateThumbnailImage(id);

            // Set content-type, content-length, etc headers

            // Send the file
            Response.TransmitFile(path);
        }

        public virtual bool IsReusable
        {
            get { return true; }
        }
    }
}

また、web.configでこれを設定する必要があります

<system.web>
    <httpHandlers>
        <add verb="*" path="ImageHandler.ashx" type="MyProject.ImageHandler, MyProject"/>
    </httpHandlers>
</system.web>

これはあなたが始めるのに十分なはずです。サムネイルを作成するには、ProcessRequestメソッドを変更する必要がありますが、これはすでに処理済みであるとおっしゃいました。また、ファイルをブラウザに送信するときに、ヘッダーが正しく設定されていることを確認する必要があります。

于 2009-04-16T19:15:15.200 に答える
5

画像リクエストを処理してサムネイルを返す(または画像に対して必要なことをすべて実行する)HttpHandlerを作成できます。

ASP.NETでグラフィックス処理を行う場合は常に、System.DrawingのほとんどすべてがGDI +のラッパーであるため、適切に破棄する必要があるアンマネージメモリへの参照を保持することに注意してください(usingステートメントを使用してください)。これは、StringFormatなどの単純なクラスにも当てはまります。

于 2009-04-16T19:02:32.157 に答える
1

Httpハンドラーは行く方法です。

パフォーマンスに関するもう1つの注意事項:イメージの操作は、メモリとCPUの両方の観点から、ディスク容量に比べてコストがかかります。したがって、完全な画像からサムネイルを生成することは、完全な画像ごとに1回だけ実行したいことです。これを行うのに最適なタイミングは、おそらく画像がアップロードされたときです。特に、同じページにこれらの画像を多数表示する場合はなおさらです。

于 2009-04-16T19:41:42.593 に答える