<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://uchuwiki.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%3A%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA</id>
	<title>モジュール:画像サイズ - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://uchuwiki.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%3A%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA"/>
	<link rel="alternate" type="text/html" href="https://uchuwiki.com/wiki/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA&amp;action=history"/>
	<updated>2026-09-10T12:23:22Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://uchuwiki.com/wiki/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA&amp;diff=204687&amp;oldid=prev</id>
		<title>Rememberme: 新規: 大きさ指定のない画像に自動で表示幅を付けるモジュール (round 148)</title>
		<link rel="alternate" type="text/html" href="https://uchuwiki.com/wiki/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:%E7%94%BB%E5%83%8F%E3%82%B5%E3%82%A4%E3%82%BA&amp;diff=204687&amp;oldid=prev"/>
		<updated>2026-09-10T09:02:57Z</updated>

		<summary type="html">&lt;p&gt;新規: 大きさ指定のない画像に自動で表示幅を付けるモジュール (round 148)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[==[&lt;br /&gt;
モジュール:画像サイズ&lt;br /&gt;
&lt;br /&gt;
なにをするもの？&lt;br /&gt;
  記事に書かれた [[ファイル:○○.jpg]] のように「大きさの指定がない画像」に、&lt;br /&gt;
  表示に必要なぶんだけの大きさ(既定360px)を自動でつけます。&lt;br /&gt;
&lt;br /&gt;
なぜ必要？&lt;br /&gt;
  大きさを書かないと、MediaWikiは元の画像をそのまま送ります。&lt;br /&gt;
  宇宙wikiのインフォボックスは、画像をPCで359px・スマホで334pxの枠に&lt;br /&gt;
  収めて表示しているのに、実際には900pxや600pxの元画像が&lt;br /&gt;
  そのまま送られていました(実測: 10,231枚・819MBのうち、&lt;br /&gt;
  800pxより大きい画像が4,500枚・562MB)。&lt;br /&gt;
  大きさを書けばMediaWikiが縮小版を作り、しかも&lt;br /&gt;
  画面のこまかさ(1倍/1.5倍/2倍)に合わせて自動で選んでくれます。&lt;br /&gt;
  実測では1枚117KB → 22〜67KBになりました。&lt;br /&gt;
&lt;br /&gt;
  記事を1本ずつ直すのは現実的ではないので、&lt;br /&gt;
  テンプレート側で一度だけ通せば全記事に効くようにしています。&lt;br /&gt;
&lt;br /&gt;
つかいかた(テンプレートの中で):&lt;br /&gt;
  {{#invoke:画像サイズ|fit|{{{画像|}}}}}&lt;br /&gt;
  大きさを変えたいとき:&lt;br /&gt;
  {{#invoke:画像サイズ|fit|{{{画像|}}}|px=250}}&lt;br /&gt;
&lt;br /&gt;
さわらないもの(そのまま素通しします):&lt;br /&gt;
  ・すでに 250px / x200px / upright などの大きさ指定があるもの&lt;br /&gt;
  ・thumb や サムネイル が書かれているもの(MediaWikiが既に縮めているため)&lt;br /&gt;
  ・ファイル以外のリンク&lt;br /&gt;
  ・テンプレート({{...}})やHTMLタグが混ざっているもの&lt;br /&gt;
  ・空っぽのもの&lt;br /&gt;
&lt;br /&gt;
注意: この説明文の中に [[ ]] が出てくるため、&lt;br /&gt;
      コメントの囲みは --[[ ではなく --[==[ を使っています。&lt;br /&gt;
--]==]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- 既定の幅(px)。インフォボックスの実測表示幅(PC 359px / スマホ 334px)に合わせる。&lt;br /&gt;
local DEFAULT_PX = 360&lt;br /&gt;
&lt;br /&gt;
-- 「ファイル」を表す名前空間の書き方(小文字にして比べる)&lt;br /&gt;
local FILE_NS = {&lt;br /&gt;
	[&amp;#039;ファイル&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;file&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;画像&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;image&amp;#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- 画像として扱う拡張子(ファイル名だけが書かれていた場合の判定用)&lt;br /&gt;
local IMAGE_EXT = {&lt;br /&gt;
	jpg = true, jpeg = true, png = true, gif = true, webp = true, svg = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- thumb / frame などが書かれている画像は、MediaWiki が&lt;br /&gt;
-- もともと既定の大きさ(220pxなど)に縮めてくれるので、&lt;br /&gt;
-- こちらから px を足すとかえって大きくなってしまう。さわらない。&lt;br /&gt;
local ALREADY_SIZED = {&lt;br /&gt;
	thumb = true,&lt;br /&gt;
	thumbnail = true,&lt;br /&gt;
	frameless = true,&lt;br /&gt;
	frame = true,&lt;br /&gt;
	[&amp;#039;サムネイル&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;枠なし&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;枠&amp;#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- その値が「大きさの指定」かどうか&lt;br /&gt;
local function isSize( s )&lt;br /&gt;
	s = mw.text.trim( s )&lt;br /&gt;
	local lower = mw.ustring.lower( s )&lt;br /&gt;
	if lower:match( &amp;#039;^%d+%s*px$&amp;#039; ) then return true end&lt;br /&gt;
	if lower:match( &amp;#039;^x%d+%s*px$&amp;#039; ) then return true end&lt;br /&gt;
	if lower:match( &amp;#039;^%d+%s*x%s*%d+%s*px$&amp;#039; ) then return true end&lt;br /&gt;
	if lower:match( &amp;#039;^upright&amp;#039; ) then return true end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- [[...]] の中身を受け取り、必要なら大きさを足して返す。&lt;br /&gt;
-- 足す必要がなければ nil を返す(= 呼び出し元はもとのまま残す)。&lt;br /&gt;
local function fixInner( inner, px )&lt;br /&gt;
	local parts = mw.text.split( inner, &amp;#039;|&amp;#039;, true )&lt;br /&gt;
	local target = mw.text.trim( parts[ 1 ] )&lt;br /&gt;
&lt;br /&gt;
	-- 先頭の「ファイル:」を確認する。無ければ画像リンクではない。&lt;br /&gt;
	local ns = target:match( &amp;#039;^([^:]+):&amp;#039; )&lt;br /&gt;
	if not ns then return nil end&lt;br /&gt;
	if not FILE_NS[ mw.ustring.lower( mw.text.trim( ns ) ) ] then return nil end&lt;br /&gt;
&lt;br /&gt;
	-- すでに大きさが書かれている、または thumb などで&lt;br /&gt;
	-- MediaWiki が自動で縮めてくれるものは、何もしない&lt;br /&gt;
	for i = 2, #parts do&lt;br /&gt;
		local v = mw.ustring.lower( mw.text.trim( parts[ i ] ) )&lt;br /&gt;
		if isSize( v ) or ALREADY_SIZED[ v ] then return nil end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert( parts, 2, px .. &amp;#039;px&amp;#039; )&lt;br /&gt;
	return &amp;#039;[[&amp;#039; .. table.concat( parts, &amp;#039;|&amp;#039; ) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 本体&lt;br /&gt;
function p._fit( text, px )&lt;br /&gt;
	if text == nil then return &amp;#039;&amp;#039; end&lt;br /&gt;
	text = mw.text.trim( text )&lt;br /&gt;
	if text == &amp;#039;&amp;#039; then return &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
	px = tonumber( px ) or DEFAULT_PX&lt;br /&gt;
	if px &amp;lt; 40 or px &amp;gt; 2000 then px = DEFAULT_PX end&lt;br /&gt;
&lt;br /&gt;
	-- テンプレートやHTMLが混ざっているものは、こわす危険があるのでさわらない&lt;br /&gt;
	if text:find( &amp;#039;{{&amp;#039;, 1, true ) or text:find( &amp;#039;&amp;lt;&amp;#039;, 1, true ) then&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- (1) [[ファイル:...]] の形&lt;br /&gt;
	if text:find( &amp;#039;[[&amp;#039;, 1, true ) then&lt;br /&gt;
		local changed = false&lt;br /&gt;
		local out = text:gsub( &amp;#039;%[%[([^%[%]]-)%]%]&amp;#039;, function( inner )&lt;br /&gt;
			local fixed = fixInner( inner, px )&lt;br /&gt;
			if fixed then&lt;br /&gt;
				changed = true&lt;br /&gt;
				return fixed&lt;br /&gt;
			end&lt;br /&gt;
			return nil -- そのまま&lt;br /&gt;
		end )&lt;br /&gt;
		return changed and out or text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- (2) ファイル名だけが書かれている形 (例: れじぇくん.jpg)&lt;br /&gt;
	if not text:find( &amp;#039;|&amp;#039;, 1, true ) and not text:find( &amp;#039;]&amp;#039;, 1, true ) then&lt;br /&gt;
		local ext = text:match( &amp;#039;%.([%a%d]+)$&amp;#039; )&lt;br /&gt;
		if ext and IMAGE_EXT[ mw.ustring.lower( ext ) ] then&lt;br /&gt;
			return &amp;#039;[[ファイル:&amp;#039; .. text .. &amp;#039;|&amp;#039; .. px .. &amp;#039;px]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.fit( frame )&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	return p._fit( args[ 1 ], args.px or args[ 2 ] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rememberme</name></author>
	</entry>
</feed>