Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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;
        }