티스토리 뷰

반응형

이미지 전체를 읽어오지 않고, 앞부분 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