public static string[] GetSupportedFontFamilies()
 {
     using (SKFontManager skFontManager = SKFontManager.CreateDefault())
     {
         return(skFontManager.GetFontFamilies());
     }
 }
示例#2
0
        public IEnumerable <string> GetInstalledFontFamilyNames(bool checkForUpdates = false)
        {
            if (checkForUpdates)
            {
                _skFontManager = SKFontManager.CreateDefault();
            }

            return(_skFontManager.FontFamilies);
        }
示例#3
0
        private static void DrawEmojii()
        {
            int GrinningFaceEmoji = 0x1f600;
            var rotated           = new SKBitmap(256, 256);

            using (SKCanvas canvas = new SKCanvas(rotated))
            {
                string  emoji; int x; int y;
                SKPaint paint = new SKPaint();
                paint.Typeface = SKFontManager.CreateDefault().MatchCharacter(GrinningFaceEmoji);

                //canvas.DrawText(emoji, x, y, vtsm.paint);
            }
        }
示例#4
0
        public void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            try
            {
                SKImageInfo info     = args.Info;
                SKSurface   surface  = args.Surface;
                SKCanvas    canvas   = surface.Canvas;
                Assembly    assembly = GetType().GetTypeInfo().Assembly;

                if (_saveBitmap == null)
                {
                    _saveBitmap = new SKBitmap(info.Width, info.Height);
                }

                SKBitmap bitmap = new SKBitmap(Math.Max(_saveBitmap.Width, info.Width),
                                               Math.Max(_saveBitmap.Height, info.Height));

                float x = info.Width / 3;
                float y = (float)(info.Height / 1.5);

                using (SKCanvas c = new SKCanvas(bitmap))
                {
                    foreach (SKPath p in _completedPaths)
                    {
                        c.DrawPath(p, paint);
                    }

                    foreach (SKPath p in _inProgressPaths.Values)
                    {
                        c.DrawPath(p, paint);
                    }
                }

                canvas.Clear();
                canvas.DrawBitmap(bitmap, 0, 0);

                var emoji   = _vm.Image;
                int exEmoji = 0x1f600;

                paint.Typeface = SKFontManager.CreateDefault().MatchCharacter(exEmoji);
                paint.TextSize = 210.0f;

                var tf     = SKFontManager.CreateDefault().MatchCharacter(exEmoji);
                var shaper = new SKShaper(tf);
                canvas.DrawShapedText(shaper, emoji, x, y, paint);
            }
            catch { }
        }
示例#5
0
 public void TestCreateDefault()
 {
     Assert.NotNull(SKFontManager.CreateDefault());
 }
示例#6
0
        public static async Task Run(
            [QueueTrigger("create-hero")] KeyValuePair <string, string> hf,
            [Blob("heroimages")] CloudBlobContainer heroContainer,
            [Blob("hashflags")] CloudBlobContainer hashflagsContainer,
            [Queue("tweet")] ICollector <KeyValuePair <string, string> > tweetCollector,
            ILogger log)
        {
            log.LogInformation($"Function executed at: {DateTime.Now}");

            var hashtag = '#' + hf.Key;

            var textSize = GetAdjustedFont(hashtag);
            var info     = new SKImageInfo(ImageWidth, ImageHeight);

            using var surface = SKSurface.Create(info);
            var canvas = surface.Canvas;

            canvas.Clear(SKColors.White);

            #region hashtag

            var typefaces = hf.Key.Select(character => SKFontManager.CreateDefault().MatchCharacter(FontFamily, character)).ToList();

            using var tf = typefaces.FirstOrDefault(t => t.FamilyName != FontFamily) ??
                           SKTypeface.FromFamilyName(FontFamily);
            using var shaper = new SKShaper(tf);

            var paint = new SKPaint
            {
                IsAntialias = true,
                Color       = new SKColor(29, 161, 242),
                TextSize    = textSize,
                Typeface    = tf
            };

            var bounds = new SKRect();
            paint.MeasureText(hashtag, ref bounds);
            var point = GetPoint(hashtag, bounds.Height, bounds.Width);
            canvas.DrawShapedText(shaper, hashtag, point.X, point.Y, paint);

            #endregion

            #region hashflag

            await using var stream = new MemoryStream();
            await hashflagsContainer.GetBlockBlobReference(hf.Value).DownloadToStreamAsync(stream);

            stream.Seek(0, SeekOrigin.Begin);
            var hashflagImage = SKBitmap.Decode(stream);

            var x = IsRtl(hashtag) ? point.X - HashflagSize - 10 : point.X + bounds.Width + 10;
            var y = (ImageHeight - HashflagSize) / 2;

            canvas.DrawBitmap(hashflagImage, x, y);
            #endregion

            #region watermark

            paint = new SKPaint
            {
                Color       = new SKColor(20, 23, 26, 127),
                TextSize    = 18,
                IsAntialias = true,
                Typeface    = tf
            };
            canvas.DrawShapedText(shaper, "@HashflagArchive", 900, 575, paint);

            #endregion

            canvas.Flush();
            await heroContainer.CreateIfNotExistsAsync();

            var heroBlob = heroContainer.GetBlockBlobReference(hf.Key);
            heroBlob.Properties.ContentType = "image/png";
            await heroBlob.UploadFromStreamAsync(ToStream(surface));

            tweetCollector.Add(hf);
        }
