亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#利用GDI+給圖片添加文字(文字自適應矩形區域)

2019-10-29 21:05:57
字體:
來源:轉載
供稿:網友

前言

這篇文章是 GDI+ 總結系列的第二篇,如果對 GDI+ 的基礎使用不熟悉的朋友可以先看第一篇文章《C# 使用 GDI+ 畫圖》。

需求

需求是要做一個編輯文字的頁面。用戶在網頁端寫文字,文字區域是個矩形框,用戶可以通過下方的拖動條調節文字大小。

如下圖:

C#,gdi,文字,繪制文字,輸出文字

提交數據的時候前端傳文字區域的左上角和右下角定位給后臺。因為前端的字體大小單位與后端沒什么關系,所以不能直接傳字體大小,也就是后端要根據矩形區域以及文字內容來自己推算用什么樣的字體大小合適。

簡單說就是知道文字的矩形區域,以及文字內容,要讓文字內容根據矩形區域大小調整到適合的字體大小能比較合適地填滿這個區域。

分析&思路

Graphics 類有個 MeasureString 方法,可以用來計算以當前字體寫出來的文字會占據多少像素。
如下:

//// 摘要:// 測量用指定的 System.Drawing.Font 繪制的指定字符串。//// 參數:// text:// 要測量的字符串。//// font:// System.Drawing.Font,它定義字符串的文本格式。//// 返回結果:// 此方法返回 System.Drawing.SizeF 結構,該結構表示 text 參數指定的、使用 font 參數繪制的字符串的大小,單位由 System.Drawing.Graphics.PageUnit// 屬性指定。//// 異常:// T:System.ArgumentException:// font 為 null。public SizeF MeasureString(string text, Font font);

這個方法返回的 SizeF 包含 Width 和 Height 屬性,讀取這兩個屬性可以獲取到文字內容所占的寬高(以像素為單位)。

//// 摘要://  獲取或設置此 System.Drawing.SizeF 結構的水平分量。//// 返回結果://  此 System.Drawing.SizeF 結構的水平分量,通常以像素為單位進行度量。public float Width { get; set; }// 摘要://  獲取或設置此 System.Drawing.SizeF 結構的垂直分量。//// 返回結果://  此 System.Drawing.SizeF 結構的垂直分量,通常以像素為單位進行度量。public float Height { get; set; }

于是我們可以先根據前端傳過來的文字左上角與右下角定位,算出文字的矩形區域,然后估計一個字體大小,再用 MeasureString 方法計算出估算的文字所占區域,比較和實際的文字區域大小,大了則縮小字體,小了則增大字體。這樣即可大約找出合適的文字大小。

具體實現

添加文字方法

/// <summary>/// 圖片添加文字,文字大小自適應/// </summary>/// <param name="imgPath">圖片路徑</param>/// <param name="locationLeftTop">左上角定位(x1,y1)</param>/// <param name="locationRightBottom">右下角定位(x2,y2)</param>/// <param name="text">文字內容</param>/// <param name="fontName">字體名稱</param>/// <returns>添加文字后的Bitmap對象</returns>public static Bitmap AddText(string imgPath, string locationLeftTop, string locationRightBottom, string text, string fontName = "華文行楷"){ Image img = Image.FromFile(imgPath); int width = img.Width; int height = img.Height; Bitmap bmp = new Bitmap(width, height); Graphics graph = Graphics.FromImage(bmp); // 計算文字區域 // 左上角 string[] location = locationLeftTop.Split(','); float x1 = float.Parse(location[0]); float y1 = float.Parse(location[1]); // 右下角 location = locationRightBottom.Split(','); float x2 = float.Parse(location[0]); float y2 = float.Parse(location[1]); // 區域寬高 float fontWidth = x2 - x1; float fontHeight = y2 - y1; float fontSize = fontHeight; // 初次估計先用文字區域高度作為文字字體大小,后面再做調整,單位為px Font font = new Font(fontName, fontSize, GraphicsUnit.Pixel); SizeF sf = graph.MeasureString(text, font); int times = 0; // 調整字體大小以適應文字區域 if (sf.Width > fontWidth) {  while (sf.Width > fontWidth)  {   fontSize -= 0.1f;   font = new Font(fontName, fontSize, GraphicsUnit.Pixel);   sf = graph.MeasureString(text, font);   times++;  }  Console.WriteLine("一開始估計大了,最終字體大小為{0},循環了{1}次", font.ToString(), times); } else if (sf.Width < fontWidth) {  while (sf.Width < fontWidth)  {   fontSize += 0.1f;   font = new Font(fontName, fontSize, GraphicsUnit.Pixel);   sf = graph.MeasureString(text, font);   times++;  }  Console.WriteLine("一開始估計小了,最終字體大小為{0},循環了{1}次", font.ToString(), times); } // 最終的得出的字體所占區域一般不會剛好等于實際區域 // 所以根據兩個區域的相差之處再把文字開始位置(左上角定位)稍微調整一下 x1 += (fontWidth - sf.Width) / 2; y1 += (fontHeight - sf.Height) / 2; graph.DrawImage(img, 0, 0, width, height); graph.DrawString(text, font, new SolidBrush(Color.Black), x1, y1); graph.Dispose(); img.Dispose(); return bmp;}

測試調用

private static void Main(string[] args){ try {  DrawingEntity drawing = new DrawingEntity();  Console.WriteLine("Start drawing ...");  System.Drawing.Bitmap bmp = drawing.AddText(@"D:/test/39585148.png", "177.75,63.84", "674.73, 141.6", "大海啊,全是浪");  bmp.Save(@"D:/test/output.png");  bmp.Dispose();  Console.WriteLine("Done!"); } catch (System.Exception ex) {  Console.WriteLine("出錯了??!/n" + ex.ToString()); } finally {  System.Console.WriteLine("/nPress any key to continue ...");  System.Console.ReadKey(); }}

