Toma(とま)のゲーム日記

MHNOW、MHWIB、ELDEN RING、WILD HEARTSなどの役立ち情報をアップしていきます。ツイッターでの懸賞応募、自炊、家庭菜園といろいろ始めました。

記事内に商品プロモーションを含む場合があります。

LINEスタンプ規格に挑む!PythonによるAPNG作成と容量制限の壁(実はクリアしてた💦)

こんにちは、Tomaです。今回はPythonを使って、手持ちのイラスト素材からLINEアニメーションスタンプ規格のAPNGを作成する方法を解説します。

自作プログラムでスタンプを作る際、避けて通れないのが「厳しい容量制限」との戦いです。実際にコードを動かしながら、その挙動を検証してみました。

 

第1章:LINEアニメーションスタンプの制約条件

LINEスタンプとして登録するためには、以下の条件をクリアする必要があります。個人で作成する際も、この数値を意識するのがベストです。

  • 再生時間:1~4秒
  • フレーム数:5~20枚(奇数推奨)
  • ファイル容量:1個あたり300KB以下、1MB以下(訂正します💦)

今回は「1→2→1→2→1」の5枚構成、再生時間3秒(200ms×5枚×3ループ)という、規格にジャストフィットする設定で作成しました。

第2章:環境構築とディレクトリ構成

このプログラムを動かすには、画像処理ライブラリのPillowが必要です。以下のコマンドを実行してインストールしてください。

pip install Pillow 

作業ディレクトリの状態は、以下のようになります。画像ファイルと実行スクリプトを同じフォルダに置いてください。

Project/
├── anime_Pillow.py       # 実行スクリプト
├── 01.png                # 元画像(118KB)
├── 02.png                # 元画像(131KB)
└── loop_animation.png    # 生成されるAPNG

第3章:実装コード (anime_Pillow.py)

まずは基本となる書き出しコードです。元画像は「01.png」「02.png」の2枚を使用します。

汗をかきながら杖を持つ、目を開けたちび巫女の静止画(1.png) 汗をかきながら杖を持つ、目を閉じたちび巫女の静止画(2.png)

from PIL import Image

# 画像の読み込み(透過を維持するためにRGBAへ変換)
img1 = Image.open('01.png').convert('RGBA')
img2 = Image.open('02.png').convert('RGBA')

# 1->2->1->2->1 の5枚構成でリストを作成
frames = [img1, img2, img1, img2, img1]

# APNGとして保存
frames[0].save(
    'loop_animation.png',
    save_all=True,
    append_images=frames[1:],
    duration=200,
    loop=3
)

print("作成完了!") 

第4章:サイズ削減!最適化オプション適用版

標準設定では611KBだったファイルサイズを削減するため、optimize=Trueを追加した改善版コードがこちらです。

from PIL import Image

img1 = Image.open('01.png').convert('RGBA')
img2 = Image.open('02.png').convert('RGBA')
frames = [img1, img2, img1, img2, img1]

# 保存時に最適化オプションを追加
frames[0].save(
    'loop_animation_optimized.png',
    save_all=True,
    append_images=frames[1:],
    duration=200,
    loop=3,
    optimize=True  # これで495KBまで削減!
)

print("最適化版の作成完了!") 

まとめ:ファイルサイズ増大の謎と次なる一歩

結果として、495KBまで削減できましたが、元画像2枚の合計(249KB)より大きく、LINEの300KB制限にはまだ一歩及びませんでした。Pillowの標準機能だけでは、フレーム間の差分抽出に限界があるようです。

PythonのPillowライブラリを使用したAPNG作成のインフォグラフィック。2枚の静止画から、1→2→1→2→1のフレームシーケンス、実装コード、およびLINEスタンプ規格との比較(容量、再生時間、フレーム数)をツリー形状でまとめた図。

ここから先は「減色処理」や「外部ツールとの連携」が必要になりそうです。完璧なスタンプ作成を目指して、研究を続けていきます!

追記:実はLINEアニメーションスタンプは1MB以下に現在はなっています。古い資料を見たようで大変申し訳ありません。ですが、軽量化の話は続けていきます。

【AI利用に関する開示】当ブログの一部コンテンツには、AI(人工知能)による執筆支援や画像生成を使用しています。