web-dev-qa-db-fra.com

Comment obtenir la dimension d'image à partir du nom de fichier

J'ai un fichier appelé FPN = "c:\ggs\ggs Access\images\members\1.jpg"

J'essaie d'obtenir la dimension de l'image 1.jpg, et je voudrais vérifier si la dimension de l'image est valide ou non avant le chargement, et si la largeur ou la hauteur de l'image est inférieure à ou égal à zéro, faites apparaître un message comme "l'image n'est pas au bon format"

Quelqu'un peut-il m'aider s'il-vous-plaît?

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

Classe Wpf System.Windows.Media.Imaging.BitmapDecoder ne lit pas le fichier entier, juste les métadonnées.

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;
}

Mise à jour 2019-07-07

Si je me souviens bien, quelques mois plus tard, j'ai découvert que le traitement des images existantes était un peu plus compliqué. Pour certaines raisons, les iphones enregistrent l'image pivotée au lieu de la normale et ils définissent "faire pivoter cette image avant d'afficher" le drapeau exif.
Il s'est également avéré que le gif est un format assez compliqué. Il est possible qu'aucun cadre n'ait une taille GIF complète, vous devez l'agréger à partir des décalages et des tailles de cadres.

J'ai donc utilisé ImageProcessor à la place, ce qui m'a permis de régler tous les problèmes. Jamais vérifié s'il lit le fichier entier, car certains navigateurs n'ont pas de support exif et j'ai quand même dû enregistrer la version pivotée.

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