Les images fraîchement sorties du numériqueLes appareils photo ont souvent une taille supérieure à 2 ou 3 Mo, ce qui le rend difficile à transférer par courrier électronique et par d'autres moyens. Cela nécessite que l'image soit redimensionnée (en termes de taille de fichier et non de hauteur ou de largeur). Tout à fait similaire à MS Paint offrant une fonctionnalité de redimensionnement d'image. Je ne suis pas bien renseigné sur les théories des fichiers d'images. J'apprécierais que quelqu'un puisse m'indiquer les sources d'informations suivantes:
Théorie de l’image (comment fonctionnent les différents formats d’image jpeg, png, tiff, etc.)?
Comment l'image perd-elle sa netteté lorsqu'elle est redimensionnée? Y a-t-il des
Existe-t-il des bibliothèques gratuites .Net (j'utilise 4.0) pour cela? Si non, puis-je utiliser une bibliothèque utilisant l'interopérabilité com?
Merci beaucoup,
Réponses:
29 pour la réponse № 1Le redimensionnement des images est une fonctionnalité directement intégrée au framework .NET. Il y a deux approches différentes:
- GDI +
- WIC
- WPF
Voici une belle article de blog couvrant les différences entre eux.
Voici un exemple avec GDI +:
public void Resize(string imageFile, string outputFile, double scaleFactor)
{
using (var srcImage = Image.FromFile(imageFile))
{
var newWidth = (int)(srcImage.Width * scaleFactor);
var newHeight = (int)(srcImage.Height * scaleFactor);
using (var newImage = new Bitmap(newWidth, newHeight))
using (var graphics = Graphics.FromImage(newImage))
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
newImage.Save(outputFile);
}
}
}
8 pour la réponse № 2
J'ai utilisé l'exemple fourni par Darin Dimitrov, L'image était gonflée et occupait beaucoup d'espace disque (de 1,5 Mo à 17 Mo environ).
Cela est dû à une petite erreur dans la dernière ligne de code.
La fonction ci-dessous enregistrera l'image en tant que Bitmap (taille d'image énorme).
newImage.Save(outputFile)
La fonction correcte devrait être:
newImage.Save(outputFile, ImageFormat.Jpeg);
2 pour la réponse № 3
Imageresizer fonctionne bien. http://imageresizing.net/