public MediaRenditionInfo Scale(float scale) { var a = MediaTransformation.ParsePath(path); var b = new MediaTransformation(a.Source, a.Format); foreach (var transform in a.GetTransforms()) { if (transform is Resize) { var resize = (Resize)transform; b.Transform(new Resize(resize.Size.Scale(scale))); } else if (transform is AnchoredResize) { var resize = (AnchoredResize)transform; b.Transform(new AnchoredResize(resize.Size.Scale(scale), resize.Anchor)); } else if (transform is Crop) { var crop = (Crop)transform; b.Transform(new Crop(crop.Rectangle.Scale(scale))); } else { b.Transform(transform); } } return new MediaRenditionInfo(b.Width, b.Height, b.GetPath()); }
public static MediaTransformation ParsePath(string path) { // 100/transform/transform.format var lastDotIndex = path.LastIndexOf('.'); var format = (lastDotIndex > 0) ? path.Substring(lastDotIndex + 1) : null; if (lastDotIndex > 0) { path = path.Substring(0, lastDotIndex); } var parts = path.TrimStart('/').Split('/'); int i = 1; string id = ""; var transforms = new List<ITransform>(); foreach (var part in parts) { if (i == 1) { id = part; } else { ITransform transform; if (char.IsDigit(part[0])) { if (part.Contains("-")) { transform = AnchoredResize.Parse(part); } else if (part.Contains(":")) { // 1:00 var time = TimeSpan.Parse(part); transform = new Clip(time, time); } else { transform = Media.Resize.Parse(part); } } else { var transformName = part.Split('(', ':')[0]; switch (transformName) { case "crop" : transform = Media.Crop.Parse(part); break; case "rotate" : transform = Media.Rotate.Parse(part); break; case "flip" : transform = Flip.Parse(part); break; default : transform = Media.ApplyFilter.Parse(part); break; } } transforms.Add(transform); } i++; } var rendition = new MediaTransformation(new MediaSource(id), format); foreach (var t in transforms) { rendition.Transform(t); } return rendition; }