コード例 #1
0
        public ActionResult Add(CropAndAddMultimediaObjectViewModel Model)
        {
            if (ModelState.IsValid)
            {
                if (string.IsNullOrEmpty(Model.MultimediaObject.Url))
                {
                    ModelState.AddModelError("MultimediaObject.Url", "Podanie Adresu URL jest wymagane!");
                    var tt =
                        _typeRespository.Types.Select(it => new { Value = it.Id, Text = it.Name + " szer: " + it.Width + "px wys: " + it.Height + "px" });
                    Model.MultimediaTypes = new SelectList(tt, "Value", "Text");
                    return(View(Model));
                }

                int          cropPointX = Model.x; int cropPointY = Model.y; int imageCropWidth = Model.w; int imageCropHeight = Model.h;
                MemoryStream target = new MemoryStream();
                Model.inputFile.InputStream.CopyTo(target);
                byte[] imageBytes = target.ToArray();
                byte[] croppedImage;
                if (imageCropHeight > 0 && imageCropWidth > 0)
                {
                    croppedImage = ImageHelper.CropImage(imageBytes, cropPointX, cropPointY, imageCropWidth, imageCropHeight);
                }
                else
                {
                    croppedImage = imageBytes;
                }

                ADServerDAL.Models.Type type = _typeRespository.GetById((int)Model.MultimediaObject.TypeId);
                croppedImage = ImageProcesorHelper.ResizeImage(type.Width, type.Height, croppedImage, false).ResizedImage;

                MultimediaObject image = new MultimediaObject
                {
                    Contents  = croppedImage,
                    Content   = croppedImage,
                    FileName  = Model.inputFile.FileName,
                    MimeType  = Model.inputFile.ContentType,
                    TypeId    = Model.MultimediaObject.TypeId,
                    Name      = Model.MultimediaObject.Name,
                    UserId    = User.GetUserIDInt(),
                    Url       = Model.MultimediaObject.Url,
                    Campaigns = Model.MultimediaObject.Campaigns
                };

                if (image.UserId == 0 || (!User.IsInRole("Admin") && User.GetUserIDInt() != image.UserId))
                {
                    image.UserId = User.GetUserIDInt();
                }

                _repository.Save(image, Model.MultimediaObject.Campaigns.ToList());

                return(RedirectToAction("Index"));
            }
            var t =
                _typeRespository.Types.Select(it => new { Value = it.Id, Text = it.Name + " szer: " + it.Width + "px wys: " + it.Height + "px" });

            Model.MultimediaTypes = new SelectList(t, "Value", "Text");
            return(View(Model));
        }
コード例 #2
0
        public ApiResponse CropAndSave(int id, byte[] Image)
        {
            var obj = Context.MultimediaObjects.FirstOrDefault(p => p.Id == id);
            var typ = Context.Types.FirstOrDefault(m => m.Id == obj.TypeId);

            ImageProcesorHelper.ResizeImageResult resizeResult = ImageProcesorHelper.ResizeImage(typ.Width, typ.Height, Image);
            Image = resizeResult.ResizedImage;
            byte[] thumbnail = resizeResult.Thumbnail;

            obj.Contents    = Image;
            obj.Content     = Image;
            obj.FileContent = Convert.ToBase64String(Image);
            obj.Thumbnail   = thumbnail;

            Context.SaveChanges();

            var response = new ApiResponse();

            response.Accepted = true;

            return(response);
        }
コード例 #3
0
        public void Can_Resize_Images()
        {
            ImageProcesorHelper.ResizeImageResult resizeResult = null;
            Image newImage = null;

            /// Test zmiany rozmiaru obrazka na 500x500 bez miniaturki
            var bmp1 = ImageToByte(Properties.Resources.Chrysanthemum);

            resizeResult = ImageProcesorHelper.ResizeImage(500, 500, bmp1, false);
            Assert.IsNotNull(resizeResult);
            Assert.IsNotNull(resizeResult.ResizedImage);
            Assert.IsNull(resizeResult.Thumbnail);
            newImage = ByteArrayToImage(resizeResult.ResizedImage);
            Assert.AreEqual(500, newImage.Width);
            Assert.AreEqual(500, newImage.Height);

            ///Test zmiany obrazka na rozmiar taki sam jaki ma obrazek oryginalny bez miniaturki
            var bmp2 = Properties.Resources.Desert;

            resizeResult = ImageProcesorHelper.ResizeImage(bmp2.Width, bmp2.Height, ImageToByte(bmp2), false);
            Assert.IsNotNull(resizeResult);
            Assert.IsNotNull(resizeResult.ResizedImage);
            Assert.IsNull(resizeResult.Thumbnail);
            newImage = ByteArrayToImage(resizeResult.ResizedImage);
            Assert.AreEqual(bmp2.Width, newImage.Width);
            Assert.AreEqual(bmp2.Height, newImage.Height);

            ///Test wygenerowania miniaturki
            var bmp3 = Properties.Resources.Hydrangeas;

            resizeResult = ImageProcesorHelper.ResizeImage(bmp3.Width, bmp3.Height, ImageToByte(bmp3), true);
            Assert.IsNotNull(resizeResult);
            Assert.IsNotNull(resizeResult.ResizedImage);
            Assert.IsNotNull(resizeResult.Thumbnail);
            newImage = ByteArrayToImage(resizeResult.Thumbnail);
            Assert.IsTrue(newImage.Width == ImageProcesorHelper.ThumbnailSize && newImage.Height == ImageProcesorHelper.ThumbnailSize);
        }
