如果高度和宽度与原始图像相同,是否有办法(参数)避免Imageresizing处理图像?
如果没有,我在哪里以及如何取消插件中的缩放过程?
答案 0 :(得分:0)
ImageResizer不会缩放已经合适尺寸的图像。然而,它确实对它们进行解码,剥离元数据,并将它们重新编码为Web兼容和Web高效格式(通常为jpg或png)。
如果您希望ImageResizer提供原始文件,跳过整个过程,这是一个不同的问题,我将在下面尝试回答。
这是该目标的主要挑战:要发现源图像文件的宽度和高度,您必须至少部分解码它。
此优化仅在有限的情况下有用(或可能)
此外,除非您缓存了结果,否则这种“优化”实际上不会改善响应时间或服务器端性能。由于维度数据需要单独解码,因此无论是否匹配维度,都会为所有请求增加统一的重要开销。
我认为这有用的唯一情况是,如果你花费大量时间在Photoshop中优化压缩,并且不希望ImageResizer触摸它,除非需要。如果您担心,请不要在该方案中应用URL。或者,设置process=no
以保持原始字节不变。
绝对有可能制作一个插件来做到这一点;但这并不是很多人想要使用的东西,而且我无法想象一个可以获得净收益的使用场景。
如果您想要提前,只需处理Config.Current.Pipeline.PreHandleImage
事件并将e.ResizeImageToStream
替换为解析e.GetSourceImage()
返回的流的代码,应用您的维度逻辑(与{{1相比)然后重置流并按需逐字复制,如下所示:
Config.Current.GetImageBuilder().GetFinalSize()
这可能无法处理某些情况,例如图像实际上需要调整大小1px,但是你要添加1 px边框等,但它已经接近了。如果你挑剔,请查看GetFinalSize的源代码并返回图像边界而不是画布边界。