예제 #1
0
        public async Task <byte[]> ProcessImage(ImageMeme meme, params string[] replacements)
        {
            var imagebytes = await(await imageStore.GetImageAsync(meme.Template.ImageBaseIdentifier)).GetBytes();

            using var image = Image.Load(imagebytes);
            foreach (var text in meme.Template.memeText)
            {
                // The options are optional

                TextOptions options = new TextOptions()
                {
                    ApplyKerning = true,
                    TabWidth     = 8, // a tab renders as 8 spaces wide
                    //WrapTextWidth = 100, // greater than zero so we will word wrap at 100 pixels wide
                    HorizontalAlignment = HorizontalAlignment.Center,
                    VerticalAlignment   = VerticalAlignment.Center
                };
                IBrush brush = Brushes.Solid(Color.Parse(text.FillColor));
                IPen   pen   = Pens.Solid(Color.Parse(text.OutlineColor), 2);
                //string text = "sample text";
                string words = text.GetMemeText(random, replacements);
                // draws a star with Horizontal red and blue hatching with a dash dot pattern outline.
                Font f = await getFont(text, words);

                await Task.Run(
                    () => image.Mutate(
                        x => x.DrawText(
                            new DrawingOptions()
                {
                    TextOptions = options
                },
                            words,
                            f,
                            brush,
                            pen, findCenter(text)
                            )
                        )
                    );
            }
            using (var ms = new MemoryStream())
            {
                image.Save(ms, new PngEncoder());
                return(ms.ToArray());
            }
        }
예제 #2
0
        public async Task <byte[]> ProcessImage(ImageMeme meme, params string[] replacements)
        {
            var factory = new MagickImageFactory();

            using (var image = factory.Create(await(await imageStore.GetImageAsync(meme.Template.ImageBaseIdentifier)).GetBytes()))
            {
                List <MagickImage> MemeTexts = new List <MagickImage>();
                foreach (var m in meme.Template.memeText)
                {
                    MagickImage mti;

                    try
                    {
                        mti = new MagickImage($"caption:{m.GetMemeText(random, replacements)}", Composition(m));
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }

                    MemeTexts.Add(mti);
                    // well there's your problem
                    // image.Composite(mti,m.XStartPosition,m.YStartPosition,CompositeOperator.Over);
                    await Task.Run(() => {
                        image.Composite(mti, m.XStartPosition, m.YStartPosition, CompositeOperator.Over);
                    });

                    //
                }
                var bytes = await Task.Run <byte[]>(() => { return(image.ToByteArray()); });

                // dispose our dynamic images
                //image.Write(writeStream);
                foreach (var m in MemeTexts)
                {
                    m.Dispose();
                }
                return(bytes);
            }
        }
예제 #3
0
 public Task <byte[]> ProcessImage(ImageMeme meme, params string[] replacements)
 {
     throw new System.NotImplementedException();
 }