티스토리 뷰
반응형
이미지 전체를 읽어오지 않고, 앞부분 12바이트만 읽어 이미지 파일 종류를 확인하는 간단한 함수 입니다
AHK v2
/**
* GetImageFileType (AHK v2)
* 이미지 파일 타입 검사
* @param {String} filePath 파일 경로
* @returns {String}
*/
GetImageFileType(filePath) {
file := FileOpen(filePath, "r")
If ( ! file) {
OutputDebug("[ERROR] GetImageFileType() : can't open file = " filePath)
return "unknown"
}
headerHex := ""
Loop 12 {
headerHex .= Format("{:02X}", file.ReadUChar())
}
file.Close()
if (InStr(headerHex, "FFD8FF", true) = 1) { ; JPEG: FF D8 FF
return "jpg"
} else if (InStr(headerHex, "89504E47", true) = 1) { ; PNG: 89 50 4E 47 0D 0A 1A 0A
return "png"
} else if (InStr(headerHex, "47494638", true) = 1) { ; GIF: 47 49 46 38
return "gif"
} else if (InStr(headerHex, "424D", true) = 1) { ; BMP: 42 4D
return "bmp"
} else if (InStr(headerHex, "52494646", true) = 1 && InStr(headerHex, "57454250", true) = 17) { ; WebP
return "webp"
}
return "unknown"
}
AHK v1
/**
* GetImageFileType (AHK v1)
* 이미지 파일 타입 검사
* @param {String} filePath 파일 경로
* @returns {String}
*/
GetImageFileType(filePath) {
file := FileOpen(filePath, "r")
If ( ! file) {
OutputDebug "[ERROR] GetImageFileType() : can't open file = " filePath
return "unknown"
}
file.RawRead(rawData, 12)
file.Close()
VarSetCapacity(headerBytes, 12, 0)
DllCall("RtlMoveMemory", "Ptr", &headerBytes, "Ptr", &rawData, "UInt", 12)
headerHex := ""
Loop, 12 {
headerHex .= Format("{:02X}", NumGet(headerBytes, A_Index - 1, "UChar"))
}
VarSetCapacity(headerBytes, -1)
headerBytes := ""
if (InStr(headerHex, "FFD8FF", true) = 1) { ; JPEG: FF D8 FF
return "jpg"
} else if (InStr(headerHex, "89504E47", true) = 1) { ; PNG: 89 50 4E 47 0D 0A 1A 0A
return "png"
} else if (InStr(headerHex, "47494638", true) = 1) { ; GIF: 47 49 46 38
return "gif"
} else if (InStr(headerHex, "424D", true) = 1) { ; BMP: 42 4D
return "bmp"
} else if (InStr(headerHex, "52494646", true) = 1 && InStr(headerHex, "57454250", true) = 17) { ; WebP
return "webp"
}
return "unknown"
}
- 섬네일 이미지 : Copilot
반응형
'프로그래밍 > AutoHotKey' 카테고리의 다른 글
| [AutoHotKey v2] SDebug : 변수 디버깅 클래스 (0) | 2024.07.11 |
|---|