在ImageResizer中修改图像时,修改的顺序。

问题描述 投票:0回答:1

我在一个网络项目中使用了ImageResizer的Nuget包。用户可以在限制的窗口大小内通过平移、旋转和缩放原始图像来编辑他们的个人资料图像。

在我们以前的ASP经典图片编辑库中,我们可以在内存中加载一个版本的原始文件,然后在内存中进行变换,并保存出所需的尺寸等。这些转换的顺序是很重要的,因为任何旋转都会影响panrop等的坐标。似乎没有办法用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图像,以所需的尺寸(在这种情况下是三个)建立新的图像。所以这里有很多重复的工作,包括创建构建作业,从磁盘加载文件等等。

如果我试着一次完成转换,顺序是错误的......它似乎在做任何其他事情之前进行裁剪,但我无法确认顺序是什么。

谁有任何想法,如何减少这里的代码和磁盘读取量,或任何建议,我可以在保存之前,以设定的顺序在内存中执行转换...?

谢谢大家

c# imageresizer
1个回答
1
投票

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

也就是说,你可以考虑 Imageflow.NET 代替,因为它提供了对操作顺序的控制,而且速度更快。不过,它还不支持不是90倍数的旋转度数。你使用部分度数的旋转吗?

© www.soinside.com 2019 - 2024. All rights reserved.