コード例 #4
0
        /// <summary>
        /// Metoda ładująca plik na serwer
        /// </summary>
        /// <returns></returns>
        public HttpResponseMessage Upload()
        {
            var    errors     = "";
            object result     = null;
            var    serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            try
            {
                ///Sprawdź czy w żądaniu znajduje się informacja o przesyłanym pliku
                if (HttpContext.Current.Request.Files != null && HttpContext.Current.Request.Files.Count > 0 &&
                    HttpContext.Current.Request.Params["MultimediaObjectTypeId"] != null)
                {
                    ///Pobierz pierwszy znaleziony plik
                    HttpPostedFile file = HttpContext.Current.Request.Files[0];

                    if (file.ContentType.ToUpper().StartsWith("IMAGE/"))
                    {
                        if (file.ContentLength > 0)
                        {
                            ///na formularzu, z którego przychodzi request muszą być pola o dokładnie takich nazwach:
                            var typeIdString = HttpContext.Current.Request.Params["MultimediaObjectTypeId"].ToString();
                            int typeId       = 0;
                            int.TryParse(typeIdString, out typeId);
                            serializer.MaxJsonLength = GetJsonMaxLength();
                            byte[] contents = null;

                            ///Utwórz tablicę bajtów dla przesyłanego pliku
                            using (var memoryStream = new MemoryStream())
                            {
                                file.InputStream.CopyTo(memoryStream);
                                contents = memoryStream.ToArray();
                            }

                            ///Pobierz informacje o typie obiektu multimedialnego
                            ADServerDAL.Models.Type objType = typeRepository.GetById(typeId);
                            if (objType == null)
                            {
                                throw new Exception("Nie można odnaleść żadanego typu obiektu. Możliwe zmiany na innym stanowisku.");
                            }

                            ///Odczytaj docelowe wymiary obrazu
                            var width  = objType.Width;
                            var height = objType.Height;

                            try
                            {
                                ///Zmień rozmiar przesłanego obrazu na podstawie wymiarów typu obiektu
                                contents = ImageProcesorHelper.ResizeImage(width, height, contents, false).ResizedImage;
                            }
                            catch (Exception)
                            {
                                errors += "Plik jest uszkodzony lub ma niewłaściwy typ. ";
                                throw;
                            }

                            HttpContext.Current.Response.ContentType = "text/plain";

                            ///Sprawdź czy plik po zmianie rozmiaru ma dopuszczalny rozmiar
                            if (contents.Length <= serializer.MaxJsonLength)
                            {
                                result = new
                                {
                                    name     = file.FileName,
                                    contents = Convert.ToBase64String(contents),
                                    mimeType = file.ContentType,
                                    width    = width,
                                    height   = height
                                };
                            }
                            else
                            {
                                errors += string.Format("Plik jest zbyt duży. Maksymalny rozmiar pliku to {0}B. ", serializer.MaxJsonLength);
                            }
                        }
                    }
                    else
                    {
                        errors += string.Format("Plik ma nieprawidłowy format ({0})", file.ContentType);
                    }
                }
                else
                {
                    errors += "Brak pliku lub brak parametru MultimediaObjectTypeId. ";
                }
            }
            catch (Exception ex)
            {
                errors += string.Format("Komunikat błędu: {0} (Źródło: {1})", ex.Message, ex.Source);;
            }

            if (errors != null && errors.Length > 0)
            {
                result = new { errors = errors };
            }

            ///Zapisz zmodyfikowany plik jako JSON i zwróć do klienta
            HttpContext.Current.Response.Write(serializer.Serialize(result));
            HttpContext.Current.Response.StatusCode = 200;
            return(new HttpResponseMessage(HttpStatusCode.OK));
        }