我正在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个)来构建新图像。因此,这里有很多重复来创建构建作业,从磁盘加载文件等。
如果我尝试一次进行转换,则顺序是错误的……似乎在进行其他操作之前就已裁剪,但我无法确认顺序是什么。
任何人都对如何减少此处的代码和磁盘读取量有任何想法,或者对如何在保存之前按设定的顺序执行内存转换有任何建议。?
谢谢
答案 0 :(得分:1)
ImageResizer的操作顺序为trim whitespace -> srotate -> sflip -> crop -> scale -> filter -> pad -> rotate -> flip
。如果保存中间文件,请确保它们为.png格式,这样就不会创建额外的压缩工件。
也就是说,您可以考虑使用Imageflow.NET,因为它可以控制操作顺序并且速度更快。但是,它尚不支持不是90的倍数的旋转度。您是否使用偏度旋转?