如何將多個圖檔組合成單一圖片

摘要:如何將多個圖檔組合成單一圖片

如何將多個圖檔組合成單一圖片呢?直接看程式碼吧。下面這一個方法能夠將外觀為數目字的四個圖片檔(.gif) 組合成單一圖片並以圖片資料流傳回,以便在登入畫面中做為圖文驗證的雜訊四碼數字,以防止大量張貼:

// GenerateImage 以圖檔產生驗證字圖形
//函數功能:    GenerateImage 以圖檔產生驗證文字圖形
//傳入參數:   
//            img_width        圖形寬度
//            img_height        圖形高度
//            confirm_str        驗證字串
//傳回數值:
//            MemoryStream    圖形資料
//備註說明:    本範例僅有 0 ~ 9 的數字圖檔,故驗證字串僅可輸入 0 ~ 9 的數字
public MemoryStream GenerateImage(int img_width, int img_height, string confirm_str)
{
    int wlen = 0, cnt = 0, tmpwidth, tmpheight;
    string tmpfile = "";

    // 取得網站存放圖檔的位置
    string gpath = HttpContext.Current.Request.MapPath("~/images/confirm/");

    // 取得字串長度
    wlen = confirm_str.Length;

    // 建立圖片元件
    Bitmap img_work = new System.Drawing.Bitmap(img_width, img_height);

    // 建立繪圖元件
    Graphics gh_work = Graphics.FromImage(img_work);

    // 擷取字串內容對應的圖檔,並填入 img_work 圖片物件
    for (cnt = 0; cnt < wlen; cnt++)
    {
        // 取得對應圖檔的名稱
        tmpfile = gpath + confirm_str.Substring(cnt, 1) + ".gif";

        // 根據檔案建立圖片物件。
        using (System.Drawing.Image img_tmp = System.Drawing.Image.FromFile(tmpfile, true))
        {
            tmpwidth = img_tmp.Width;
            tmpheight = img_tmp.Height;

            // 將圖形填入繪圖元件
            gh_work.DrawImage(img_tmp, new Rectangle(cnt * tmpwidth, 0, tmpwidth, tmpheight), 0, 0, tmpwidth, tmpheight, GraphicsUnit.Pixel);
        }
    }

    // 建立繪圖輸出資料流
    MemoryStream ms_work = new MemoryStream();

    //將圖片儲存到輸出資料流
    img_work.Save(ms_work, System.Drawing.Imaging.ImageFormat.Png);

    gh_work.Dispose();
    img_work.Dispose();

    return ms_work;
}

章立民研究室

本文節錄自 「ASP.NET 3.5 圖表與實務案例模組大全」一書