如何在运行时从文本生成图像

任何人都可以指导如何从input文本生成图像。 图片可能有任何扩展名并不重要。

好吧,假设你想在C#中的图像上绘制一个string,你需要在这里使用System.Drawing命名空间:

private Image DrawText(String text, Font font, Color textColor, Color backColor) { //first, create a dummy bitmap just to get a graphics object Image img = new Bitmap(1, 1); Graphics drawing = Graphics.FromImage(img); //measure the string to see how big the image needs to be SizeF textSize = drawing.MeasureString(text, font); //free up the dummy image and old graphics object img.Dispose(); drawing.Dispose(); //create a new image of the right size img = new Bitmap((int) textSize.Width, (int)textSize.Height); drawing = Graphics.FromImage(img); //paint the background drawing.Clear(backColor); //create a brush for the text Brush textBrush = new SolidBrush(textColor); drawing.DrawString(text, font, textBrush, 0, 0); drawing.Save(); textBrush.Dispose(); drawing.Dispose(); return img; } 

此代码将首先测量string,然后创build正确大小的图像。

如果你想保存这个函数的返回值,只需调用返回图像的Save方法即可。

使用imagemagick在图像上呈现文本(在服务器上)

既然你是在C#中,你也可以直接使用.NET类来进行位图和字体操作(类如:System.Drawing.Bitmap和System.Drawing.Graphics)

我只是将这个答案中提到的这个方法转换成一个VB.NET方法。 也许这有助于某人。

 Public Function DrawText(ByVal text As String, ByRef font As Font, ByRef textColor As Color, ByRef backColor As Color) As Image ' first, create a dummy bitmap just to get a graphics object Dim img As Image = New Bitmap(1, 1) Dim drawing As Graphics = Graphics.FromImage(img) ' measure the string to see how big the image needs to be Dim textSize As SizeF = drawing.MeasureString(Text, Font) ' free up the dummy image and old graphics object img.Dispose() drawing.Dispose() ' create a new image of the right size img = New Bitmap(CType(textSize.Width, Integer), CType(textSize.Height, Integer)) drawing = Graphics.FromImage(img) ' paint the background drawing.Clear(BackColor) ' create a brush for the text Dim textBrush As Brush = New SolidBrush(textColor) drawing.DrawString(text, font, textBrush, 0, 0) drawing.Save() textBrush.Dispose() drawing.Dispose() Return img End Function 

编辑 :固定错字。

谢谢Kazar。 先前使用USING处理图像/graphics对象后的答案略有改进,并且引入了最小尺寸参数

  private Image DrawTextImage(String currencyCode, Font font, Color textColor, Color backColor) { return DrawTextImage(currencyCode, font, textColor, backColor, Size.Empty); } private Image DrawTextImage(String currencyCode, Font font, Color textColor, Color backColor, Size minSize) { //first, create a dummy bitmap just to get a graphics object SizeF textSize; using (Image img = new Bitmap(1, 1)) { using (Graphics drawing = Graphics.FromImage(img)) { //measure the string to see how big the image needs to be textSize = drawing.MeasureString(currencyCode, font); if (!minSize.IsEmpty) { textSize.Width = textSize.Width > minSize.Width ? textSize.Width : minSize.Width; textSize.Height = textSize.Height > minSize.Height ? textSize.Height : minSize.Height; } } } //create a new image of the right size Image retImg = new Bitmap((int)textSize.Width, (int)textSize.Height); using (var drawing = Graphics.FromImage(retImg)) { //paint the background drawing.Clear(backColor); //create a brush for the text using (Brush textBrush = new SolidBrush(textColor)) { drawing.DrawString(currencyCode, font, textBrush, 0, 0); drawing.Save(); } } return retImg; } 

F#版本:

 open System.Drawing let drawText text font textColor backColor = let size = use dummyImg = new Bitmap(1, 1) use drawing = Graphics.FromImage(dummyImg) drawing.MeasureString(text, font) let img = new Bitmap((int size.Width), (int size.Height)) use drawing = Graphics.FromImage(img) use textBrush = new SolidBrush(textColor) do drawing.Clear(backColor) drawing.DrawString(text, font, textBrush, PointF()) drawing.Save() |> ignore img