diff options
Diffstat (limited to 'test/lua/info.lua')
-rw-r--r-- | test/lua/info.lua | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/test/lua/info.lua b/test/lua/info.lua new file mode 100644 index 0000000..5b4b151 --- /dev/null +++ b/test/lua/info.lua @@ -0,0 +1,149 @@ +require"imlua" +require"lfs" + +function PrintError(error) + local msg = {} + msg[im.ERR_OPEN] = "Error Opening File." + msg[im.ERR_MEM] = "Insuficient memory." + msg[im.ERR_ACCESS] = "Error Accessing File." + msg[im.ERR_DATA] = "Image type not Suported." + msg[im.ERR_FORMAT] = "Invalid Format." + msg[im.ERR_COMPRESS] = "Invalid or unsupported compression." + + if msg[error] then + print(msg[error]) + else + print("Unknown Error.") + end +end + +function FindZero(data) + if (not data) then return false end + for i = 1, table.getn(data) do + if data[i] == 0 then + return true + end + end + return false +end + +function AttribData2Str(data, data_type) + local data_str + + if data_type == im.BYTE then + data_str = string.format("%3d", data[1]) + elseif data_type == im.USHORT then + data_str = string.format("%5d", data[1]) + elseif data_type == im.INT then + data_str = string.format("%5d", data[1]) + elseif data_type == im.FLOAT then + data_str = string.format("%5.2f", data[1]) + elseif data_type == im.CFLOAT then + data_str = string.format("%5.2f, %5.2f", data[1], data[2]) + end + + return data_str +end + +function GetSizeDesc(size) + local size_desc + + if size < 1024 then + size_desc = "b" + else + size = size / 1024 + + if size < 1024 then + size_desc = "Kb" + else + size = size / 1024 + size_desc = "Mb" + end + end + + return size, size_desc +end + +function FileSize(file_name) + if lfs then + local attr = lfs.attributes(file_name) + return attr.size + else + return 0 + end +end + +function PrintImageInfo(file_name) + print("IM Info") + print(string.format(" File Name:\n %s", file_name)) + + local ifile, error = im.FileOpen(file_name) + if not ifile then + PrintError(error) + return nil + end + + local file_size = FileSize(file_name) + + print(string.format(" File Size: %.2f %s", GetSizeDesc(file_size))) + + local format, compression, image_count = ifile:GetInfo() + + local error, format_desc = im.FormatInfo(format) + print(string.format(" Format: %s - %s", format, format_desc)) + print(string.format(" Compression: %s", compression)) + print(string.format(" Image Count: %d", image_count)) + for i = 1, image_count do + local error, width, height, color_mode, data_type = ifile:ReadImageInfo(i-1) + if width == nil then + PrintError(height) + ifile:Close() + return nil + end + + print(string.format(" Image #%d", i)) + print(string.format(" Width: %d", width)) + print(string.format(" Height: %d", height)) + print(string.format(" Color Space: %s", im.ColorModeSpaceName(color_mode))) + print(string.format(" Has Alpha: %s", im.ColorModeHasAlpha(color_mode) and "Yes" or "No")) + print(string.format(" Is Packed: %s", im.ColorModeIsPacked(color_mode) and "Yes" or "No")) + print(string.format(" Is Top Down: %s", im.ColorModeIsTopDown(color_mode) and "Yes" or "No")) + print(string.format(" Data Type: %s", im.DataTypeName(data_type))) + + local image_size = im.ImageDataSize(width, height, color_mode, data_type) + print(string.format(" Data Size: %.2f %s", GetSizeDesc(image_size))) + + local attrib_list = ifile:GetAttributeList() + for a = 1, table.getn(attrib_list) do + if a == 1 then + print(" Attributes:") + end + + local attrib_data, attrib_data_type = ifile:GetAttribute(attrib_list[a]) + + if table.getn(attrib_data) == 1 then + print(string.format(" %s: %s", attrib_list[a], AttribData2Str(attrib_data, attrib_data_type))) + elseif attrib_data_type == im.BYTE and FindZero(attrib_data) then + attrib_data = ifile:GetAttribute(attrib_list[a], true) + print(string.format(" %s: %s", attrib_list[a], attrib_data)) + else + print(string.format(" %s: %s ...", attrib_list[a], AttribData2Str(attrib_data, attrib_data_type))) + end + end + end + + ifile:Close() +end + +function main(arg) + if (not arg or table.getn(arg) < 1) then + print("Invalid number of arguments.") + return nil + end + + PrintImageInfo(arg[1]) + return 1 +end + +--main(arg) +PrintImageInfo("lena.jpg") |