Get the original size of the original size of the image file

xiaoxiao2021-03-06  47

/ / =========================================================================================================================================================================================== ==================== // Function: of_getpicturesize () // --------------------- ----------------------------------------------- // Description : Get image size sizes of image files (support GIF, JPG, BMP format) // ----------------------------- ------------------------------------- // Parameter: // value stringas_filename image file name // ReferenceLong Al_PictureWidth Back to Picture Width // ReferenceLong Al_PictureHeight Back Image Height / / / ------------------------------------------------------------------------------------------------------------------------ -------------------------------- // Return value: Integer1 - success, 0 - failed // ---- -------------------------------------------------- ----------------

Integer li_file, li_datareadblob lb_datalong ll_filelength, ll_picturewidth, ll_pictureheightlong ll_datalen, ll_datapos, ll_fileposboolean lb_loopflag = truechar lc_char1, lc_char2

// File does not exist if not fileexists (as_filename) Then Return 0

// Take the file size LL_FileLength = filelength (as_filename)

// Open file li_file = fileopen (as_filename, streammode!) If li_file = -1 Then Return 0

// Read file li_dataread = fileRead (li_file, lb_data) if li_dataread <= 0 ThenfileClose (li_file) Return 0nd IF

// GIF currently has two types // 1. Identifies GIF87A, just to store single still images // 2. Identifier as GIF89A, can simultaneously store a dry stationary image and further form a continuous animation // file The first 6 bytes are identified: GIF87A or GIF89A, the 7th, 8th bytes are image width (width), // 9th, and 10 bytes are image height (Height), pay attention to the low in the two bytes in front

// GIF file format judges if string (blobmid (lb_data, 1, 4)) = 'gif8' Thenll_PictureWidth = ASC (String (blobmid (lb_data, 7, 1)))) ASC (BLOBMID (LB_Data, 8, 1 )))

256ll_PictureHeight = Asc (String (BlobMid (lb_Data, 9,1))) Asc (String (BlobMid (lb_Data, 10,1))) * 256If ll_PictureWidth> 0 And ll_PictureHeight> 0 Thenal_PictureWidth = ll_PictureWidthal_PictureHeight = ll_PictureHeightFileClose (li_File) Return 1ElseFileClose (li_file) Return 0nd IFEND IF

// jpeg file format // The first 3 bytes are identified: 0xFF, 0xD8, 0xffif string (blobmid (lb_data, 1, 3)) = char (255) char (216) Char (255) Thenll_Datalen = LEN lb_Data) ll_DataPos = 3ll_FilePos = 3Do While lb_LoopFlagll_DataPos = ll_DataPos 1ll_FilePos = ll_FilePos 1lc_Char1 = String (BlobMid (lb_Data, ll_DataPos, 1)) lc_Char2 = String (BlobMid (lb_Data, ll_DataPos 1,1)) If lc_Char1 = Char (255 ) And lc_char2 <> char (255) THENIF LC_CHAR2> = char (192) and lc_char2 <= char (195) THEN / / Found Data LL_PICTUREWIDTH = ASC (String (blobmid (lb_data, ll_datapos 7, 1))) *

256 ASC (String (blobmid (lb_data, ll_datapos 8, 1))) LL_PICTUREHEIGHT = ASC (String (blobmid (lb_data, ll_datapos 5, 1)))))))

* 256 ASC (String (blobmid (lb_data, ll_datapos 6, 1)))) LB_LOOPFLAG = falselselse // Did not find size data, reread file ll_filepos = ll_filepos asc (String (blobmid (lb_data, ll_datapos

3,1))) * 256 Asc (String (BlobMid (lb_Data, ll_DataPos 2,1))) 1If ll_FilePos> ll_FileLength ThenFileClose (li_File) Return 0ElseFileSeek (li_File, ll_FilePos) FileRead (li_File, lb_Data) ll_DataLen = Len (lb_Data) ll_DataPos = 0End IfEnd IfEnd IfIf ll_DataPos = ll_DataLen - 9 And lb_LoopFlag = True Thenll_FilePos = ll_FilePos - 9FileSeek (li_File, ll_FilePos) FileRead (li_File, lb_Data) ll_DataLen = Len (lb_Data) ll_DataPos = 0End IfIf ll_FilePos> = ll_FileLength Thenlb_LoopFlag = FalseEnd IfLoopIf ll_PictureWidth> 0 And ll_PictureHeight> 0 Thenal_PictureWidth = ll_PictureWidthal_PictureHeight = ll_PictureHeightFileClose (li_File) Return 1ElseFileClose (li_File) Return 0End IfEnd If // BMP file format identifier is the first two bytes //: // there are many possible identifier 19 20, 21, 22 bytes are width (width), the 23rd, 24, 25, 26 bytes is height // four bytes of DWORD, low in the pre-IF String (Blobmid (lb_data, 1, 2)) = 'bm' Thenll_PictureWidth = ASC (String (blobmid (lb_data, 19, 1)))) ASC (String (Blobmid (LB_Data, 20, 1)))))))

* 256 ASC (String (blobmid (lb_data, 21, 1)) * 65536 ASC (String (blobmid (lb_data, 22, 1))) * 16777216ll_PictureHeight = ASC (String (blobmid (lb_data, 23, 1))) ) ASC (String (blobmid (lb_data, 24, 1))))

* 256 Asc (String (BlobMid (lb_Data, 25,1))) * 65536 Asc (String (BlobMid (lb_Data, 26,1))) * 16777216If ll_PictureWidth> 0 And ll_PictureHeight> 0 Thenal_PictureWidth = ll_PictureWidthal_PictureHeight = ll_PictureHeight image the true size of the converted PBUnit size, and returns // al_PictureWidth = PixelsToUnits (ll_PictureWidth, XPixelsToUnits!) // al_PictureHeight = PixelsToUnits (ll_PictureHeight, YPixelsToUnits!) FileClose (li_File) return 1ElseFileClose (li_File) return 0End IfEnd If

Return 0

转载请注明原文地址:https://www.9cbs.com/read-82551.html

New Post(0)