public Task <Stream> TransformImage(Stream image, ImageDisParameters param) { var newImage = new MemoryStream(); using (var imageFactory = new ImageFactory(preserveExifData: false)) { var chain = imageFactory.Load(image); if (param.Has("w") || param.Has("h")) { var resizeLayer = new ResizeLayer(new Size(param.Get <int>("w"), param.Get <int>("h"))); resizeLayer.ResizeMode = ResizeMode.Max; resizeLayer.AnchorPosition = AnchorPosition.Center; if (param.Has("pad") && param.Get <bool>("pad")) { resizeLayer.ResizeMode = ResizeMode.Pad; } chain.Resize(resizeLayer); } chain.Save(newImage); } return(Task.FromResult <Stream>(newImage)); }
public IEnumerable <string> GetParameterAsParts(ImageDisParameters param) { if (param.Has("w") && param.Has("h")) { yield return(param.Get <int>("w") + "x" + param.Get <int>("h")); } else if (param.Has("w")) { yield return(param.Get <int>("w") + "w"); } else if (param.Has("h")) { yield return(param.Get <int>("h") + "h"); } if (param.Has("pad") && param.Get <bool>("pad")) { yield return("padded"); } }
private async Task GetImage(HttpContext context) { // extract the key var match = _getImageRegex.Match(context.Request.Path.ToString()); var key = match.Groups[1].Value; // check if it even exists if (!await _options.StorageProvider.CheckIfKeyExists(key)) { context.Response.NotFound(); return; } // parse the params var param = new ImageDisParameters().AppendParameters(context.Request.Query); var parts = _options.ImageTransformProvider.GetParameterAsParts(param); // check if the new key exists (or if no param parts were added to the end, the original) var newKey = key; if (parts.Any()) { newKey = newKey + "_" + string.Join("_", parts); } if (newKey == key || await _options.StorageProvider.CheckIfKeyExists(newKey)) { context.Response.Redirect(await _options.StorageProvider.GetRedirectPath(newKey)); return; } // apply transformations, save to storage and redirect user var original = await _options.StorageProvider.GetFile(key, _options); var newFile = await _options.ImageTransformProvider.TransformImage(original.Stream, param); await _options.StorageProvider.SaveFile(newKey, original.ContentType, newFile, _options); context.Response.Redirect(await _options.StorageProvider.GetRedirectPath(newKey)); }
public static ImageDisParameters AppendParameters(this ImageDisParameters param, IReadableStringCollection query) { foreach (var q in query) { int integer; bool boolean; if (int.TryParse(q.Value.First(), out integer)) { param.Add(q.Key, integer); } else if (bool.TryParse(q.Value.First(), out boolean)) { param.Add(q.Key, boolean); } else { param.Add(q.Key, q.Value.First()); } } return(param); }