Nous avons des problèmes avec une application ASP.NET qui permet aux utilisateurs de télécharger et de recadrer des images. Les images sont toutes mises à l'échelle à des tailles fixes par la suite. Nous manquons de mémoire lorsqu'un gros fichier est traité. il semble que la gestion de JPEG soit plutôt inefficace - nous utilisons System.Drawing.BitMap. Avez-vous des conseils généraux, et peut-être quelques indications pour une bibliothèque de traitement d'image plus efficace? Quelles expériences avez-vous?Comment redimensionner et rogner efficacement des images dans une application ASP.NET?
Répondre
J'ai eu le même problème, la solution était d'utiliser System.Drawing.Graphics pour faire les transformations et disposer chaque objet bitmap dès que j'en avais fini avec lui. Voici un exemple de ma bibliothèque (redimensionnement):
public Bitmap ApplyTo(Bitmap bitmap)
{
using (bitmap)
{
Bitmap newBitmap = new Bitmap(bitmap, CalculateNewSize(bitmap));
using (Graphics graphics = Graphics.FromImage(newBitmap))
{
graphics.SmoothingMode =
SmoothingMode.None;
graphics.InterpolationMode =
InterpolationMode.HighQualityBicubic;
graphics.CompositingQuality =
CompositingQuality.HighQuality;
graphics.DrawImage(
bitmap,
new Rectangle(0, 0, newBitmap.Width, newBitmap.Height));
}
return newBitmap;
}
}
Je fais des recadrages d'images et des mises à l'échelle similaires. Le point clé consiste à placer votre code dans des instructions 'using', qui ensuite se débarrassent automatiquement des ressources une fois que vous avez quitté le score du bloc using. Sinon, les données de l'image ne seront pas éliminées == gaspiller de la mémoire. –
+1 pour disposer. Je vois nos clients oublier/ne pas savoir faire tout le temps. – Kev
Merci, cela a apparemment résolu notre problème! –
Avez-vous peut-être une trace de pile à regarder?
J'ai aussi effectué une retouche d'image après qu'un utilisateur a téléchargé une image. Les seuls problèmes que j'ai rencontrés étaient des restrictions sur la taille du téléchargement de fichiers sur les navigateurs et les délais. Mais rien à voir avec les bibliothèques de .Net.
Autre chose à considérer. Si vous faites plusieurs images ou avez des boucles dangereuses quelque part, assurez-vous de vider() et de disposer() des choses.
Quelques pensées viennent à l'esprit -
Quelle est la taille des images vous permettent vos utilisateurs de télécharger et vous pouvez imposer des restrictions sur ce?
Lorsque vous utilisez la classe
System.Drawing.Bitmap
, vous ne pas oublier de disposer correctement? Nous avons trouvé l'une des principales causes des exceptionsSystem.OutOfMemoryException
sur notre plate-forme d'hébergement partagé, les utilisateurs ne disposaient pas correctement des objetsBitmap
.
Kev
Il y avait un vieux bug avec .net que toutes les images seraient par défaut à 32 bits par pixel - cette taille, vous pouvez épuiser votre mémoire assez rapide. Veuillez utiliser la structure PixelFormat pour vous assurer que ce n'est pas le cas pour votre problème.
Ce lien pourrait aider: http://msdn.microsoft.com/en-us/library/aa479306.aspx
Il y a un excellent article sur ce sur CodeProject. Vraiment vraiment gentil. Je vais essayer de trouver le lien (utilisé il y a environ 4 ans).
MISE À JOUR:
Pas celui que je cherchais, mais semble bon aussi.
http://www.codeproject.com/KB/custom-controls/ImageCroppingControl.aspx
Je trouve imageresizer et son grand. et bonne API. Fonctionne très bien. À partir de Visual Studio 2010 Extension Manager: http://nuget.org/.
étapes faciles à télécharger API VS-2010:
1). Installez l'extension http://nuget.org/.
3). Trouver et installer ImageResizing
4) Code de .Ensuite:. (Je suis ici en utilisant le recadrage vous pouvez utiliser) Documentation sur imageresizing.net
string uploadFolder = Server.MapPath(Request.ApplicationPath + "images/");
FileUpload1.SaveAs(uploadFolder + FileUpload1.FileName);
//The resizing settings can specify any of 30 commands.. See http://imageresizing.net for details.
ResizeSettings resizeCropSettings = new ResizeSettings("width=200&height=200&format=jpg&crop=auto");
//Generate a filename (GUIDs are safest).
string fileName = Path.Combine(uploadFolder, System.Guid.NewGuid().ToString());
//Let the image builder add the correct extension based on the output file type (which may differ).
fileName = ImageBuilder.Current.Build(uploadFolder + FileUpload1.FileName, fileName, resizeCropSettings, false, true);
Essayez! !! C'est très awsumm et facile à utiliser. Merci.
- 1. Comment redimensionner et filigraner des images dans Ruby/Rails?
- 2. Redimensionner des images dans le répertoire
- 3. Comment générer des images à la volée dans ASP.NET
- 4. Session et le pool d'applications: une application ASP.NET qui stocke et affiche des images
- 5. Télécharger et télécharger des images avec ASP.net
- 6. C#: GDI + Rogner
- 7. Comment redimensionner les images hors serveur
- 8. php gd: quand je rogner des images par php quelques images sortent smushed
- 9. Comment pouvez-vous redimensionner les images avec css dans IE?
- 10. Des pratiques correctes pour savoir où placer des images et des fichiers statiques dans une application ASP.NET MVC?
- 11. Comment numériser une page Web et obtenir des images et des images YouTube?
- 12. image Redimensionner dans asp.net
- 13. Comment implémenter efficacement des sessions dans GAE?
- 14. asp.net mvc Enregistrer et afficher des images dans db
- 15. Comment tester efficacement une application Griffon avec easyb?
- 16. Comment énumérer et charger des ressources dans une application iPhone?
- 17. redimensionner dynamiquement des images en php jpg/png/gif
- 18. comment créer une application mobile dans asp.net
- 19. Comment convertir des données efficacement dans DataTable dans ADO.Net
- 20. Comment redimensionner une application Silverlight en fonction de son contenu?
- 21. Comment afficher dynamiquement des images dans un gridview asp.net?
- 22. Comment segmenter efficacement des images 2D en régions/blobs de valeurs similaires?
- 23. Comment redimensionner une image?
- 24. Comment redimensionner toutes les images dans un bloc de HTML à une largeur spécifique et mettre en cache les résultats
- 25. Comment envoyer un gros XML au client dans ASP.NET efficacement?
- 26. Redimensionner et recadrer les images avant de les afficher dans UITableViewCells
- 27. comment redimensionner des colonnes dans datagridview?
- 28. Comment coller et superposer des images dans WPF?
- 29. comment et où attraper des exceptions dans une application j2ee
- 30. Comment collecter efficacement des informations pour une entreprise?
Je suggère la http://imageresizing.net/ bibliothèque - il gère correctement l'utilisation de la mémoire, et vous évite d'éviter manuellement [les 28 + pièges] (http://nathanaeljones.com/163/20-image -resizing-pitfalls /) qui sont la raison pour laquelle MS met en garde contre l'utilisation de System.Drawing dans les applications ASP.NET. –
duplication possible de [Redimensionner une image dans asp.net sans perdre la qualité de l'image] (http://stackoverflow.com/questions/2319983/resizing-an-image-in-asp-net-without-losing-the-image -quality) –