Files
LeonOS/data/computercraft/lua/rom/programs/imageview.lua
Leonmmcoset 055bd09311 refactor(程序): 更新事件监听和多行字符串格式
将imageview.lua中的event.pull改为os.pullEvent
在time.lua中使用多行字符串语法改善帮助文本格式
2025-09-02 14:54:37 +08:00

93 lines
2.0 KiB
Lua

-- imageview.lua: Image viewer that loads from URL
local http = require("http")
local paintutils = require("paintutils")
local term = require("term")
local shell = require("shell")
-- 帮助信息函数
local function printHelp()
print("Usage: imageview <image_url>")
print("Options:")
print(" --help, -h Show this help message")
print([[
Displays an image from the specified URL.
Press ESC to exit back to shell.
]])
end
-- 下载图片函数
local function downloadImage(url)
print("Downloading image from: " .. url)
local response, err = http.get(url, nil, true)
if not response then
print("Error downloading image: " .. err)
return nil
end
local data = response.readAll()
response.close()
return data
end
-- 主函数
local function main(args)
-- 处理命令行参数
if #args == 0 or args[1] == "--help" or args[1] == "-h" then
printHelp()
return
end
local imageUrl = args[1]
-- 检查是否是有效的URL
if not imageUrl:match("^https?://") then
print("Error: Invalid URL format. Must start with http:// or https://")
return
end
-- 下载图片
local imageData = downloadImage(imageUrl)
if not imageData then
return
end
-- 尝试加载图片
local success, image = pcall(function()
return paintutils.loadImage(imageData)
end)
if not success then
print("Error loading image: " .. image)
return
end
-- 清除屏幕并显示图片
term.clear()
local w, h = term.getSize()
-- 计算图片居中位置
local imgW, imgH = #image[1], #image
local x = math.floor((w - imgW) / 2)
local y = math.floor((h - imgH) / 2)
-- 绘制图片
paintutils.drawImage(image, x, y)
print("\nImage displayed. Press ESC to exit.")
-- 监听ESC键
while true do
local _, key = os.pullEvent("key")
if key == 27 then -- ESC键
term.clear()
term.setCursorPos(1, 1)
print("Image viewer closed.")
return
end
end
end
-- 运行主函数
local args = {...}
main(args)