Difference between revisions of "Module:Sandbox/Imagesize"

From blackwiki
Jump to navigation Jump to search
blackwiki>RexxS
(Creating Module:Sandbox/Imagesize)
 
blackwiki>RexxS
(add functions for just height and just width)
Line 9: Line 9:
 
local p = {}
 
local p = {}
  
function p.getdimensions(frame)
+
local function _getdimensions(filename)
local filename = mw.text.trim(frame.args[1] or "")
 
if filename == "" then return end
 
 
if filename:sub(1,5) ~= "File:" then filename = "File:" .. filename end
 
if filename:sub(1,5) ~= "File:" then filename = "File:" .. filename end
 
local titleobj = mw.title.new(mw.uri.decode(mw.ustring.gsub(filename,'%|.*$',''), 'WIKI'))
 
local titleobj = mw.title.new(mw.uri.decode(mw.ustring.gsub(filename,'%|.*$',''), 'WIKI'))
Line 17: Line 15:
 
local w = tonumber(fileobj.width) or 0
 
local w = tonumber(fileobj.width) or 0
 
local h = tonumber(fileobj.height) or 0
 
local h = tonumber(fileobj.height) or 0
 +
return w, h
 +
end
 +
 +
function p.getDimensions(frame)
 +
local filename = mw.text.trim(frame.args[1] or "")
 +
if filename == "" then return end
 +
local w, h = _getdimensions(filename)
 
return w .. "x" .. h
 
return w .. "x" .. h
 +
end
 +
 +
function p.getHeight(frame)
 +
local filename = mw.text.trim(frame.args[1] or "")
 +
if filename == "" then return end
 +
local w, h = _getdimensions(filename)
 +
return h
 +
end
 +
 +
function p.getWidth(frame)
 +
local filename = mw.text.trim(frame.args[1] or "")
 +
if filename == "" then return end
 +
local w, h = _getdimensions(filename)
 +
return w
 
end
 
end
  
 
return p
 
return p

Revision as of 20:37, 31 March 2019

This module is adapted from the 'getdimensions' function in Module:Multiple image for use as a stand-alone.

It has four public functions: getWidth, getHeight, getDimensions, getScale. They take a filename, with or without the "File:" prefix, and return the width, the height, both dimensions (WIDTHxHEIGHT), or the ratio of width to height (multiplied by a scale factor) respectively. It works with files on Commons or local ones, and works with animated gifs using the dimensions of the first image.

The getScale function takes an additional parameter, |scale= (default is 1). This can be used to directly scale images to the same height using the |upright= parameter in image syntax.

Examples

  • {{#invoke:Sandbox/Imagesize|getDimensions|Example.jpg}} → 172x178
  • {{#invoke:Sandbox/Imagesize|getWidth|Example.jpg}} → 172
  • {{#invoke:Sandbox/Imagesize|getHeight|Example.jpg}} → 178
  • {{#invoke:Sandbox/Imagesize|getScale|Example.jpg|scale=1}}Script error: The function "getScale" does not exist.
  • {{#invoke:Sandbox/Imagesize|getDimensions|File:Bishzilla Lucia Looking Right.gif}} → 100x103
  • {{#invoke:Sandbox/Imagesize|getDimensions|File:Doorway from Moutiers-Saint-Jean MET DP255158.jpg}} → 3042x3887
  • {{#invoke:Sandbox/Imagesize|getScale|File:Doorway from Moutiers-Saint-Jean MET DP255158.jpg|scale=1}}Script error: The function "getScale" does not exist.
Same height, scale=1
upright=Script error: The function "getScale" does not exist.
upright=Script error: The function "getScale" does not exist.
Same height, scale=0.5
upright=Script error: The function "getScale" does not exist.
Error creating thumbnail:
upright=Script error: The function "getScale" does not exist.

--[[
Imagesize
taks a single unnamed parameter, the filename
returns its dimensions as a string "WIDTHxHEIGHT"

Adaped from the original function in Module:Multiple image
--]]

local p = {}

local function _getdimensions(filename)
	if filename:sub(1,5) ~= "File:" then filename = "File:" .. filename end
	local titleobj = mw.title.new(mw.uri.decode(mw.ustring.gsub(filename,'%|.*$',''), 'WIKI'))
	local fileobj = titleobj and titleobj.file or {width = 0, height = 0}
	local w = tonumber(fileobj.width) or 0
	local h = tonumber(fileobj.height) or 0
	return w, h
end

function p.getDimensions(frame)
	local filename = mw.text.trim(frame.args[1] or "")
	if filename == "" then return end
	local w, h = _getdimensions(filename)
	return w .. "x" .. h
end

function p.getHeight(frame)
	local filename = mw.text.trim(frame.args[1] or "")
	if filename == "" then return end
	local w, h = _getdimensions(filename)
	return h
end

function p.getWidth(frame)
	local filename = mw.text.trim(frame.args[1] or "")
	if filename == "" then return end
	local w, h = _getdimensions(filename)
	return w
end

return p