如何解决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 和其他一切在那里都可以正常工作。
解决方法
对我有用的解决方案是在应用程序中嵌入字体,如果系统无法提供字体,则使用 SKTypeface.FromStream 加载它们。
感谢 SkiaSharp 社区在 GitHub 上提供的建议: https://github.com/mono/SkiaSharp/issues/1564#issuecomment-748581747
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。