とある画像(エチでないやつ)を扱うシステムをASP運用してるのですが、この画像がなかなかでっかくて、WAN経由で一覧表示するとパフォマンス悪いってのがありました。

まあいいかなと思い、そのまんまにしてたのですが、このシステムの一部機能を使ったwebサイトを作る仕事をやらせて頂ける事になったので(感謝感激)、サムネル作ってパフォマンス上げないとなー、とゆうことで作ろうと思ったら、サムネルを作るメソッドが標準であるじゃないですか。

なので使い方載せてみました。

private void Page_Load(object sender, System.EventArgs e)
{
    Graphics _graph = Graphics.FromImage(new Bitmap(120,90));
    System.Drawing.Image.GetThumbnailImageAbort _callback
        = new System.Drawing.Image.GetThumbnailImageAbort(thumbnailCallback);
    Bitmap _bmp = new Bitmap(
        new Bitmap(Server.MapPath(imageUrl)).GetThumbnailImage(120,90,_callback,IntPtr.Zero));
    _graph.DrawImage(_bmp,0,0);

    // イメージ画質の調整
    ImageCodecInfo _info = getEncoderInfo("image/jpeg");

    // イメージをストリーム保存
    if (_info == null)
    {
        _bmp.Save(Response.OutputStream,ImageFormat.Jpeg);
    }
    else
    {
        EncoderParameters wParams = new EncoderParameters();
        EncoderParameter wParam = new EncoderParameter(Encoder.Quality,125L);
        wParams.Param[0] = wParam;
        _bmp.Save(Response.OutputStream,_info,wParams);
    }

    _bmp.Dispose();
}

public bool thumbnailCallback()
{
    return false;
}

private ImageCodecInfo getEncoderInfo(string mimeType)
{
    ImageCodecInfo[] _infos = ImageCodecInfo.GetImageEncoders();

    foreach (ImageCodecInfo _info in _infos)
    {
        if (_info.MimeType == mimeType)
        {
            return _info;
        }
    }

    return null;
}

赤字で書いた GetThumbnailImageメソッドがそれです。
callback用デリゲートを書くのはお約束みたいです。(GDI+ バージョン1では利用できないらしいです)

120×120ピクセル程度のサムネイルであればちょうど良いみたいですが、
それ以上大きい場合は自分でコード書け、みたいな事書いてました。


posted @ 18:05 feedback (1)
VanGoghSt 2014.10.29 07:46
こんにちは、私の友人 :)
私は自由のためXRumerを探して !!!

あなたが私にアドバイスになるだろう、私はそれをどこでダウンロードできますか?
それは実際にSEOのための最適なプログラムです。 !



P.S. 他のすべてのバージョンが古すぎると効果的ではない、 12.0.6 - 私は最新バージョンのみのXRumerが必要です!