67 lines
1.7 KiB
Julia
67 lines
1.7 KiB
Julia
"""
|
|
tools/image.jl - Image utilities
|
|
|
|
This module provides image detection and encoding utilities.
|
|
"""
|
|
|
|
module Image
|
|
|
|
using ..Types: *
|
|
|
|
function detectSupportedImageMimeType(buffer::Vector{UInt8})::Union{String, Nothing}
|
|
if length(buffer) >= 3 && buffer[1:3] == [0xff, 0xd8, 0xff]
|
|
if buffer[4] == 0xf7
|
|
return nothing
|
|
end
|
|
return "image/jpeg"
|
|
end
|
|
|
|
if length(buffer) >= 8 && buffer[1:8] == [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]
|
|
return "image/png"
|
|
end
|
|
|
|
if length(buffer) >= 3 && buffer[1:3] == [0x47, 0x49, 0x46]
|
|
return "image/gif"
|
|
end
|
|
|
|
if length(buffer) >= 12 && buffer[1:4] == [0x52, 0x49, 0x46, 0x46] && buffer[9:12] == [0x57, 0x45, 0x42, 0x50]
|
|
return "image/webp"
|
|
end
|
|
|
|
if length(buffer) >= 2 && buffer[1:2] == [0x42, 0x4d]
|
|
return "image/bmp"
|
|
end
|
|
|
|
return nothing
|
|
end
|
|
|
|
function encodeBase64(bytes::Vector{UInt8})::String
|
|
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
|
output = ""
|
|
|
|
for i in 1:3:length(bytes)
|
|
first_byte = i <= length(bytes) ? bytes[i] : 0
|
|
second_byte = i+1 <= length(bytes) ? bytes[i+1] : 0
|
|
third_byte = i+2 <= length(bytes) ? bytes[i+2] : 0
|
|
|
|
output *= alphabet[first_byte >> 2 + 1]
|
|
output *= alphabet[(((first_byte & 0x03) << 4) | ((second_byte >> 4) & 0x0f)) + 1]
|
|
|
|
if i+1 <= length(bytes)
|
|
output *= alphabet[(((second_byte & 0x0f) << 2) | ((third_byte >> 6) & 0x03)) + 1]
|
|
else
|
|
output *= "="
|
|
end
|
|
|
|
if i+2 <= length(bytes)
|
|
output *= alphabet[third_byte & 0x3f + 1]
|
|
else
|
|
output *= "="
|
|
end
|
|
end
|
|
|
|
return output
|
|
end
|
|
|
|
end
|