La génération des vignettes d'image dans ASP.NET?
Ce qui est le plus rapide et le plus fiable façon de générer des vignettes .NET? J'ai besoin d'obtenir n'importe quelle image, de le compresser en JPEG et le redimensionner.
J'ai vu plusieurs exemples avec GDI+, certains non-libre composants et je me souviens de WPF a quelques bonnes choses à propos de l'imagerie. GDI+ est assez vieux et WPF trucs peut-être n'a pas d'avantages sur un serveur à l'environnement.
Cela a à travailler dans un ASP.NET MVC de l'application qui s'exécute sur une pleine confiance, et, si possible, de façon synchrone.
Que recommanderiez-vous?
Mise à JOUR:
Basé sur Mantorok réponse j'ai travaillé sur cet exemple, mais c'est toujours GDI+, et il se bloque si j'essaie avec une image grand:
public void GenerateThumbnail(String filename, Int32? desiredWidth,
Int32? desiredHeight, Int64 quality, Stream s)
{
using (Image image = Image.FromFile(filename))
{
Int32 width=0, height=0;
if ((!desiredHeight.HasValue && !desiredWidth.HasValue) ||
(desiredHeight.HasValue && desiredWidth.HasValue))
throw new ArgumentException(
"You have to specify a desired width OR a desired height");
if (desiredHeight.HasValue)
{
width = (desiredHeight.Value * image.Width) / image.Height;
height = desiredHeight.Value;
}
else
{
height = (desiredWidth.Value * image.Height) / image.Width;
width = desiredWidth.Value;
}
using (var newImage = new Bitmap(width, height))
using (var graphics = Graphics.FromImage(newImage))
using (EncoderParameter qualityParam =
new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,
quality))
using (EncoderParameters encoderParams = new EncoderParameters(1))
{
graphics.DrawImage(image, 0, 0, width, height);
ImageCodecInfo jpegCodec = ImageCodecInfo.GetImageEncoders().
Single(e => e.MimeType.Equals("image/jpeg",
StringComparison.Ordinal));
encoderParams.Param[0] = qualityParam;
newImage.Save(s, jpegCodec, encoderParams);
}
}
}
OutOfMemoryException dans l'Image.FromFile(nom de fichier)
Blimey! Quelle est la taille du fichier!?
8.75 Mb : greatmarta.deviantart.com/art/KovuKiaraCubs-114524760
Une recherche rapide jeté ce jusqu': stackoverflow.com/questions/1108607/...
OriginalL'auteur vtortola | 2011-05-04
Vous devez vous connecter pour publier un commentaire.
De l'intensité de code côté serveur, je vous suggère d'utiliser d'autres techniques que GDI+ qui n'a pas été conçu pour gérer les images morceau par morceau (en continu).
Vous pouvez utiliser Composant Imagerie Windows ou WPF pour cette tâche. Il est un très bon exemple sur la façon de le faire dans un fast-et - plus important - évolutive manière ici:
Le moyen le plus rapide pour redimensionner des images à partir de ASP.NET. Et c'est (plus) pris en charge-ish.
Le imageresizing.net la bibliothèque offre maintenant WIC-en fonction de redimensionnement. Il est plus rapide que de Bertrand exemple de code que vous créez un lien, et qui gère la mémoire correctement. C'est très simple et facile à utiliser.
OriginalL'auteur Simon Mourier
Cela m'a fait amende pour ans:
Essayez cela avec une grande image, cependant. 1920 * 60000, par exemple. N'est pas assez solide.
OriginalL'auteur David Duffett
- Je utiliser ImageMagick pour le traitement de la photo
Mis à JOUR
Modèle:
Contrôleur:
je ne l'utiliser ImageMagick.NET - j'utilise le ImageMagickObject dll (cause, comme vous avez écrit, l' .Net vertion est entièrement sans-papiers). Attendez une minute, je vais mettre de la solution complète ici
vérifier les mises à jour
Est ImageMagickObject un objet COM+?
oui. téléchargé et setuped à l'ordinateur, puis attaché au projet
OriginalL'auteur Evgeniy Labunskiy
Voir ma réponse ici Créer une vignette de l'image
Il y a une fonction sur l'Image qui renvoie une vignette comme ceci:
OriginalL'auteur Russell Troywest
Je ne peux pas dire si c'est la manière la plus efficace, mais voici un extrait de code que j'ai écrit pour produire 3 petites images à partir d'une image grand:
OriginalL'auteur Mantorok
http://www.codeproject.com/KB/graphics/image_croppingVBNet.aspx
c'est pour le centre de croping image, je l'espère, je vais vous aider plus..
http://www.codeproject.com/KB/GDI-plus/imageresize.aspx
OriginalL'auteur Bhargav Mistri
Je suis en utilisant Aurigma Image outil de transfert. c'est assez sympa de contrôle. mais il est payé, vous pouvez vérifier aurigma
OriginalL'auteur Pankaj Agarwal