【Unity】画像データを外部ライブラリ無しでリサイズする方法

はじめに

Unityで画像ファイルのリサイズするコードを書いたので備忘のため残しておきます。
Windowsのみであれば他の書き方もありますが、Android/iOSでも共通のコードでリサイズできます。

サンプルコード

private byte[] ImageResize(byte[] originalImage, int newWidth, int newHeight)
{
    var originalTexture = new Texture2D(2, 2);
    originalTexture.LoadImage(originalImage);
        
    // リサイズしたテクスチャを新しいRenderTextureに描画
    var backupRt = RenderTexture.active;
    var resizedRenderTexture = RenderTexture.GetTemporary(newWidth, newHeight);
    RenderTexture.active = resizedRenderTexture;

    Graphics.Blit(originalTexture, resizedRenderTexture);

    // リサイズされたテクスチャをTexture2Dにコピー
    var resizedTexture = new Texture2D(newWidth, newHeight);
    resizedTexture.ReadPixels(new Rect(0, 0, newWidth, newHeight), 0, 0);
    resizedTexture.Apply();

    RenderTexture.active = backupRt;
    RenderTexture.ReleaseTemporary(resizedRenderTexture);

    // JPEGバイト配列を取得
    var resizedJpegData = resizedTexture.EncodeToJPG(100);

    // メモリ解放
    Destroy(originalTexture);
    Destroy(resizedTexture);
        
    return resizedJpegData;
}

簡単な解説

originalImageには、画像ファイル(PNG/JPEG)のバイト配列を渡します。
newWidth, newHeight は、変更後の画像の縦横ピクセル数です。
戻り値でJPEGバイト配列を取得できますので、ファイルに保存したりRawImageに読み込んだり利用してください。

SNSで共有
kobayu
  • kobayu
  • 当サイトの管理人です。
    仕事でアプリ開発やWebサイト開発やサーバーサイドの開発をやってます。
    Twitter: @kobayu_777