C# 是否可以使用imageresizer.net对图像进行任意仿射变换?

C# 是否可以使用imageresizer.net对图像进行任意仿射变换?,c#,.net,imageresizer,C#,.net,Imageresizer,我想使用ImageResizer.net进行复杂的平移/缩放/缩放操作: 以下是一种纯CSS方式来裁剪/平移/缩放图像: ​ (参见:以获取此示例) 虽然这在大多数现代浏览器中效果很好,但在一些电子邮件客户端(可能还有更老的浏览器)中,它是脆弱的、健谈的、不可靠的 所以。。。一旦用户“完成”了电子邮件(或旧浏览器)的一些HTML,我想提取所有这些CSS属性并制作一个考虑到它们的图像,生成一个正确尺寸的新图像 我基本上已经解决了这个问题: 将源图像缩放到正确的尺寸(基于“高度” IMG标签的属性

我想使用ImageResizer.net进行复杂的平移/缩放/缩放操作:

以下是一种纯CSS方式来裁剪/平移/缩放图像:

(参见:以获取此示例)

虽然这在大多数现代浏览器中效果很好,但在一些电子邮件客户端(可能还有更老的浏览器)中,它是脆弱的、健谈的、不可靠的

所以。。。一旦用户“完成”了电子邮件(或旧浏览器)的一些HTML,我想提取所有这些CSS属性并制作一个考虑到它们的图像,生成一个正确尺寸的新图像

我基本上已经解决了这个问题:

  • 将源图像缩放到正确的尺寸(基于“高度” IMG标签的属性)
  • 基于图像偏移和div裁剪图像 容器尺寸
  • 基于裁剪图像大小和尺寸的焊盘图像 容器尺寸。(如果不需要填充,请使用JPEG 95% 质量,当需要填充时,使用PNG和bgcolor(透明)
  • 这很好,但我更喜欢使用URL API,只需处理一次图像,而不是“三次”

    我相信我可以通过仿射变换一步实现这一点。在这一点上,我认为这将需要一个新的自定义插件(如果这是实现我所追求的目标的唯一途径,我甚至可能自己实现它并将其开源……)


    有没有想到一种更有效的方法来完成我想做的事情?

    是的,任意仿射转换可以通过URL API来完成,但是您必须了解,并且必须将裁剪和填充拆分为单独的命令

    裁剪发生在调整大小之前,因此您需要计算视口尺寸并将其拆分为两组坐标

    1) 裁剪值在源图像坐标中为x1、y1、x2、y2。如果您不知道图像尺寸中的视口坐标,则可以使用
    cropxunits=100
    cropyunits=100
    分别生成宽度/高度的x1、y1、x2、y2百分比。您还可以为
    cropxunits
    cropyunits
    使用任意值,以简化计算

    负裁剪值将相对于右下角而不是左上角,因此在将负的绝对值(或对于最右的值,多余的量)复制到变量中以供以后填充后,将其设置为零或宽度/高度/cropxunits/cropyunits

    2) 如果需要,使用
    边距=左、上、右、下添加填充。单位是显示像素,而不是源像素,因此这些值应该不缩放

    3) 缩放-这是应用
    width=x&height=y&mode=max
    获得适当显示大小的地方。如果不使用,它将显示1:1的缩放,这可能是需要的,也可能不是需要的
    x
    y
    这里应该是以显示像素为单位的图像的所需宽度/高度,而不是画布

    有关详细信息,请参阅


    您当然可以将其作为一个插件来完成,但我建议您先进行javascript实现,然后再看看是否需要将包装以插件的形式放到服务器上。不管是哪种方式,我已经多次遇到这个问题,麻省理工学院许可的代码示例对社区非常有帮助。

    您可以对每条边进行任意裁剪、填充和添加边距。也许更多的细节会有所帮助?如果你想应用任何类型的矩阵或剪切,你也可以实现IPlugin和BuilderExtension并覆盖渲染…请提供一些例子。我很确定你所需要的可以通过简单地使用现有的命令来完成,但是如果不理解你最难的用例,我可能是错的。@ComputerLinguage K.补充了一些细节。感谢您的帮助(以及一款很棒的产品)。