You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.1 KiB
Lua
55 lines
2.1 KiB
Lua
local basexx = require 'basexx'
|
|
local uuid = require 'lua_uuid'
|
|
local vips = require 'vips'
|
|
local thumbnail = require './models/thumbnail'
|
|
|
|
local image = {}
|
|
|
|
-- where images are saved:
|
|
--image.directory = 'thumbnails/'
|
|
|
|
image.setdb = function(db)
|
|
image.db = db
|
|
end
|
|
|
|
image.new = function(img_buffer, original_filename)
|
|
local image_record = {};
|
|
image_record['type'] = 'image'
|
|
image_record.original_filename = original_filename
|
|
|
|
local new_filename = uuid()
|
|
--local vips_image = vips.Image.new_from_buffer(img_buffer, "", {access = "sequential"})
|
|
local thumbnail_original = vips.Image.new_from_buffer(img_buffer, "") -- don't give `{access = "sequential"}` option as 3rd parameter, since then it won't be able to be read twice: once for 960px thumbnail, and again for the 180px
|
|
local thumbnail_960 = thumbnail_original:thumbnail_image(960)
|
|
local thumbnail_180 = thumbnail_original:thumbnail_image(180)
|
|
|
|
--[[
|
|
thumbnail_original:write_to_file(thumbnail_original_path, {compression=9}) -- LMDBTODO: instead of writing to file, store in record; store each thumbnail in individual records (type='thumbnail'), so binser doesn't have to deserialize all the sizes just to get one (small) size
|
|
thumbnail_960:write_to_file(thumbnail_960_path, {compression=9})
|
|
thumbnail_180:write_to_file(thumbnail_180_path, {compression=9})
|
|
]]
|
|
|
|
local thumbnail_original_record = thumbnail.newfromvips(thumbnail_original)
|
|
local thumbnail_960_record = thumbnail.newfromvips(thumbnail_960)
|
|
local thumbnail_180_record = thumbnail.newfromvips(thumbnail_180)
|
|
|
|
-- TODO: close/release vips buffers, unless vips binding does it automatically
|
|
|
|
image_record.thumbnail_original_id = thumbnail_original_record.id
|
|
image_record.thumbnail_960_id = thumbnail_960_record.id
|
|
image_record.thumbnail_180_id = thumbnail_180_record.id
|
|
|
|
if image.db ~= nil then
|
|
image.db:insertrecord(image_record)
|
|
end
|
|
|
|
return image_record;
|
|
end
|
|
|
|
image.new_from_base64 = function(img_base64, original_filename)
|
|
local img_buffer = basexx.from_base64(img_base64)
|
|
return image.new(img_buffer, original_filename);
|
|
end
|
|
|
|
return image;
|