Comment redimensionner et enregistrer une image téléchargée en utilisant le fichier de contrôle de téléchargement en c#
j'ai développé une application web à l'aide de asp.net mvc4 et rasoir. dans mon application il y a un fichier de contrôle de téléchargement pour télécharger une image et l'enregistrer dans un emplacement temporaire.
avant d'enregistrer l'image doit redimensionnées à une taille spécifique, puis l'enregistrer dans l'emplacement temporaire donné.
voici le code que j'ai utilisé en classe de contrôleur.
public class FileUploadController : Controller
{
//
//GET: /FileUpload/
public ActionResult Index()
{
return View();
}
public ActionResult FileUpload()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult FileUpload(HttpPostedFileBase uploadFile)
{
if (uploadFile.ContentLength > 0)
{
string relativePath = "~/img/" + Path.GetFileName(uploadFile.FileName);
string physicalPath = Server.MapPath(relativePath);
FileUploadModel.ResizeAndSave(relativePath, uploadFile.FileName, uploadFile.InputStream, uploadFile.ContentLength, true);
return View((object)relativePath);
}
return View();
}
}
et voici le code utilisé dans le modèle de classe
public class FileUploadModel
{
[Required]
public HttpPostedFileWrapper ImageUploaded { get; set; }
public static void ResizeAndSave(string savePath, string fileName, Stream imageBuffer, int maxSideSize, bool makeItSquare)
{
int newWidth;
int newHeight;
Image image = Image.FromStream(imageBuffer);
int oldWidth = image.Width;
int oldHeight = image.Height;
Bitmap newImage;
if (makeItSquare)
{
int smallerSide = oldWidth >= oldHeight ? oldHeight : oldWidth;
double coeficient = maxSideSize / (double)smallerSide;
newWidth = Convert.ToInt32(coeficient * oldWidth);
newHeight = Convert.ToInt32(coeficient * oldHeight);
Bitmap tempImage = new Bitmap(image, newWidth, newHeight);
int cropX = (newWidth - maxSideSize) / 2;
int cropY = (newHeight - maxSideSize) / 2;
newImage = new Bitmap(maxSideSize, maxSideSize);
Graphics tempGraphic = Graphics.FromImage(newImage);
tempGraphic.SmoothingMode = SmoothingMode.AntiAlias;
tempGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
tempGraphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
tempGraphic.DrawImage(tempImage, new Rectangle(0, 0, maxSideSize, maxSideSize), cropX, cropY, maxSideSize, maxSideSize, GraphicsUnit.Pixel);
}
else
{
int maxSide = oldWidth >= oldHeight ? oldWidth : oldHeight;
if (maxSide > maxSideSize)
{
double coeficient = maxSideSize / (double)maxSide;
newWidth = Convert.ToInt32(coeficient * oldWidth);
newHeight = Convert.ToInt32(coeficient * oldHeight);
}
else
{
newWidth = oldWidth;
newHeight = oldHeight;
}
newImage = new Bitmap(image, newWidth, newHeight);
}
newImage.Save(savePath + fileName + ".jpg", ImageFormat.Jpeg);
image.Dispose();
newImage.Dispose();
}
}
mais quand je lance l'application, il se produit une ArgumentException.
il dit "Paramètre n'est pas valide" dans la ligne de code suivante
Bitmap tempImage = new Bitmap(image, newWidth, newHeight);
comment puis-je passer valide et approprié des paramètres d'ici
public static void ResizeAndSave(string savePath, string fileName, Stream imageBuffer, int maxSideSize, bool makeItSquare)
OriginalL'auteur sanzy | 2013-06-13
Vous devez vous connecter pour publier un commentaire.
Il est très difficile de comprendre quel est le problème avec votre code. Mais peut-être que vous souhaitez utiliser de façon alternative. Vous devez ajouter une référence à System.Web.Les aides de l'espace de noms et d'essayer le code suivant.
Aussi cette classe prend en charge la culture, flip, en filigrane fonctionnement etc.
Salut.. merci pour le téléchargement de la poste.mais votre code fonctionne si la taille d'une image est de moins de 1 MO..si j'ai télécharger 3 MO ou 2 MO taille de l'image qu'il donne un message d'erreur "Out of memory".Peut-u s'il vous plaît m'aider...
Merci! Juste ce que je cherchais.
Salut.. Sur la machine locale son travail bien, mais à chaque fois que je le déployer son lancement des pages web ka exception.
votre Problème peut être résolu en augmentant le temps d'Exécution. Car il ne faut pas beaucoup plus pour le système d'Upload de Fichier de 2 mo pour résoudre ce problème, accédez à votre site Web.La Config dans <le système.web> Write '<httpRuntime maxRequestLength="2097152" />' ce Que cela va faire est il faudra Augmenter le temps du système et de la Mémoire de votre Problème sera résolu
OriginalL'auteur maxs87