我正在尝试创建一个在 Lua 中从网络上抓取图像的程序。一个小问题是图像有时没有扩展名或扩展名不正确。请参阅此动画“jpeg”,例如:http: //i.imgur.com/Imvmy6C.jpg
所以我创建了一个函数来检测图像的文件类型。这很简单,只需比较返回图像的前几个字符即可。Png 文件以 PNG 开头,GIF 以 GIF 开头,JPG 以奇怪的符号“╪”开头。
这有点 hacky,因为图像不应该被表示为字符串,但它工作得很好。除非我实际运行代码。
当我将代码输入命令行时,它工作正常。但是当我运行一个包含代码的文件时,它不起作用。更奇怪的是,它只在jpegs上失败。它仍然可以正确识别 PNG 和 GIF。
这是重现该错误所需的最少代码:
http = require "socket.http"
function detectImageType(image)
local imageType = "unknown"
if string.sub(image, 2, 2) == "╪" then imageType = "jpg" end
return imageType
end
image = http.request("http://i.imgur.com/T4xRtBh.jpg")
print(detectImageType(image))
将其复制并粘贴到命令行中会正确返回“jpg”。将其作为文件运行会返回“未知”。
我在 Windows 8.1 上通过 powershell 使用 Lua for Windows 包中的 Lua 5.1.4。
编辑:
发现问题 string.byte("╪") 在命令行返回 216,作为文件运行时返回 226。我不知道为什么,也许 lua 和 powershell 的编码不同?
这一行解决了这个问题:
if string.byte(string.sub(image, 2, 2)) == 216 then imageType = "jpg" end