最終效果:

C#,gdi,文字,繪制文字,輸出文字

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色婷婷av一区二区三区在线观看| 日韩视频免费看| 91成人在线观看国产| 亚洲福利在线看| 成人av电影天堂| 欧美久久精品一级黑人c片| 国产日韩在线免费| 国产中文欧美精品| 日韩成人在线播放| 久久视频免费观看| 精品国产31久久久久久| 亚洲无亚洲人成网站77777| 国产91精品网站| 国产在线精品播放| 欧美日韩在线看| 亚洲午夜国产成人av电影男同| 18性欧美xxxⅹ性满足| 亚洲国产美女久久久久| 在线色欧美三级视频| 日韩欧美国产免费播放| 国产999精品视频| 欧美色图在线视频| 久久视频国产精品免费视频在线| 精品久久久久久电影| 中文字幕免费国产精品| 久久成人精品电影| 国产精品免费一区豆花| 成人av在线亚洲| 日韩中文字幕在线视频| 91在线中文字幕| 国产亚洲视频在线| 中文字幕一精品亚洲无线一区| 国内精品国产三级国产在线专| xxx成人少妇69| 九九九久久国产免费| 国产精品久久91| 97涩涩爰在线观看亚洲| 中文字幕成人精品久久不卡| 亚洲欧美日韩精品久久奇米色影视| 欧美大尺度电影在线观看| 欧美性猛交xxxx黑人| 欧美日韩亚洲激情| 成人久久一区二区三区| 国产精品永久免费| 在线成人一区二区| 亚洲精品国产精品自产a区红杏吧| 国产一区二区三区毛片| 欧美主播福利视频| 久久久人成影片一区二区三区观看| 国产精品自产拍在线观看| 日韩成人在线电影网| 欧美巨乳在线观看| 欧美日韩另类字幕中文| 欧美视频国产精品| 日韩美女免费观看| 欧美成人精品不卡视频在线观看| 日本精品一区二区三区在线播放视频| 欧美电影在线观看高清| 5252色成人免费视频| 国产视频久久久久久久| 亚洲人成网站777色婷婷| 伊人久久精品视频| 最新国产成人av网站网址麻豆| 日韩av在线影院| 日韩av免费在线播放| 91午夜理伦私人影院| 伊人伊成久久人综合网站| 午夜精品一区二区三区在线| 欧美电影免费观看大全| 日韩中文在线中文网在线观看| 日本老师69xxx| 亚洲欧美另类国产| 久热精品视频在线观看| 久久久久久亚洲精品中文字幕| 亚洲丁香婷深爱综合| 精品国产一区二区三区久久| 欧美日韩国产91| 亚洲在线免费视频| 精品香蕉在线观看视频一| 欧美丝袜一区二区三区| 欧美一区深夜视频| 日韩高清av一区二区三区| 亚洲精品成人久久久| 亚洲精品日韩丝袜精品| 日韩av一区在线| 亚洲成人精品av| 欧美性猛交丰臀xxxxx网站| 亚洲男人第一av网站| 欧美精品成人91久久久久久久| 日韩一区二区三区在线播放| 亚洲一区二区在线播放| 国产精品久久久久久搜索| 91久久精品久久国产性色也91| 亚洲成色999久久网站| 精品视频中文字幕| 精品国偷自产在线视频99| 日本精品性网站在线观看| 精品动漫一区二区| 91精品中文在线| 91精品国产电影| 亚洲精品一区在线观看香蕉| 国产精品手机播放| 国产成人亚洲精品| 国产视频精品久久久| 欧美影院成年免费版| 97久久久久久| 欧美日韩国产中文字幕| 欧美黑人国产人伦爽爽爽| 久久露脸国产精品| www高清在线视频日韩欧美| 成人福利视频在线观看| 国内精品久久久久| 国产成人精品久久久| 国产精品高清网站| 高清欧美一区二区三区| 97色在线视频| 久久久久久九九九| 亚洲欧洲自拍偷拍| 懂色av影视一区二区三区| 日韩美女在线播放| 日韩在线欧美在线| 在线看福利67194| 亚洲欧美视频在线| 欧美成人精品一区二区三区| 国产不卡一区二区在线播放| 欧美激情第99页| 国产精品爽爽ⅴa在线观看| 中文字幕精品在线视频| 97国产精品免费视频| 国产精品久久久久久影视| 成人免费淫片aa视频免费| 不卡av电影在线观看| 日韩av快播网址| 欧美在线视频播放| www.久久撸.com| 九九精品在线观看| 538国产精品视频一区二区| 成人日韩在线电影| 久久精品美女视频网站| 久久久www成人免费精品| 欧美亚洲成人网| 亚洲大胆人体视频| 国产精品日日摸夜夜添夜夜av| 日韩女优在线播放| 日韩在线精品视频| 欧美激情小视频| 久久男人av资源网站| 日韩精品免费在线观看| 亚洲黄色片网站| 国产亚洲欧美日韩一区二区| 日韩在线免费视频| 欧美精品一区在线播放| 精品视频在线导航| 亚洲男女自偷自拍图片另类| 欧美精品在线极品| 欧美自拍视频在线| 日韩亚洲综合在线| 美女999久久久精品视频| 91精品中国老女人| 色综合老司机第九色激情| 国产精品狼人色视频一区| 国产视频精品xxxx| 亚洲欧洲午夜一线一品| 精品无人国产偷自产在线|