1. 程式人生 > >asp.net中ashx生成驗證碼程式碼放在Linux(centos)主機上訪問時無法顯示問題

asp.net中ashx生成驗證碼程式碼放在Linux(centos)主機上訪問時無法顯示問題

最近有個專案加入了驗證碼功能,就從自己部落格以前的程式碼中找到直接使用,直接訪問驗證碼頁面報錯如下:

Application Exception
System.ArgumentException
The requested FontFamily could not be found [GDI+ status: FontFamilyNotFound]

Description: HTTP 500.Error processing request.
Details: Non-web exception. Exception origin (name of application or object
): System.Drawing. Exception stack trace: at System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000] in <filename unknown>:0 at System.Drawing.FontFamily..ctor (GenericFontFamilies genericFamily) [0x00000] in <filename unknown>:0 at (wrapper remoting-invoke-with-check) System.Drawing.FontFamily:.ctor (System.Drawing.Text.GenericFontFamilies) at System.Drawing.FontFamily.get_GenericMonospace () [
0x00000] in <filename unknown>:0 at EnterpriseShow.UI.Manager.AjaxHandle.ValidCode.ProcessRequest (System.Web.HttpContext context) [0x00000] in <filename unknown>:0 at System.Web.HttpApplication+<Pipeline>c__Iterator1.MoveNext () [0x00000] in <filename unknown>:0 at System.Web.HttpApplication.Tick () [
0x00000] in <filename unknown>:0

1、首先從window上copy字型安裝到centos中

安裝字型方法如下:本段文字來自唧唧的部落格

在CentOS中安裝中文字型
作者:唧唧
1、先從你本機 C:\Windows\Fonts 拷貝或者網路上下載你想要安裝的字型檔案(*.ttf檔案)到 /usr/share/fonts/chinese/TrueType 目錄下(如果系統中沒有此目錄,則自行mkdir建立,亦可重新命名為自己喜歡的資料夾名)
2、修改字型檔案的許可權,使root使用者以外的使用者也可以使用
# cd /usr/share/fonts/chinese/TrueType
# chmod 755 *.ttf
3、建立字型快取
# mkfontscale (如果提示 mkfontscale: command not found,需自行安裝 # yum install mkfontscale )
# mkfontdir 
# fc-cache -fv (如果提示 fc-cache: command not found,則需要安裝# yum install fontconfig )
4、重啟計算機
# reboot

2、安裝完畢後,我們在程式碼中指定要使用的字型

context.Response.ContentType = "image/gif";
            Bitmap basemap = new Bitmap(200, 60);
            Graphics garph1 = Graphics.FromImage(basemap);

            garph1.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);
            Font font = new Font("consola.ttf", 48, FontStyle.Bold, GraphicsUnit.Pixel);

            Random r = new Random();
            string letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ";
            string letter;
            StringBuilder s = new StringBuilder();
            for (int i = 0; i < 5; i++)
            {
                letter = letters.Substring(r.Next(0, letters.Length - 1), 1);
                s.Append(letter);
                garph1.DrawString(letter, font, new SolidBrush(Color.Black), i * 38, r.Next(0, 15));

            }

            Pen linePen = new Pen(new SolidBrush(Color.Black), 2);
            for (int x = 0; x < 6; x++)
            {
                garph1.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
            }

            basemap.Save(context.Response.OutputStream, ImageFormat.Gif);
            context.Session["CheckCode"] = s.ToString();    //存入Session,用於對比驗證
            context.Response.End();

再次訪問清晰可見啊

記錄下來備忘。