2020/01/21(火) [n年前の日記]
#1 [love2d] Love2Dがサポートしてる画像フォーマットについて
調べてみたら、Love2D はそもそも gif をサポートしてなかった…。Love2D 0.10.0 の時点で、対応画像フォーマットを絞っていたらしい。
_0.10.0 (日本語) - LOVE
_0.10.0 - LOVE
道理で、gif をドロップしても「そんなフォーマット知らねえよ」と言われたわけで。
コミュニティの掲示板でも、「gifを表示したいんですけど…」「はあ? あんなクソ画像フォーマット使ってんじゃねえよ。png使え」みたいなやり取りが。
_GIFs in love? - LOVE
もっとも、gifに対応させるライブラリをガリガリと書き上げた方もいらっしゃるようで…。
_pgimeno/gifload: Love2D module to load GIF files, in pure LuaJIT+FFI - Keywords: library gif love2d - NotABug.org: Free code hosting
_gifload, a GIF image loader in pure LuaJIT+FFI - LOVE
また、Love2D から画像を保存する場合は、pngのみに対応、とのことらしい。
_What image files are supported on LOVE? - LOVE
 _0.10.0 (日本語) - LOVE
_0.10.0 - LOVE
PNG, JPEG, TGA, および BMP を除くすべてのファイル形式 (非圧縮テクスチャ) への対応を廃止。つまり、使えるのは、この4種類。gif には未対応。
道理で、gif をドロップしても「そんなフォーマット知らねえよ」と言われたわけで。
コミュニティの掲示板でも、「gifを表示したいんですけど…」「はあ? あんなクソ画像フォーマット使ってんじゃねえよ。png使え」みたいなやり取りが。
_GIFs in love? - LOVE
もっとも、gifに対応させるライブラリをガリガリと書き上げた方もいらっしゃるようで…。
_pgimeno/gifload: Love2D module to load GIF files, in pure LuaJIT+FFI - Keywords: library gif love2d - NotABug.org: Free code hosting
_gifload, a GIF image loader in pure LuaJIT+FFI - LOVE
また、Love2D から画像を保存する場合は、pngのみに対応、とのことらしい。
_What image files are supported on LOVE? - LOVE
◎ 昨日のソースを修正。 :
画像ファイルのパスを渡すと Image で返す関数、にしてみた。前述の、4種類の画像フォーマットに対応してみたつもり。動作確認環境は、Windows10 x64 1909 + Love2D 11.3。
拡張子の判別は、渡したファイルパスの最後の4文字だけをチェックしている手抜き処理なので、「.jpg」は開けるけど、「.jpeg」は開けない。
Lua の文字列用関数についても、一応メモ。
function loadImage(fpath)
  -- Support : png, jpg, bmp, tga
  -- Not support : gif, tif
  local ext = string.lower(string.sub(fpath, string.len(fpath) - 3))
  if ext == ".png" or ext == ".bmp" or ext == ".jpg" or ext == ".tga" then
    local f = io.open(fpath, "rb")
    local contents = f:read("*all")
    local data = love.filesystem.newFileData(contents, "temp" .. ext)
    local imgdata = love.image.newImageData(data)
    f:close()
    return love.graphics.newImage(imgdata), ext
  end
  return nil, ext
end
 Image と、拡張子の文字列(".png"等)を返すけれど、未対応の画像フォーマットを渡したり、何か問題があって読み込めない場合は、Image として nil が返ってくる。拡張子の判別は、渡したファイルパスの最後の4文字だけをチェックしている手抜き処理なので、「.jpg」は開けるけど、「.jpeg」は開けない。
Lua の文字列用関数についても、一応メモ。
- string.len("hoge") で、文字列の長さを返す。
- string.sub("hoge", n) で、n文字目から最後までの文字列を取り出す。
- string.lower("HOGE") で、文字列を小文字に変換。
- 「..」で、文字列を結合。
> lua -i
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> string.len("hoge")
4
> string.sub("hoge", 2)
oge
> string.sub("hoge", 3)
ge
> string.sub("hoge", 4)
e
> string.lower("HOGE")
hoge
> "hoge" .. "fuga"
hogefuga
◎ ファイル選択ダイアログについて。 :
ググっていたら、FFIなるものを使って、Love2D からファイル選択ダイアログを利用することができていた時期もあるらしい。
_File chooser dialogs with FFI - LOVE
_Foreign function interface - Wikipedia
ただ、各OS向けに記述が必要になるし、昔は動いてた Windows用の記述が Windows10 では動かなくなった、との報告もされていた。
_File chooser dialogs with FFI - LOVE
_Foreign function interface - Wikipedia
ただ、各OS向けに記述が必要になるし、昔は動いてた Windows用の記述が Windows10 では動かなくなった、との報告もされていた。
[   ツッコむ ]
以上です。