C# Graphics 生成文字圆形头像

/// <summary>
        /// 生成圆形头像
        /// </summary>
        /// <param name="text">文本</param>
        /// <param name="path">路径</param>
        /// <returns></returns>
        public static MemoryStream CreateHeadUrl(string text, string path)
        {
            Bitmap bitmap = new Bitmap(200, 200);
            var font = new Font("文泉驿正黑", 40, FontStyle.Bold);
            Graphics g = Graphics.FromImage(bitmap);
            g.Clear(Color.Transparent);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

            //画圆
            Brush bush = new SolidBrush(ColorTranslator.FromHtml("#F75252"));//填充的颜色
            g.FillEllipse(bush, rect);

            //画圈
            Pen pen = new Pen(Color.FromArgb(255, 196, 196), 16);//画笔颜色             
            g.DrawEllipse(pen, rect);

            //文字居中
            SizeF size = g.MeasureString(text, font);
            int nLeft = Convert.ToInt32((bitmap.Width / 2) - (size.Width / 2));
            int nTop = Convert.ToInt32((bitmap.Height / 2) - (size.Height / 2));
            g.DrawString(text, font, Brushes.White, nLeft, nTop);

            MemoryStream ms = new MemoryStream();
            var bmp = CutEllipse(bitmap, rect, bitmap.Size, path);
            bmp.Save(ms, ImageFormat.Jpeg);
            return ms;
        }

        /// <summary>
        /// 剪裁圆形
        /// </summary>
        /// <param name="img"></param>
        /// <param name="rec"></param>
        /// <param name="size"></param>
        /// <param name="imgSavePath"></param>
        /// <returns></returns>
        private static Bitmap CutEllipse(Image img, Rectangle rec, Size size, string imgSavePath)
        {
            Bitmap bitmap = new Bitmap(size.Width, size.Height);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                using (TextureBrush br = new TextureBrush(img, WrapMode.Clamp, rec))
                {
                    br.ScaleTransform(bitmap.Width / (float)rec.Width, bitmap.Height / (float)rec.Height);
                    g.SmoothingMode = SmoothingMode.AntiAlias;
                    g.FillEllipse(br, new Rectangle(Point.Empty, size));
                }
            }
            bitmap.Save(imgSavePath, System.Drawing.Imaging.ImageFormat.Png);
            return bitmap;
        }

 

posted @ 2021-04-19 17:28  _小马哥  阅读(325)  评论(0编辑  收藏  举报