예제 #1
0
        public FileContentResult ImageEditRequest([FromBody] string RequestData)
        {
            //map request to DTO RequestModel
            JObject model = new JObject();

            try
            {
                model = JObject.Parse(RequestData);
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(ex.ToString());
            }
            RequestModel request = new RequestModel();

            try
            {
                request.ImageData  = model["ImageData"].ToString();
                request.Operations = model["Operations"].ToObject <List <JObject> >();
            }
            catch (Exception ex)
            {
                throw new SystemException("Invalid String", ex);
            }


            //create data stream
            var imageDataByteArray = Convert.FromBase64String(request.ImageData);

            var imageDataStream = new MemoryStream(imageDataByteArray);

            imageDataStream.Position = 0;

            //Save edited image result here
            var imageOutStream = new MemoryStream();

            ImageFactory imageFactory = new ImageFactory();

            imageFactory.Load(imageDataStream);

            foreach (JObject JOp in request.Operations)
            {
                if (JOp.ContainsKey("Resize"))
                {
                    var    JTemp  = JOp["Resize"];
                    Resize resize = JTemp.ToObject <Resize>();
                    resize.PerformAction(imageFactory);
                }
                else if (JOp.ContainsKey("Filter"))
                {
                    var    JTemp  = JOp["Filter"];
                    Filter filter = JTemp.ToObject <Filter>();
                    filter.PerformAction(imageFactory);
                }
                else if (JOp.ContainsKey("Flip"))
                {
                    var  JTemp = JOp["Flip"];
                    Flip flip  = JTemp.ToObject <Flip>();
                    flip.PerformAction(imageFactory);
                }
                else if (JOp.ContainsKey("RotateRight"))
                {
                    var         JTemp  = JOp["RotateRight"];
                    RotateRight rotate = JTemp.ToObject <RotateRight>();
                    rotate.PerformAction(imageFactory);
                }
                else if (JOp.ContainsKey("RotateDegrees"))
                {
                    var           JTemp         = JOp["RotateDegrees"];
                    RotateDegrees rotateDegrees = JTemp.ToObject <RotateDegrees>();
                    rotateDegrees.PerformAction(imageFactory);
                }
                else if (JOp.ContainsKey("Thumbnail"))
                {
                    var       JTemp     = JOp["Thumbnail"];
                    Thumbnail thumbnail = JTemp.ToObject <Thumbnail>();
                    thumbnail.PerformAction(imageFactory);
                }
            }
            imageFactory.Save(imageOutStream);

            return(File(imageOutStream.ToArray(), "image/png"));
        }