ASP.NET MVCを使用していて、ファイルをアップロードするアクションがあります。ファイルは正しくアップロードされています。ただし、画像の幅と高さが必要です。最初にに変換してから続行HttpPostedFileBase
する必要があると思います。Image
それ、どうやったら出来るの?
また、画像の幅と高さを取得する別のより良い方法があるかどうかをお知らせください。
ASP.NET MVCを使用していて、ファイルをアップロードするアクションがあります。ファイルは正しくアップロードされています。ただし、画像の幅と高さが必要です。最初にに変換してから続行HttpPostedFileBase
する必要があると思います。Image
それ、どうやったら出来るの?
また、画像の幅と高さを取得する別のより良い方法があるかどうかをお知らせください。
私は次のように使用Image.FromStream
します:
Image.FromStream(httpPostedFileBase.InputStream, true, true)
が返されることに注意してImage
くださいIDisposable
。
System.Drawing.dll
これを機能させるには への参照が必要で、これImage
はSystem.Drawing
名前空間にあります。
何をしようとしているのかはわかりませんが、たまたまサムネイルなどを作成している場合は、次のようなことに興味があるかもしれません...
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;
}
はclipRectangle
、新しいビットマップにスケーリングする元の画像の四角形です (手動でアスペクト比を処理する必要があります)。catch-block はIDisposable
、コンストラクター内での一般的な使用法です。新しいIDisposable
オブジェクトが返されるまで、その所有権を維持します (コード コメントでドキュメント化することをお勧めします)。
残念ながら、デフォルトの「jpeg として保存」エンコーダーは品質コントロールを公開しておらず、非常に低いデフォルト品質を選択しています。
ただし、エンコーダーを手動で選択することもできます。その後、任意のパラメーターを渡すことができます。
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);
}