2023/10/26(木) [n年前の日記]
#1 [gimp] GIMPを使ってWindows用のマルチアイコンファイルを作ってみたい
GIMPを使って、Windows用のマルチアイコンファイルを作ってみたい。環境は、Windows10 x64 22H2 + GIMP 2.10.34 Portable。
マルチアイコンファイルというのは、1つの .ico ファイルの中に、複数のサイズ、複数のカラーモードのアイコンが入っているアイコンファイルのこと。
Windowsの場合、一般的には…。
マルチアイコンファイルというのは、1つの .ico ファイルの中に、複数のサイズ、複数のカラーモードのアイコンが入っているアイコンファイルのこと。
Windowsの場合、一般的には…。
- 16x16, 32,32, 48x48 のアイコンサイズ。
- 4bitカラー(16色), 8bitカラー(256色), 32bitカラー(24bitカラー + 8bitアルファチャンネル)
◎ 専用のスクリプトを導入 :
GIMPでそんな作業はできるのかなと調べてみたら、1枚の画像を元にして自動で縮小してマルチアイコンファイル用の画像を作ってくれる Script-Fu もあると知った。iconify2_1.scm というのがソレ。
_registry.gimp.org_static/registry.gimp.org/files/iconify2_1.scm at master - pixlsus/registry.gimp.org_static
上記ページの「Raw」と書かれたリンクを右クリックして保存すれば入手できる。
導入すると、Script-Fu → Utils → Iconify という項目が増える。
何か1枚画像を用意して、このスクリプトを実行すれば、自動で縮小して、16x16, 32x32, 48x48 のサイズになったレイヤーを作成してくれる。また、256色、16色(15色) に減色したレイヤーも作ってくれる。
ただ、処理をする前に、AutoCrop (内容で切り抜き) も実行してしまうので、元画像の周辺から必要な部分まで勝手に削除されてしまう時がある。61行目近辺の、plug-in-autocrop-layer と書かれた行をコメントアウトしておいたほうがいいと思う。
_registry.gimp.org_static/registry.gimp.org/files/iconify2_1.scm at master - pixlsus/registry.gimp.org_static
上記ページの「Raw」と書かれたリンクを右クリックして保存すれば入手できる。
導入すると、Script-Fu → Utils → Iconify という項目が増える。
何か1枚画像を用意して、このスクリプトを実行すれば、自動で縮小して、16x16, 32x32, 48x48 のサイズになったレイヤーを作成してくれる。また、256色、16色(15色) に減色したレイヤーも作ってくれる。
ただ、処理をする前に、AutoCrop (内容で切り抜き) も実行してしまうので、元画像の周辺から必要な部分まで勝手に削除されてしまう時がある。61行目近辺の、plug-in-autocrop-layer と書かれた行をコメントアウトしておいたほうがいいと思う。
; Autocrop the layer (plug-in-autocrop-layer 1 new-img work-layer) ↓ ; Autocrop the layer ; (plug-in-autocrop-layer 1 new-img work-layer)
◎ 試してみる :
まずは 256x256、32bitカラーの画像を用意する。
Script-Fu → Utils → Iconify を選択して実行。
画像サイズが異なっているレイヤーが複数作られた。48x48, 32x32, 16x16 のサイズで、32bitカラー, 8bitカラー(256色), 4bitカラー(15色) が作られている。
icoファイルとして保存する。ファイル → 名前をつけてエクスポート。
ファイル名の拡張子を「.ico」にしてエクスポート。
icoファイルに同梱したいサイズ/カラーモードを選択して保存できるので、これでマルチアイコンファイルが作れる。
Script-Fu → Utils → Iconify を選択して実行。
画像サイズが異なっているレイヤーが複数作られた。48x48, 32x32, 16x16 のサイズで、32bitカラー, 8bitカラー(256色), 4bitカラー(15色) が作られている。
icoファイルとして保存する。ファイル → 名前をつけてエクスポート。
ファイル名の拡張子を「.ico」にしてエクスポート。
icoファイルに同梱したいサイズ/カラーモードを選択して保存できるので、これでマルチアイコンファイルが作れる。
◎ 実は使わないほうがいい :
ここまで書いておいてなんだけど。実は、GIMP を使ってマルチアイコンファイルを保存するのはおススメしない…。
というのも、おそらくは GIMP の減色処理の品質が悪くて、縮小して作られた画像のうち、減色された画像群の結果が妙なことになってたりするので…。以下のスクリーンショットを見れば、なんとなく分かるだろうか…。
ところどころに謎の透明なドットが入ってしまっている。どうしてこんなことになるのやら。
というのも、おそらくは GIMP の減色処理の品質が悪くて、縮小して作られた画像のうち、減色された画像群の結果が妙なことになってたりするので…。以下のスクリーンショットを見れば、なんとなく分かるだろうか…。
ところどころに謎の透明なドットが入ってしまっている。どうしてこんなことになるのやら。
◎ オススメのツール :
GIMP を使ってマルチアイコンファイルを作ると、前述のようにちょっとよろしくない結果の画像が作られてしまうので、アイコン作成に特化したツールを使ったほうがいいだろうなと。Windows用なら以下のツールが個人的にはオススメ。
_IcoFX Portable (icon editor) | PortableApps.com
_「Greenfish Icon Editor Pro」多機能なアイコン・カーソル作成ソフト - 窓の杜
_Greenfish Icon Editor Pro 4.2 - Official Website
どちらも、1枚の画像(256x256, 32bitカラー)から、自動でマルチアイコンファイルを作れるし、GIMP のようにおかしなドットが入ってしまうこともない。
あるいは以下のまとめが参考になりそう。
_おすすめのアイコン作成ソフト - k本的に無料ソフト・フリーソフト
ToYcon を試用してみたけれど、そちらもイイ感じだった。ただ、4bitカラー(16色)のアイコンが、Windowsのアイコン仕様に合ってない気も…。たしか4bitカラー利用時は、使える色が決め打ちされていたはず。
_MICROSOFT VGA Palette
ToYcon で4bitカラーのアイコンを作らせると、見た目は奇麗だけど独自のパレット色になってしまっていたので、実際には4bitカラーモードで使えないアイコンファイルが作られてしまっている可能性が高そう。もっとも、今時そんなカラーモードでWindowsを使う場面は無さそうだし、実用上は問題無いのかもしれない。
_IcoFX Portable (icon editor) | PortableApps.com
_「Greenfish Icon Editor Pro」多機能なアイコン・カーソル作成ソフト - 窓の杜
_Greenfish Icon Editor Pro 4.2 - Official Website
どちらも、1枚の画像(256x256, 32bitカラー)から、自動でマルチアイコンファイルを作れるし、GIMP のようにおかしなドットが入ってしまうこともない。
- IcoFX Portable の場合、ウインドウ内に元画像をドラッグアンドドロップで読み込ませてから、アイコン → イメージからWindowsアイコンを作成、を選ぶ。
- Greenfish Icon Editor Pro の場合、256x256, 32bitカラーの画像を1枚描いてから、アイコン → イメージからWindows用のアイコンを作成、を選ぶ。
あるいは以下のまとめが参考になりそう。
_おすすめのアイコン作成ソフト - k本的に無料ソフト・フリーソフト
ToYcon を試用してみたけれど、そちらもイイ感じだった。ただ、4bitカラー(16色)のアイコンが、Windowsのアイコン仕様に合ってない気も…。たしか4bitカラー利用時は、使える色が決め打ちされていたはず。
_MICROSOFT VGA Palette
ToYcon で4bitカラーのアイコンを作らせると、見た目は奇麗だけど独自のパレット色になってしまっていたので、実際には4bitカラーモードで使えないアイコンファイルが作られてしまっている可能性が高そう。もっとも、今時そんなカラーモードでWindowsを使う場面は無さそうだし、実用上は問題無いのかもしれない。
[ ツッコむ ]
#2 [hsp] mp3しかサポートしてないゲーム制作ライブラリはよろしくない
HSP の hsp3dish のドキュメントを眺めていたら、サウンド再生については「wav と mp3 のみ対応」と書いてあって、「いやー、それはよろしくないなあ…」と思ってしまった。
wav と ogg にしか対応してないというなら全然分かる。でも、mp3 は良くない。
もっとも、そのあたり調べてみたら…。
_HSP3備忘録
_oggファイルの読み込み - HSPTV!掲示板
_HSP3.7 新機能ハイライト
wav と ogg にしか対応してないというなら全然分かる。でも、mp3 は良くない。
もっとも、そのあたり調べてみたら…。
- そもそも HSP 界隈は ovplay.dll という .dll を利用して ogg再生するのが定番だった。
- hsp3dish も、HSP 3.7 からは hspogg.dll を使って ogg を利用できる旨がドキュメントに書いてある。
- そもそも hspogg.dll は結構昔から同梱されていた。不安定な部分があって、他のdllが使われることが多かったようではあるけど…。
_HSP3備忘録
_oggファイルの読み込み - HSPTV!掲示板
_HSP3.7 新機能ハイライト
◎ mp3は良くない :
せっかくだから、mp3が良くない理由もメモ。と言っても、mp3はギャップレス再生が難しいという、ただそれだけの話なのだけど。
mp3 って、元々は映像の音声部分を担当させるために作られた規格/音声フォーマットなので、映像のフレーム単位で時間情報が記録されているそうで。音声の長さがフレーム単位でキリのいい長さになってない場合、最初や最後にギャップ(無音部分)が入ってしまうので、ループ再生したり、再生終了と同時に別のmp3を再生したりすると、境目で「ブツッ」とノイズが入る。規格からしてそうなってるので仕方ない話なのだけど、ループしたり、曲が切り替わるたびに「ブツッ」とノイズが入ったら…ねえ…。かなり萎えますわな…。
だから、ゲーム制作ライブラリの類で「圧縮音声フォーマットはmp3のみ対応」なんて言われちゃうと困ってしまう。ギャップレス再生ができないファイル形式しか使えませんとかなんだソレ、どんな糞仕様だよ、という話に…。
その点、ogg なら、最初からちゃんと音声フォーマットとして規格が作られているので、サンプル数もちゃんと記録されてるし、再生処理がしっかり作ってあるならギャップレス再生だってできるわけで。
と言っても、Ruby + Gosu のようにoggすらちゃんとループ再生できない糞みたいなゲーム制作ライブラリも稀に存在するけれど…。アレは SDL が腐ってるんだろうか? まあ、Gosuの件は横に置いておくとして…。
そんなわけで、ogg はサポートしてるけど mp3 はサポートしてません、ということなら納得できるのだけど。逆はダメだよなと…。
mp3 って、元々は映像の音声部分を担当させるために作られた規格/音声フォーマットなので、映像のフレーム単位で時間情報が記録されているそうで。音声の長さがフレーム単位でキリのいい長さになってない場合、最初や最後にギャップ(無音部分)が入ってしまうので、ループ再生したり、再生終了と同時に別のmp3を再生したりすると、境目で「ブツッ」とノイズが入る。規格からしてそうなってるので仕方ない話なのだけど、ループしたり、曲が切り替わるたびに「ブツッ」とノイズが入ったら…ねえ…。かなり萎えますわな…。
だから、ゲーム制作ライブラリの類で「圧縮音声フォーマットはmp3のみ対応」なんて言われちゃうと困ってしまう。ギャップレス再生ができないファイル形式しか使えませんとかなんだソレ、どんな糞仕様だよ、という話に…。
その点、ogg なら、最初からちゃんと音声フォーマットとして規格が作られているので、サンプル数もちゃんと記録されてるし、再生処理がしっかり作ってあるならギャップレス再生だってできるわけで。
と言っても、Ruby + Gosu のようにoggすらちゃんとループ再生できない糞みたいなゲーム制作ライブラリも稀に存在するけれど…。アレは SDL が腐ってるんだろうか? まあ、Gosuの件は横に置いておくとして…。
そんなわけで、ogg はサポートしてるけど mp3 はサポートしてません、ということなら納得できるのだけど。逆はダメだよなと…。
◎ mp3でギャップレス再生できる事例 :
ちなみに、さすがにこれだけ mp3 が普及してしまうと、ギャップレス再生できないのはさすがにあかんやろ、ということで解決策も出てきて…。
mp3に変換するエンコーダ側で本来の音声の長さを mp3ファイルのどこかに独自情報として埋め込んでおいて、対応してるデコーダ側はその情報を読み取ってギャップレス再生させる、といったことも可能だそうで。mp3エンコーダとしてメジャーな LAME はそういう情報を埋め込んであると聞いた記憶が…。mp3をギャップレス再生できるソフトウェアは、そういった一手間を加えた実装になってるわけで。
もっとも、どのエンコーダが、どういう情報を、どこに記録してるのかが分からなければ、デコーダ側だって対応のしようがないし。
あるいは、エンコーダとデコーダが一体になってるアプリなら、「このアプリを使った時だけギャップレス再生ができます。他は知らんがな」となっちゃうし。 *1
だから、「mp3の再生に対応」と言われても、「それってどこまで対応してるの?」と不安になってしまう。そんなわけで、個人的には mp3 って嫌いなのでした。いやまあ、昔、mp3をループ再生させることになって苦労したからなのだけど…。
まあ、ループ再生できないならできないで、その旨最初からどこかに書いてあれば、それはそれでOKかなとも思うのですが。
例えば昔のPCエンジンのCD-ROMゲームはCD-DAでBGMを流したりしていたけれど、当時は奇麗に繋がるループ再生なんてできなかったから、曲の最初と最後が全然繋がってないBGMを作って済ませてた。状況さえ分かってれば、そのように逃げ道(?)はあるので…。できそうな感じで期待させておいて実はできないというパターンが一番困る…。できないなら「できない」と書いておいてほしい…。
mp3に変換するエンコーダ側で本来の音声の長さを mp3ファイルのどこかに独自情報として埋め込んでおいて、対応してるデコーダ側はその情報を読み取ってギャップレス再生させる、といったことも可能だそうで。mp3エンコーダとしてメジャーな LAME はそういう情報を埋め込んであると聞いた記憶が…。mp3をギャップレス再生できるソフトウェアは、そういった一手間を加えた実装になってるわけで。
もっとも、どのエンコーダが、どういう情報を、どこに記録してるのかが分からなければ、デコーダ側だって対応のしようがないし。
あるいは、エンコーダとデコーダが一体になってるアプリなら、「このアプリを使った時だけギャップレス再生ができます。他は知らんがな」となっちゃうし。 *1
だから、「mp3の再生に対応」と言われても、「それってどこまで対応してるの?」と不安になってしまう。そんなわけで、個人的には mp3 って嫌いなのでした。いやまあ、昔、mp3をループ再生させることになって苦労したからなのだけど…。
まあ、ループ再生できないならできないで、その旨最初からどこかに書いてあれば、それはそれでOKかなとも思うのですが。
例えば昔のPCエンジンのCD-ROMゲームはCD-DAでBGMを流したりしていたけれど、当時は奇麗に繋がるループ再生なんてできなかったから、曲の最初と最後が全然繋がってないBGMを作って済ませてた。状況さえ分かってれば、そのように逃げ道(?)はあるので…。できそうな感じで期待させておいて実はできないというパターンが一番困る…。できないなら「できない」と書いておいてほしい…。
*1: 昔の Adobe Flash がそんな感じの実装だった。LAME でエンコードしたmp3を再生させるとギャップレス再生できないけれど、Flash自身にwavを渡してmp3に変換、かつ .swf に内包して再生させると、ちゃんとギャップレス再生ができた。「このアプリで全部やる分には、ソレってできますよ。え? 他のソフトが変換したmp3? そんなもん知るか」みたいな。もっとも、後に LAME でエンコードしたmp3もギャップレス再生できるようになった記憶もあるけれど。アレは Flashプラグイン側が対応したのか、それとも LAME側が対応したのか、どっちなんだろう。
[ ツッコむ ]
以上、1 日分です。