首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'IImageProcessingContext‘不包含'ApplyScalingWaterMark’ImageSharp的定义

'IImageProcessingContext‘不包含'ApplyScalingWaterMark’ImageSharp的定义
EN

Stack Overflow用户
提问于 2020-07-18 10:41:54
回答 1查看 1.2K关注 0票数 1

我正在运行最新版本,并得到了前面的错误。

严重性代码描述项目文件行抑制状态错误CS1061 'IImageProcessingContext‘不包含'ApplyScalingWaterMark’的定义,也无法找到接受'IImageProcessingContext‘类型的第一个参数的可访问扩展方法'ApplyScalingWaterMark’(您是缺少一个使用指令还是程序集引用?)C:\Sibeesh\Github\GitHubFuncs\GetLatestPosts.cs 39活性GitHubFuncs

当我运行下面的代码时。

代码语言:javascript
复制
using(var img = Image.Load("canvas.jpg")) {
    Font font = SystemFonts.CreateFont("Arial", 10);
    using
    var img2 = img.Clone(ctx => ctx.ApplyScalingWaterMark(font, feedItem.Summary.Text, Color.HotPink, 5, true));
    img2.Save("images/wrapped.png");
}

已经添加了using语句。

代码语言:javascript
复制
using SixLabors.Fonts;
using SixLabors.ImageSharp.Drawing;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;

我在这里错过了什么?这是最新版本的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-18 15:39:30

终于,我让它起作用了。我只需要添加一些扩展方法。

代码语言:javascript
复制
using SixLabors.Fonts;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Processing;
using System;

namespace GitHubFuncs.ExtensionMethods {
    public static class ImageSharpExtensions {
        public static IImageProcessingContext ApplyScalingWaterMark(this IImageProcessingContext processingContext,
            Font font,
            string text,
            Color color,
            float padding,
            bool wordwrap) {
            if (wordwrap) {
                return processingContext.ApplyScalingWaterMarkWordWrap(font, text, color, padding);
            } else {
                return processingContext.ApplyScalingWaterMarkSimple(font, text, color, padding);
            }
        }
        private static IImageProcessingContext ApplyScalingWaterMarkSimple(this IImageProcessingContext processingContext,
            Font font,
            string text,
            Color color,
            float padding) {
            Size imgSize = processingContext.GetCurrentSize();

            float targetWidth = imgSize.Width - (padding * 2);
            float targetHeight = imgSize.Height - (padding * 2);

            // measure the text size
            FontRectangle size = TextMeasurer.Measure(text, new RendererOptions(font));

            //find out how much we need to scale the text to fill the space (up or down)
            float scalingFactor = Math.Min(imgSize.Width / size.Width, imgSize.Height / size.Height);

            //create a new font
            Font scaledFont = new Font(font, scalingFactor * font.Size);

            var center = new PointF(imgSize.Width / 2, imgSize.Height / 2);
            var textGraphicOptions = new TextGraphicsOptions() {
                TextOptions = {
                    HorizontalAlignment = HorizontalAlignment.Center,
                    VerticalAlignment = VerticalAlignment.Center
                }
            };
            return processingContext.DrawText(textGraphicOptions, text, scaledFont, color, center);
        }

        private static IImageProcessingContext ApplyScalingWaterMarkWordWrap(this IImageProcessingContext processingContext,
            Font font,
            string text,
            Color color,
            float padding) {
            Size imgSize = processingContext.GetCurrentSize();
            float targetWidth = imgSize.Width - (padding * 2);
            float targetHeight = imgSize.Height - (padding * 2);

            float targetMinHeight = imgSize.Height - (padding * 3); // must be with in a margin width of the target height

            // now we are working i 2 dimensions at once and can't just scale because it will cause the text to
            // reflow we need to just try multiple times

            var scaledFont = font;
            FontRectangle s = new FontRectangle(0, 0, float.MaxValue, float.MaxValue);

            float scaleFactor = (scaledFont.Size / 2); // every time we change direction we half this size
            int trapCount = (int) scaledFont.Size * 2;
            if (trapCount < 10) {
                trapCount = 10;
            }

            bool isTooSmall = false;

            while ((s.Height > targetHeight || s.Height < targetMinHeight) && trapCount > 0) {
                if (s.Height > targetHeight) {
                    if (isTooSmall) {
                        scaleFactor = scaleFactor / 2;
                    }

                    scaledFont = new Font(scaledFont, scaledFont.Size - scaleFactor);
                    isTooSmall = false;
                }

                if (s.Height < targetMinHeight) {
                    if (!isTooSmall) {
                        scaleFactor = scaleFactor / 2;
                    }
                    scaledFont = new Font(scaledFont, scaledFont.Size + scaleFactor);
                    isTooSmall = true;
                }
                trapCount--;

                s = TextMeasurer.Measure(text, new RendererOptions(scaledFont) {
                    WrappingWidth = targetWidth
                });
            }

            var center = new PointF(padding, imgSize.Height / 2);
            var textGraphicOptions = new TextGraphicsOptions() {
                TextOptions = {
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment = VerticalAlignment.Center,
                    WrapTextWidth = targetWidth
                }
            };
            return processingContext.DrawText(textGraphicOptions, text, scaledFont, color, center);
        }
    }
}

最后,我可以像前面一样使用这个方法。

代码语言:javascript
复制
private static string WriteOnImage(SyndicationItem feedItem) {
    using var img = Image.Load("images/canvas.jpg");
    var font = SystemFonts.CreateFont("Arial", 20);
    using var img2 = img.Clone(ctx => ctx.ApplyScalingWaterMark(font, feedItem.Summary.Text, Color.White, 5, true));
    return img2.ToBase64String(PngFormat.Instance);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62967580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档