【Unity】画像データを外部ライブラリ無しでリサイズする方法
2024年1月21日
はじめに
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に読み込んだり利用してください。