在ImageResizer中更改图像时更改/编辑的顺序

时间:2020-06-10 15:38:39

标签: c# imageresizer

我正在Web项目中使用ImageResizer的Nuget包。用户可以通过在有限的窗口大小内平移,旋转和缩放原始图像来编辑其个人资料图像。

在我们旧的ASP经典图像编辑库中,我们可以在内存中加载原始文件的一个版本,然后在内存中执行转换并保存所需的大小等。这些转换的顺序很重要,因为任何旋转都会影响到平移/作物等的坐标。似乎没有任何办法可以控制ImageResizer以什么顺序发生什么,所以我正在做这样的事情。

WebRequest requestPic = WebRequest.Create("URL-of-original-image");
WebResponse responsePic = requestPic.GetResponse();

var settings = new Instructions();
settings.Rotate = submittedAngleforNewImage;

var imageRotated = new ImageJob(responsePic.GetResponseStream(), "location-to-save-temp-file", settings)
{AddFileExtension = true};
imageRotated.Build();

settings = new Instructions();
settings.CropRectangle = cropCoordsScaledArray;

var imageCropped = new ImageJob(imageRotated.FinalPath, "location-to-save-temp-file", settings)
{AddFileExtension = true};
imageCropped.Build();

然后,我通过加载所需大小的imageCropped图像(在这种情况下为3个)来构建新图像。因此,这里有很多重复来创建构建作业,从磁盘加载文件等。

如果我尝试一次进行转换,则顺序是错误的……似乎在进行其他操作之前就已裁剪,但我无法确认顺序是什么。

任何人都对如何减少此处的代码和磁盘读取量有任何想法,或者对如何在保存之前按设定的顺序执行内存转换有任何建议。?

谢谢

1 个答案:

答案 0 :(得分:1)

ImageResizer的操作顺序为trim whitespace -> srotate -> sflip -> crop -> scale -> filter -> pad -> rotate -> flip。如果保存中间文件,请确保它们为.png格式,这样就不会创建额外的压缩工件。

也就是说,您可以考虑使用Imageflow.NET,因为它可以控制操作顺序并且速度更快。但是,它尚不支持不是90的倍数的旋转度。您是否使用偏度旋转?

相关问题