CoverImage plugin: add "Size and background" options (#6884)

pull/6897/head
zwim 3 years ago committed by GitHub
parent 5e3c554dd7
commit 31fe3b87c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,12 +1,16 @@
-- plugin for saving a cover image to a file and scale it to fit the screen
local Device = require("device")
if not Device.isAndroid() and not Device.isEmulator() then
return { disabled = true }
end
local Blitbuffer = require("ffi/blitbuffer")
local InfoMessage = require("ui/widget/infomessage")
local UIManager = require("ui/uimanager")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local RenderImage = require("ui/renderimage")
local ffiutil = require("ffi/util")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
@ -36,10 +40,12 @@ local CoverImage = WidgetContainer:new{
function CoverImage:init()
self.cover_image_path = G_reader_settings:readSetting("cover_image_path") or "cover.png"
self.cover_image_background = G_reader_settings:readSetting("cover_image_background") or "black"
self.cover_image_fallback_path = G_reader_settings:readSetting("cover_image_fallback_path") or "cover_fallback.png"
self.enabled = G_reader_settings:isTrue("cover_image_enabled")
self.fallback = G_reader_settings:isTrue("cover_image_fallback")
self.ui.menu:registerToMainMenu(self)
end
function CoverImage:_enabled()
@ -67,9 +73,38 @@ end
function CoverImage:createCoverImage(doc_settings)
if self.enabled and not doc_settings:readSetting("exclude_cover_image") == true then
local image = self.ui.document:getCoverPageImage()
if image then
local cover_image = self.ui.document:getCoverPageImage()
if cover_image then
local s_w, s_h = Device.screen:getWidth(), Device.screen:getHeight()
local i_w, i_h = cover_image:getWidth(), cover_image:getHeight()
local scale_factor = math.min(s_w / i_w, s_h / i_h)
if self.cover_image_background == "none" or scale_factor == 1 then
cover_image:writePNG(self.cover_image_path, false)
cover_image:free()
return
end
local scaled_w, scaled_h = math.floor(i_w * scale_factor), math.floor(i_h * scale_factor)
cover_image = RenderImage:scaleBlitBuffer(cover_image, scaled_w, scaled_h)
-- new buffer with screen dimensions,
local image = Blitbuffer.new( s_w, s_h, cover_image:getType() ) -- new buffer, filled with black
if self.cover_image_background == "white" then
image:fill(Blitbuffer.COLOR_WHITE)
elseif self.cover_image_background == "gray" then
image:fill(Blitbuffer.COLOR_GRAY)
end
-- copy scaled image to buffer
if s_w > scaled_w then -- move right
image:blitFrom(cover_image, math.floor( (s_w - scaled_w) / 2 ), 0, 0, 0, scaled_w, scaled_h)
else -- move down
image:blitFrom(cover_image, 0, math.floor( (s_h - scaled_h) / 2 ), 0, 0, scaled_w, scaled_h)
end
cover_image:free()
image:writePNG(self.cover_image_path, false)
image:free()
logger.dbg("CoverImage: image written to " .. self.cover_image_path)
end
end
@ -193,6 +228,67 @@ function CoverImage:addToMainMenu(menu_items)
end
end,
},
-- menu entry: scale book cover
{
text = _("Size and background"),
enabled_func = function()
return self.enabled
end,
sub_item_table = {
{
text = _("Scale, black background"),
checked_func = function()
return self.cover_image_background == "black"
end,
callback = function()
self.cover_image_background = "black"
G_reader_settings:saveSetting("cover_image_background", self.cover_image_background)
if self.enabled then
self:createCoverImage(self.ui.doc_settings)
end
end
},
{
text = _("Scale, white background"),
checked_func = function()
return self.cover_image_background == "white"
end,
callback = function()
self.cover_image_background = "white"
G_reader_settings:saveSetting("cover_image_background", self.cover_image_background)
if self.enabled then
self:createCoverImage(self.ui.doc_settings)
end
end
},
{
text = _("Scale, gray background"),
checked_func = function()
return self.cover_image_background == "gray"
end,
callback = function()
self.cover_image_background = "gray"
G_reader_settings:saveSetting("cover_image_background", self.cover_image_background)
if self.enabled then
self:createCoverImage(self.ui.doc_settings)
end
end
},
{
text = _("Original image"),
checked_func = function()
return self.cover_image_background == "none"
end,
callback = function()
self.cover_image_background = "none"
G_reader_settings:saveSetting("cover_image_background", self.cover_image_background)
if self.enabled then
self:createCoverImage(self.ui.doc_settings)
end
end
},
}
},
-- menu entry: exclude this cover
{
text = _("Exclude this book cover"),

Loading…
Cancel
Save