微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DrawText 在 Windows 中有效,在 Linux 中为空 (Synology armv7l)

如何解决DrawText 在 Windows 中有效,在 Linux 中为空 (Synology armv7l)

我遇到了一个奇怪的问题,SkiaSharp (2.80.0) 主要在我的 Synology 环境中工作。它可以绘制形状、调整大小和写入图像。它只是从不显示文本。

同样的代码在 Windows 中运行时可以很好地呈现文本。

这里的代码示例只是为了演示。

//In Windows,this produces blue TEST text on top of the resized source image as expected. 
//In the Synology environment,the text is missing,but the image is still successfully resized.

float scale = (float)(RESIZE_WIDTH / originalImage.Width);
using (SKBitmap resizedImage = originalImage.Resize(new SKImageInfo((int)Math.Round(originalImage.Width * scale),(int)Math.Round(originalImage.Height * scale)),SKFilterQuality.High))
{
  using (SKCanvas canvas = new SKCanvas(resizedImage))
  {
    var paint = new SKPaint
      {
        Color = SKColors.Blue,IsAntialias = true,Style = SKPaintStyle.Fill,TextAlign = SKTextAlign.Center,TextSize = 90,Typeface = SKTypeface.CreateDefault()
      };
      var coord = new SKPoint(resizedImage.Width / 2,(resizedImage.Height + paint.TextSize) / 2);
      canvas.DrawText("TEST",coord,paint);
      canvas.Flush();

      using (var image = SKImage.FromBitmap(resizedImage))
      {
       using (var data = image.Encode())
       {
         using (var stream = new FileStream(outputFile,FileMode.Create,FileAccess.Write))
           data.Saveto(stream);
       }
     }
  }
}

是否需要在 SkiaSharp 中以编程方式配置某些内容才能让 DrawText 在 Windows 中自动实现的 Synology 环境中工作?

编辑 1:我现在已经在 Ubuntu 安装上对此进行了测试,并且 DrawText 和其他一切在那里都可以正常工作。

编辑 2:在示例代码添加显式字体

解决方法

对我有用的解决方案是在应用程序中嵌入字体,如果系统无法提供字体,则使用 SKTypeface.FromStream 加载它们。

感谢 SkiaSharp 社区在 GitHub 上提供的建议: https://github.com/mono/SkiaSharp/issues/1564#issuecomment-748581747

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。