示例#7
0
 public FontManagerTypefacerovider()
 {
     FontManager = SKFontManager.Default;
 }
示例#8
0
文件: Program.cs 项目: kaecy/memetext
        static int makeMeme(string picture, string text, string text2)
        {
            SKFontManager fontManager = SKFontManager.CreateDefault();
            SKTypeface    pressuru    = fontManager.CreateTypeface(program_dir + @"\res\pressuru.otf");
            SKBitmap      bitmap      = SKBitmap.Decode(picture);
            SKCanvas      canvas      = new SKCanvas(bitmap);
            SKPaint       paint       = new SKPaint();
            SKRect        rect        = new SKRect();

            SKColor white = new SKColor(255, 255, 255);
            SKColor black = new SKColor(0, 0, 0);

            if (pressuru == null)
            {
                Console.WriteLine("Couldn't find pressuru font\nHalting program");
                return(1);
            }

            text  = text.ToUpper();
            text2 = text2.ToUpper();

            paint.TextSize    = 48f;
            paint.Typeface    = pressuru;
            paint.IsAntialias = true;
            paint.StrokeWidth = 2;


            float y  = 10;
            float sp = 0;
            float textHeight;

            paint.MeasureText("A", ref rect);
            textHeight = rect.Height;



            List <string> top_lines = wrapLines(text, paint, bitmap.Width);

            foreach (string line in top_lines)
            {
                paint.Color    = white;
                paint.IsStroke = false;

                paint.MeasureText(line, ref rect);

                y += textHeight;

                canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint);

                paint.IsStroke = true;
                paint.Color    = black;

                canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint);
                sp += 5;
            }

            List <string> bottom_lines = wrapLines(text2, paint, bitmap.Width);
            int           bottomMargin = 10;   // space added to the bottom. the same for the top text.
            int           linesCount   = bottom_lines.Count;
            // no space is needed between 1 line
            int spaceBetweenLinesTotal = ((linesCount - 1) * 5);

            // raise the y high enough to print down
            y  = bitmap.Height - textHeight * linesCount - spaceBetweenLinesTotal - bottomMargin;
            sp = 0;

            // bottom text
            foreach (string line in bottom_lines)
            {
                paint.Color    = white;
                paint.IsStroke = false;

                paint.MeasureText(line, ref rect);

                y += textHeight;

                canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint);

                paint.IsStroke = true;
                paint.Color    = black;

                canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint);
                sp += 5;
            }

            SKImage image = SKImage.FromBitmap(bitmap);
            SKData  data  = image.Encode(SKEncodedImageFormat.Png, 80);

            using (Stream stream = File.OpenWrite("meme.png")) {
                data.SaveTo(stream);
            }
            return(0);
        }
示例#9
0
 public FontManager(SKFontManager fontManager) => this.fontManager = fontManager;