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

首頁 > 編程 > .NET > 正文

.NET Core利用skiasharp文字頭像生成方法教程(基于docker發布)

2024-07-10 13:33:00
字體:
來源:轉載
供稿:網友

一、問題背景

目前.NET Core下面針對于圖像處理的庫微軟并沒有集成,在.NET FrameWork下我們已經習慣使用System.Drawing類庫做簡單的圖像處理,到了.NET Core下一臉懵逼的我,只能百度+谷歌看看有沒啥解決方案,好在網上資料也多,.NET Core下的圖像處理還是有些開源庫的,我目前使用的其中一個:SkiaSharp,介紹反正大家自己網上找找都有,下面就用該庫實現一個文字頭像的小功能,話不多說了,來一起看看詳細的介紹吧。

二、簡單的設計要求

  • 對于輸入的名字得解析(中文、英文)
  • 圖片背景色隨機會換
  • 文字要居中(廢話,不居中不是丑爆了)

三、具體實現

1、解析姓名信息

  private String ResolveName(String imageText)  {   imageText.Replace("?", "").Replace(":", "").Replace("?", "").Replace("*", "").Replace("<", "").Replace(">", "").Replace(@"/", "").Replace(@"/", "").Replace(@"|", "").Replace("/"", "");//去除路徑不支持的信息   imageText = imageText.Trim(' ');//去除空格信息   String temp2 = imageText.Substring(0, 1);//根據第一位的數據判斷是走英文規則還是中文規則,都不是的話就是取前兩位   if (RegexLib.IsChineseCharacter(temp2))   {    //UserName = UserName.Trim(' ');    if (imageText.Length > 2 & imageText.Length <= 3)    {     imageText = imageText.Substring(1, 2);    }    else if (imageText.Length >= 3)    {     imageText = imageText.Substring(imageText.Length - 2, 2);    }   }   else if (RegexLib.IsEnglishCharacter(temp2))   {    String[] temp1 = imageText.Split(' ');    if (temp1.Length == 2)    {     imageText = (temp1[0].Substring(0, 1) + temp1[1].Substring(0, 1)).ToUpper();    }    else    {     if (imageText.Length > 2)     {      imageText = imageText.Substring(0, 2).ToUpper();     }    }   }   else   {    if (imageText.Length > 2)    {     imageText = imageText.Substring(0, 2);    }   }   imageName = imageText;   return imageName;  }

2、根據文字生成圖片

  public byte[] Create()  {   String name = imageName + ".jpg";   SKBitmap bmp = new SKBitmap(128, 128);   String str = imageName;   using (SKCanvas canvas = new SKCanvas(bmp))   {    Random r = new Random();    int num = r.Next(0, 9);    canvas.DrawColor(colors[num]); // colors是圖片背景顏色集合,這里代碼就不貼出來了,隨機找一個    using (SKPaint sKPaint = new SKPaint())    {     sKPaint.Color = SKColors.White;//字體顏色     sKPaint.TextSize = 39;//字體大小     sKPaint.IsAntialias = true;//開啟抗鋸齒     sKPaint.Typeface = SkiaSharp.SKTypeface.FromFamilyName("微軟雅黑", SKTypefaceStyle.Bold);//字體     SKRect size = new SKRect();     sKPaint.MeasureText(str, ref size);//計算文字寬度以及高度     float temp = (128 - size.Size.Width) / 2;     float temp1 = (128 - size.Size.Height) / 2;     canvas.DrawText(str, temp, temp1 - size.Top, sKPaint);//畫文字    }    //保存成圖片文件    using (SKImage img = SKImage.FromBitmap(bmp))    {     using (SKData p = img.Encode(SKEncodedImageFormat.Jpeg, 100))     {      return p.ToArray();      //using (var stream = File.Create(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "photoImage", name)))      //{      // stream.Write(p.ToArray(), 0, p.ToArray().Length);      // return stream;      //}     }    }   }  }

我這邊只是得到的是byte[]數組,如果需要轉成stream或者保存成文件,方法都有,找找肯定都可以找到的,我就不放出來了,

三、docker發布的坑

坑1:IIS下可以,docker下報錯的坑爹問題

由于skiasharp在windows跟linux下使用的依賴庫是不同的,如果都按照以前的方式部署,在docker里就會出現"The type initializer for 'SkiaSharp.SKImageInfo' threw an exception",原因是linux下skiasharp依賴libSkiaSharp.so,而如果系統中沒有libSkiaSharp.so,就會報這個錯,目前我最簡單的操作就是找到這個文件扔在skiasharp的目錄下,然后就可以了

坑2:中文字體不識別

由于docker內部沒有中文字體,SO,當要輸出中文的時候就狗帶了,如下圖,所及解決辦法那也就是把字體拷貝到docker內部中去

.net,core,docker,skiasharp,文字頭像生成  

下面提供我自己使用的Dockerfile,具體Dockerfile怎么用,那就只能大家自己百度百度(ps:其實真實原因是我自己這方面也是弱雞- -,怕誤導大家),我的環境是CentOS7.3的環境

#基于 `microsoft/dotnet:latest` 來構建我們的鏡像FROM microsoft/dotnet:latest#拷貝項目publish文件夾中的所有文件到 docker容器中的publish文件夾中 COPY . /publish /publish/#ENV LANG C.UTF-8#ENV LANGUAGE C.UTF-8#ENV LC_ALL C.UTF-8COPY MSYH.TTC /usr/share/fonts/dejavuCOPY MSYHL.TTC /usr/share/fonts/dejavuCOPY MSYHBD.TTC /usr/share/fonts/dejavu#更換軟件源為國內的軟件源RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && / echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && / echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && / echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && / echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list#RUN apt-get update && apt-get install -y libfontconfig1 && apt-get install -y fontconfigRUN apt-get update && apt-get install -y fontconfig#設置工作目錄為 `/publish` 文件夾,即容器啟動默認的文件夾WORKDIR /publish#設置Docker容器對外暴露5000端口EXPOSE 5000#使用`dotnet WebApplication1.dll`來運行應用程序CMD ["dotnet", "WebApplication1.dll"]

上張成功的圖:

.net,core,docker,skiasharp,文字頭像生成  

最后DEMO地址

四、總結

docker是個好東西,只是我太弱雞,大概需要花更多的時間去學習吧,程序員可能真的得活到老學到老!

PS:以上的只是我自己摸索出來的,如果大家有更好的實現方式歡迎討論,謝謝觀看

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


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久久久久久久久| 国产成+人+综合+亚洲欧美丁香花| 欧美国产在线电影| 精品亚洲国产视频| 国产欧美亚洲精品| 欧美丝袜一区二区三区| 久热精品视频在线观看| 57pao成人永久免费视频| 国产一区二区三区日韩欧美| 美女撒尿一区二区三区| 亚洲第一精品自拍| 国产精品久久久久久久久久久不卡| 国产精品免费观看在线| 欧美亚洲国产视频小说| 欧美老女人性视频| 国产精品大片wwwwww| 精品视频久久久| 国产成人精品在线| 久久久久久国产| 国产精品久久久| 欧美性xxxxhd| 欧美日韩人人澡狠狠躁视频| 色妞色视频一区二区三区四区| 久久成人亚洲精品| 国产精品自产拍高潮在线观看| 91伊人影院在线播放| 久久久久久久久久久人体| 国产精欧美一区二区三区| 波霸ol色综合久久| 亚洲一区二区三区成人在线视频精品| 日韩免费观看视频| 九九热99久久久国产盗摄| 国产高清视频一区三区| 91久久精品视频| 国产ts一区二区| 精品国产乱码久久久久久婷婷| 日韩美女在线看| 2018日韩中文字幕| 亚洲色无码播放| 国产成人精品在线视频| 国产精品久久久久久久久久久新郎| 国产原创欧美精品| 一本色道久久88综合亚洲精品ⅰ| 午夜剧场成人观在线视频免费观看| 国产精品久久久久久久app| 久久男人的天堂| 国产精品一区专区欧美日韩| 国产精品视频自拍| 久久最新资源网| 欧美视频在线观看免费| 4438全国成人免费| 日韩性生活视频| 亚洲成人教育av| 91精品久久久久久久久青青| 亚洲影院色在线观看免费| 亚洲最大在线视频| 亚洲美女又黄又爽在线观看| 狠狠干狠狠久久| 国产专区欧美专区| 国产精品com| 久久久国产一区二区| 亚洲第一精品久久忘忧草社区| 久久精品视频免费播放| 国产精品美女av| 欧美理论电影在线播放| 久久久av一区| 92看片淫黄大片欧美看国产片| 亚洲bt天天射| 久久久久北条麻妃免费看| 91免费版网站入口| 国产亚洲精品美女久久久| 亚洲人成电影网站| 久久国产精品偷| 不卡在线观看电视剧完整版| 国产成人av网| 亚洲精品成人久久电影| 欧美精品aaa| 国产自产女人91一区在线观看| 色多多国产成人永久免费网站| 国产成人一区二区三区| 亚洲成人激情在线观看| 91久久夜色精品国产网站| 91中文字幕在线观看| 国产精品99免视看9| 久久深夜福利免费观看| 久久精品色欧美aⅴ一区二区| 国产日韩亚洲欧美| 欧美日韩亚洲成人| 亚洲精品国产综合久久| 精品亚洲一区二区三区四区五区| 日韩亚洲欧美中文在线| 精品偷拍一区二区三区在线看| 国产成人高清激情视频在线观看| 日韩亚洲欧美中文在线| 国产一区二区三区在线视频| 国产欧美婷婷中文| 国产精品日韩在线观看| 国产精品久久久久高潮| 影音先锋欧美在线资源| 91在线观看免费高清完整版在线观看| 亚洲a在线播放| 欧美老肥婆性猛交视频| 精品亚洲精品福利线在观看| 精品亚洲va在线va天堂资源站| 日韩经典中文字幕| 亚洲黄色www| 国产成人综合亚洲| 日韩精品中文在线观看| 国产精品一区久久| 成人中文字幕+乱码+中文字幕| 国产精品国语对白| 亚洲欧美中文日韩在线v日本| 福利视频第一区| 国语自产精品视频在线看一大j8| 欧美性生交xxxxx久久久| 国产亚洲欧美一区| 国产成人精品日本亚洲| 久久精品国产综合| 91美女高潮出水| 韩国三级日本三级少妇99| 91久久精品美女高潮| 亚州av一区二区| 这里只有精品视频在线| 国产精品视频导航| 亚洲美女久久久| 欧美激情精品久久久久久久变态| 欧美高跟鞋交xxxxxhd| 97在线精品视频| 国产精品v片在线观看不卡| 91影视免费在线观看| 国产一区二区三区在线播放免费观看| 美日韩在线视频| 超碰91人人草人人干| 日韩a**中文字幕| 日韩成人高清在线| xxx成人少妇69| 国产精品黄视频| 成人免费午夜电影| 日本精品久久久久久久| 国产精品高潮视频| 国内外成人免费激情在线视频| 国产精品久久久久av| 性欧美暴力猛交69hd| 亚洲欧美国产精品va在线观看| 亚洲欧美日韩精品| 最近2019中文免费高清视频观看www99| 美女视频黄免费的亚洲男人天堂| 日韩美女在线看| zzjj国产精品一区二区| 中国china体内裑精亚洲片| 日韩大胆人体377p| 日韩成人激情视频| 欧美国产日韩免费| 日韩精品高清视频| 91精品久久久久久综合乱菊| 日韩精品丝袜在线| 中文字幕欧美国内| 国产又爽又黄的激情精品视频| 国模极品一区二区三区| 欧美精品videos另类日本| 日韩精品极品视频| 日韩欧美视频一区二区三区| 亚洲激情在线视频| 亚洲欧美日韩视频一区|