赞
踩
只是简单的把图片的maxTextureSize设置成它本身的最大值还大的下一个
using BehaviorDesigner.Runtime.Tasks.Unity.UnityBoxCollider; using DG.Tweening.Plugins.Core.PathCore; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using UnityEditor; public class PictureCompress: Editor { [MenuItem("UITools/选中的文件内图片压缩")] static void PictureCompressFunc() { string[] assetGUIDArray = Selection.assetGUIDs; string assetPath = AssetDatabase.GUIDToAssetPath(assetGUIDArray[0]); string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG"; string[] ImageType = imgtype.Split('|'); for (int i = 0; i < ImageType.Length; i++) { string[] dirs = Directory.GetFiles(assetPath, ImageType[i], SearchOption.AllDirectories); for (int j = 0; j < dirs.Length; j++) { var path = dirs[j]; TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter; int width = 0; int height = 0; GetTextureOriginalSize(textureImporter, out width, out height); if (width > textureImporter.maxTextureSize || height > textureImporter.maxTextureSize) { continue; } else { SetSize(width, height, textureImporter); } } } MyLog.DevLog("执行完毕!"); } private static void SetSize(int width, int height, TextureImporter textureImporter) { int max = width > height ? width : height; int[] size_r = { 32, 64, 128, 256, 512, 1024, 2048 }; TextureImporterPlatformSettings settingAndroid = textureImporter.GetPlatformTextureSettings("Android"); settingAndroid.overridden = true; if (settingAndroid.maxTextureSize < max) return; for (int i = 0; i < size_r.Length; i++) { if (size_r[i] > max) { settingAndroid.maxTextureSize = size_r[i]; //MyLog.DevLog("settingAndroid.maxTextureSize11111111", settingAndroid.maxTextureSize); textureImporter.SetPlatformTextureSettings(settingAndroid); return; } } settingAndroid.maxTextureSize = size_r[size_r.Length - 1]; textureImporter.SetPlatformTextureSettings(settingAndroid); //MyLog.DevLog("settingAndroid.maxTextureSize2222222", settingAndroid.maxTextureSize); } public static void GetTextureOriginalSize(TextureImporter ti, out int width, out int height) { if (ti == null) { width = 0; height = 0; return; } object[] args = new object[2] { 0, 0 }; MethodInfo mi = typeof(TextureImporter).GetMethod("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance); mi.Invoke(ti, args); width = (int)args[0]; height = (int)args[1]; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。