中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Core如何利用skiasharp文字頭像生成方法

發布時間:2021-06-17 14:50:27 來源:億速云 閱讀:305 作者:小新 欄目:開發技術

這篇文章主要介紹了.NET Core如何利用skiasharp文字頭像生成方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、問題背景

目前.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如何利用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-8
COPY MSYH.TTC /usr/share/fonts/dejavu
COPY MSYHL.TTC /usr/share/fonts/dejavu
COPY 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 fontconfig
RUN apt-get update && apt-get install -y fontconfig

#設置工作目錄為 `/publish` 文件夾,即容器啟動默認的文件夾
WORKDIR /publish

#設置Docker容器對外暴露5000端口
EXPOSE 5000

#使用`dotnet WebApplication1.dll`來運行應用程序

CMD ["dotnet", "WebApplication1.dll"]

上張成功的圖:

.NET Core如何利用skiasharp文字頭像生成方法  

感謝你能夠認真閱讀完這篇文章,希望小編分享的“.NET Core如何利用skiasharp文字頭像生成方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

时尚| 韶山市| 北票市| 灌云县| 应城市| 渑池县| 乐昌市| 宜城市| 商河县| 乐山市| 天全县| 蓝山县| 淮南市| 安泽县| 永德县| 同江市| 徐水县| 民勤县| 龙川县| 临夏市| 广丰县| 宁明县| 乌恰县| 利津县| 长顺县| 五家渠市| 固镇县| 菏泽市| 昆明市| 南投县| 邢台市| 呼伦贝尔市| 丽水市| 左云县| 滦平县| 松原市| 兰西县| 彩票| 武隆县| 华容县| 象山县|