[MenuItem("Assets/图片压缩1")]
public static void CompressTexture()
{
if (!(Selection.objects[0] as Texture2D)) return;
Texture2D source = Selection.objects[0] as Texture2D;
int targetWidth = source.width / 10;
int targetHeight = source.height / 10;
if (source.width == 750&&source.height == 1334)
{
targetWidth = 72;
targetHeight = 128;
}
Debug.Log($"targetWidth = {targetWidth},targetHeight = {targetHeight}");
Texture2D result = new Texture2D(targetWidth, targetHeight, source.format, true);
Color[] rpixels = result.GetPixels(0);
float incX = ((float)1 / source.width) * ((float)source.width / targetWidth);
float incY = ((float)1 / source.height) * ((float)source.height / targetHeight);
for (int px = 0; px < rpixels.Length; px++)
{
rpixels[px] = source.GetPixelBilinear(incX * ((float)px % targetWidth), incY * ((float)Mathf.Floor(px / targetWidth)));
}
result.SetPixels(rpixels, 0);
result.Apply();
//保存图片
byte[] dataBytes = result.EncodeToPNG();
string savePath = "Assets/GameRes/src/ui/atlas/lod/" + source.name + "_lod.png";
FileStream fileStream = File.Open(savePath, FileMode.OpenOrCreate);
fileStream.Write(dataBytes, 0, dataBytes.Length);
fileStream.Close();
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
}
[MenuItem("Assets/图片压缩2")]
public static void CompressTexture()
{
if (!(Selection.objects[0] as Texture2D)) return;
Texture2D source = Selection.objects[0] as Texture2D;
string path = AssetDatabase.GetAssetPath(source);
string savepath = "Assets/GameRes/src/ui/atlas/lod/" + source.name + "_lod.png";
var image = System.Drawing.Image.FromFile(path);
int targetWidth = source.width / 10;
int targetHeight = source.height / 10;
if (source.width == 750 && source.height == 1334)
{
targetWidth = 72;
targetHeight = 128;
}
System.Drawing.Bitmap bitmap = new(image, targetWidth, targetHeight);
bitmap.Save(savepath);
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
AssetImporter.GetAtPath(savepath).SaveAndReimport();//图片重新导入
UnityEditor.AssetDatabase.SaveAssets();
UnityEditor.AssetDatabase.Refresh();
string altasPath = "Assets/GameRes/rest/texture/ui/atlas/lodatlas.spriteatlas";
//图集重新生成
SpriteAtlasUtility.PackAtlases(new UnityEngine.U2D.SpriteAtlas[]{ AssetDatabase.LoadAssetAtPath<UnityEngine.U2D.SpriteAtlas>(altasPath) }, EditorUserBuildSettings.activeBuildTarget);
AssetBundlePacker.BuildByPath(altasPath);
UnityEditor.AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}