zoukankan      html  css  js  c++  java
  • 使用SixLabors.ImageSharp写文字的在docker中乱码问题

    这两天在SixLabors.ImageSharp往图片上写汉字的时候遇到一个问题就是乱码,在本地因为有对应的字体文件所以很完美,没有任何问题,但是我的服务器是放在docker容器中的。容器简单的不能再简单了,啥都没有,所以一放上去,写啥文字都乱码,尤其是中文

    百度,谷歌,bing了很多都是说安装字体库,可以吧Windows的字体文件拷贝到服务器,不晓得别人成功没有,反正我是没成功,我觉得可能没成功的原因是我的docker里面没有fontconfig这个东西,所以就算我把字体拷贝到/usr/share/fonts目录下也是识别不了的(这只是我的猜测)。然而我去安装fontconfig好像也找不到这个安装包。哈哈。无果。

    后面看到一篇将SixLabors.ImageSharp的教程https://www.bbsmax.com/A/B0zqm1DQzv/

    这里面有讲如何在图片上画文字的做法,他没有读取系统的字体,而是通过new FontCollection().Install方法安装字体,这是一个解决方案啊。。然后模仿他的做法,我也写了一下,然后把字体文件放到我的wwwroot里面

     public string GetMediaId(UserInfo userinfo, string access_token)
            {
                string media_id = string.Empty;
                string baseImage = Path.Combine(_hostingEnvironment.WebRootPath, "images", "base.jpg");
                string fontUrl = Path.Combine(_hostingEnvironment.WebRootPath, "Fonts", "STKAITI.TTF");
                string qrcodeUrl = _userInfoService.GetWechatShareCodeByUserId(userinfo.Id, userinfo.InviteCode);
                Image templateImage = Image.Load(baseImage);
                templateImage.Mutate(x =>
                {
                    var qrcodeStream = RequestHelper.CreateRequest(qrcodeUrl).GetStream();
                    if (qrcodeStream.IsNotNull())
                    {
                        qrcodeStream.Position = 0;
                        Image qrcodeImage = Image.Load(qrcodeStream);
                        qrcodeImage.Mutate(y => y.Resize(130, 130));
                        x.DrawImage(qrcodeImage, new Point(430, 290), 1);
                    }
    
    
                    var headImgStream = RequestHelper.CreateRequest(userinfo.IconUrl).GetStream();
                    if (headImgStream.IsNotNull())
                    {
                        headImgStream.Position = 0;
                        var iconImage = Image.Load(headImgStream);
                        iconImage.Mutate(y => y.Resize(75, 75));
                        x.DrawImage(iconImage, new Point(20, 70), 1);
                        //Font font = new Font(SystemFonts.Families.FirstOrDefault(), 16);
                        Font font = new Font(new FontCollection().Install(fontUrl), 16);
                        x.DrawText(userinfo.NickName, font, Color.Black, new Point(100, 100));
                    }
                });
    
    
                //templateImage.Save($"D:/temp/images/{Guid.NewGuid().ToString("N")}.jpg");
                Stream stream = new MemoryStream();
                templateImage.Save(stream, SixLabors.ImageSharp.Formats.Jpeg.JpegFormat.Instance);
                stream.Position = 0;
                media_id = MaterialAPI.UploadTempMedia(access_token, "image", $"{Guid.NewGuid().ToString("N")}.jpg", stream);
                return media_id;
            }
    

      这类还有个问题,开始我拷贝了一个TTC的字体文件,识别不了,报错,只有TTF的字体可以使用。

  • 相关阅读:
    排列组合
    动态规划-上台阶
    砝码称重3
    砝码称重2
    砝码称重1
    砝码称重
    TestDirector其他
    TestDirector域或工程用户的管理
    TestDirector创建域或工程
    LoadRunner8 安装步骤
  • 原文地址:https://www.cnblogs.com/txb1989/p/12785289.html
Copyright © 2011-2022 走看看