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)); }
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); }
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); }
/// <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)); }