J'utilise Image.FromStream
comme suit :
Image.FromStream(httpPostedFileBase.InputStream, true, true)
Notez que les données retournées Image
es IDisposable
.
Vous aurez besoin d'une référence à System.Drawing.dll
pour que cela fonctionne, et Image
est dans le System.Drawing
espace de noms.
Redimensionnement de l'image
Je ne suis pas sûr de ce que vous essayez de faire, mais si vous faites des vignettes ou quelque chose de similaire, vous pourriez être intéressé à faire quelque chose comme...
try {
var bitmap = new Bitmap(newWidth,newHeight);
using (Graphics g = Graphics.FromImage(bitmap)) {
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(oldImage,
new Rectangle(0,0,newWidth,newHeight),
clipRectangle, GraphicsUnit.Pixel);
}//done with drawing on "g"
return bitmap;//transfer IDisposable ownership
} catch { //error before IDisposable ownership transfer
if (bitmap != null) bitmap.Dispose();
throw;
}
où clipRectangle
est le rectangle de l'image originale que vous souhaitez mettre à l'échelle dans le nouveau bitmap (vous devrez gérer manuellement le rapport d'aspect). Le bloc de capture est typique IDisposable
à l'intérieur d'un constructeur ; vous conservez la propriété du nouvel objet IDisposable
jusqu'à ce qu'il soit retourné (vous pouvez vouloir documenter cela avec des commentaires de code).
Enregistrement en tant que Jpeg
Malheureusement, l'encodeur par défaut "enregistrer en jpeg" n'expose aucun contrôle de qualité, et choisit une qualité par défaut terriblement basse.
Cependant, vous pouvez également sélectionner manuellement l'encodeur, et vous pouvez alors passer des paramètres arbitraires :
ImageCodecInfo jpgInfo = ImageCodecInfo.GetImageEncoders()
.Where(codecInfo => codecInfo.MimeType == "image/jpeg").First();
using (EncoderParameters encParams = new EncoderParameters(1))
{
encParams.Param[0] = new EncoderParameter(Encoder.Quality, (long)quality);
//quality should be in the range [0..100]
image.Save(outputStream, jpgInfo, encParams);
}