تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[مقال] Check the file format of an Image
#1
مقدمـــــــــة

منذ عامان أو أقل قليلا كتبت مقالا في المنتدي القديم عن كيفية التعامل مع الصور المتحركة...في هذه الوقت كنت أحتاج الي التأكد من نوعية الصورة و أنها من نوع GIF

لذلك كتبت دالتان من خلالهم نمرر أي صورة Image ..... و من ثم نسترجع قيمة عبارة من النوع Boolean

الدالة الأولي:

الهدف منها كان أن أتأكد من عدد Frames الموجودة في الصورة فإن كانت أكبر من العدد واحد (1) فهذا يؤكد أن الصورة من النوع المطلوب وهو GIF.
الكود ادناه يوضح شكل الدالة

كود :
''' <summary>Chech if Image is GIf animated image, using framacount</summary>
    ''' <param name="img">image to check</param>
    ''' <returns>Flag to indicate that the image passed to the function is of gif type</returns>
    ''' <remarks>if the image passed to the function is of gif type, the reurn value shall be true</remarks>
    Friend Shared Function IsGifImage(ByVal img As Image) As Boolean
        Return img IsNot Nothing AndAlso ((img.GetFrameCount(New FrameDimension(img.FrameDimensionsList(0)))) > 1)
    End Function


الدالة الثانية:

الهدف منها ايضا هو التأكد من RawFormat الخاصة بالصورة و انها من النوع GIF
الكود أدناه يوضح شكل الدالة
ملحوظة: هذه الكود يمكن التعديل به للتأكد من الانواع الاخري للصورة مثل bmp أو png او أي نوع أخر مماثل

كود :
''' <summary>Chech if Image is GIf animated image, using imageformat</summary>
    ''' <param name="img">image to check</param>
    ''' <returns>Flag to indicate that the image passed to the function is of gif type</returns>
    ''' <remarks>if the image passed to the function is of gif type, the reurn value shall be true</remarks>
    Friend Shared Function IsGifSupported(img As Image) As Boolean
        Return img IsNot Nothing AndAlso img.RawFormat.Guid = ImageFormat.Gif.Guid
    End Function


و منذ أيام و بعد مراجعة الدالتان أعلاه وجدت انه و من الأفضل ان يكون عندي دالة أقوي فقمت بدمج الدالتان معا في دالة واحدة
الكود أدناه يوضح شكل الدالة

الدالة الثالثة:

كود :
''' <summary>Chech if Image is GIf animated image, using bith frame count and image format</summary>
    ''' <param name="img">image to check</param>
    ''' <returns>Flag to indicate that the image passed to the function is of gif type</returns>
    ''' <remarks>if the image passed to the function is of gif type, the reurn value shall be true</remarks>
    Friend Shared Function IsAnimatedImage(img As Image) As Boolean
        Return img IsNot Nothing AndAlso img.RawFormat.Guid = ImageFormat.Gif.Guid AndAlso ((img.GetFrameCount(New FrameDimension(img.FrameDimensionsList(0)))) > 1)
    End Function

كيف تستخدم الكود:

الكود ادناه يوضح كيفية استخدام هذه الدوال من خلال الحدث Paint الخاص بالفورم

كود :
Dim bmp As Image = My.Resources.calypso_jpg
        If Not IsAnimatedImage(bmp) Then
            e.Graphics.DrawImage(bmp, 0, 0)
        End If


أتمني أن الكود يكون مفيدا لكم

تقبلوا تحياتي
الرد }}}
تم الشكر بواسطة: سعود , Sajad , الشاكي لله , Japan
#2
-
في الزيادة إفادة.....

منقول

دالة GetImageFormat لتحديد نوع الصورة ( BMP, GIF, JPEG, PNG, TIFF, ICON, GIF animation )
كود :
' دالة تحديد نوع الصورة  ( BMP, GIF, JPEG, PNG, TIFF, ICON, GIF animation )
Private Function GetImageFormat(ByVal img As Image) As String
    Dim imgFormat As String = "Unknown"
    If img.RawFormat.Guid = Imaging.ImageFormat.Bmp.Guid Then imgFormat = "BMP"
    If img.RawFormat.Guid = Imaging.ImageFormat.Gif.Guid Then imgFormat = "GIF"
    If img.RawFormat.Guid = Imaging.ImageFormat.Jpeg.Guid Then imgFormat = "JPEG"
    If img.RawFormat.Guid = Imaging.ImageFormat.Png.Guid Then imgFormat = "PNG"
    If img.RawFormat.Guid = Imaging.ImageFormat.Tiff.Guid Then imgFormat = "TIFF"
    If img.RawFormat.Guid = Imaging.ImageFormat.Icon.Guid Then imgFormat = "ICON"
    If imgFormat = "GIF" AndAlso img.GetFrameCount(Imaging.FrameDimension.Time) > 1 Then imgFormat = "GIF animation"
    Return imgFormat
End Function

طريقة استخدامها
كود :
' (صورة من ملف (حتى لو تم تغيير النوع من اسم الملف
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Using op As New OpenFileDialog()
        op.Filter = "Images (*.bmp,*.gif,*.jpg,*.png,*.tif,*.ico)|*.bmp;*.gif;*.jpg;*.png;*.tif;*.ico"
        If op.ShowDialog = DialogResult.OK Then
            MsgBox(GetImageFormat(Image.FromFile(op.FileName)))
        End If
    End Using
End Sub
كود :
' صورة من الريسورس
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
    MsgBox(GetImageFormat(My.Resources.logo))
End Sub
الرد }}}
تم الشكر بواسطة: سعود , الشاكي لله , Japan
#3
الأخ Vbnet

و هذه طريقة أخري لنفس الكود الخاص بك و لكن بشكل مختلف

كود :
Friend Shared Function GrabImageFormat(format As ImageFormat) As ImageFormat
        Dim formtType As ImageFormat = ImageFormat.Png
        If format.Guid = ImageFormat.Jpeg.Guid Then
            formtType = ImageFormat.Jpeg
        ElseIf format.Guid = ImageFormat.Bmp.Guid Then
            formtType = ImageFormat.Bmp
        End If
        Return formtType
    End Function

عليك فقط تعريف الصورة ثم تمرر القيمة Image.RawFormat الي الدالة اتحصل علي نوع الصورة

علي نفس المنوال تستطيع أن تكمل الدالة للتأكد من جميع انواع الصور
الرد }}}
تم الشكر بواسطة: سعود , Sajad , الشاكي لله , Japan
#4
السلام عليكم

جزاكم الله خيرا

تحياتي
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم