web-dev-qa-db-ja.com

ファイル名から画像寸法を取得する方法

FPN = "c:\ ggs\ggs Access\images\members\1.jpg"というファイルがあります

私は画像の寸法を取得しようとしています1.jpg、ロードする前に画像の寸法が有効かどうか、画像の幅または高さがより小さいかどうかを確認したいですまたはゼロに等しい場合、「イメージが正しい形式ではありません」などのメッセージをポップアップ表示します

誰でも私を助けてくれますか?

53
user682417
System.Drawing.Image img = System.Drawing.Image.FromFile(@"c:\ggs\ggs Access\images\members\1.jpg");
MessageBox.Show("Width: " + img.Width + ", Height: " + img.Height);
114
John T

WpfクラスSystem.Windows.Media.Imaging.BitmapDecoderはファイル全体ではなく、メタデータのみを読み取ります。

using(var imageStream = File.OpenRead("file"))
{
    var decoder = BitmapDecoder.Create(imageStream, BitmapCreateOptions.IgnoreColorProfile,
        BitmapCacheOption.Default);
    var height = decoder.Frames[0].PixelHeight;
    var width = decoder.Frames[0].PixelWidth;
}

2019-07-07を更新

正しく覚えていれば、数か月後にexifされた画像の処理が少し複雑になることがわかりました。いくつかの理由で、iPhoneは通常ではなく回転した画像を保存し、「表示する前にこの画像を回転させる」exifフラグを設定します。
また、gifはかなり複雑な形式であることが判明しました。完全なgifサイズのフレームはない可能性があり、オフセットとフレームサイズから集約する必要があります。

そこで、代わりに ImageProcessor を使用して、すべての問題を処理しました。一部のブラウザにはexifサポートがなく、とにかくローテーションバージョンを保存する必要があるため、ファイルtho全体を読み取るかどうかはチェックしないでください。

using (var imageFactory = new ImageFactory())
{
    imageFactory
        .Load(stream)
        .AutoRotate(); //takes care of ex-if
    var height = imageFactory.Image.Height,
    var width = imageFactory.Image.Width
}
33
Atomosk