J'ai une galerie d'utilisateurs sur le site et il est possible pour les visiteurs de télécharger quelques images. Après l'image de téléchargement doit être redimensionné à certains préréglages prédéfinis. De plus, l'image originale doit être sauvegardée aussi. Tout fonctionne bien pour png
et bmp
formats d'image. Mais si je télécharge le format gif
ou jpeg
avec une prédominance d'une couleur, l'image originale téléchargée semble être compressée.Téléchargement d'image sans perte de qualité
Par exemple:
Original:
Téléchargé:
Je cherchai thorougly dans google et trouvé quelques exemples comment télécharger l'image à droite. A la fin, je l'ai écrit la méthode suivante:
void UploadImagePreset(Image image, ImageFormat imgFormat, string imgPath)
{
using (var uploadStream = imageUploader.CreateUploadStream(imagePath))
{
var newWidth = image.Width;
var newHeight = image.Height;
using (var outBitmap = new Bitmap(newWidth, newHeight))
{
using (var outGraph = Graphics.FromImage(outBitmap))
{
outGraph.CompositingQuality = CompositingQuality.HighQuality;
outGraph.SmoothingMode = SmoothingMode.HighQuality;
outGraph.PixelOffsetMode = PixelOffsetMode.HighQuality;
outGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
var imageRect = new Rectangle(0, 0, newWidth, newHeight);
outGraph.DrawImage(image, imageRect);
outBitmap.Save(uploadStream, imgFormat);
}
}
}
}
Mais il n'a pas aidé. L'image téléchargée était la même que celle décrite ci-dessus. Je tryied de préciser qaulity des résultats d'image comme ceci:
var encoderParameters = new EncoderParameters();
var encoderParameter = new EncoderParameter(Encoder.Quality, 100);
encoderParameters.Param[0] = encoderParameter;
var encoder = ImageCodecInfo.GetImageEncoders()
.Where(e => e.FormatID == imgFormat.Guid)
.FirstOrDefault();
outBitmap.Save(uploadStream, encoder, encoderParameters);
Il ne fonctionne pas trop. En outre, lorsque je télécharge une exception d'image jpeg se produit.
Est-il possible de télécharger une image sans la compresser ou la redimensionner? J'ai passé quelques heures à essayer de résoudre ce problème et je suis resté dessus.
Ce n'est pas clair - que fait le téléchargement? Si c'est juste à partir d'un navigateur sans code client supplémentaire, vous devriez obtenir le fichier exact qui est sur le client - à quel point votre problème n'a * rien * à faire avec le téléchargement (ou ASP.NET), et est * juste * à faire avec le redimensionnement. –
J'utilise le contrôle FileUpload sans code client supplémentaire –
Droit, donc d'abord valider que si vous enregistrez le fichier téléchargé - sans le traiter * du tout * - vous vous retrouvez avec exactement le même fichier. Lorsque vous l'avez prouvé, vous pouvez retirer la partie de téléchargement de l'équation. Limitez le problème à la plus petite zone possible. –