【unity】批量剔除圖片四周空白像素的工具

摘要:Unity圖片空白像素批量處理工具
該工具提供兩種方式批量剔除圖片空白像素:

靜態處理類:提供TrimTexture方法,可讀取紋理像素數據,計算非透明區域邊界,生成裁剪后的新紋理;SaveTexture方法保存處理結果。
編輯器窗口:通過"Tools/UI"菜單打開窗口,支持多選PNG圖片后批量處理。主要流程包括:加載選中項→分析像素邊界→裁剪保存→恢復原始設置。處理時臨時修改紋理為可讀狀態,完成后自動刷新資源庫并統計成功數量。適用于UI圖片資源優化,需在Unity編輯器環境下使用。

using UnityEditor;
using UnityEngine;
using System.IO;public static class ImageTrimmerHandle
{public static Texture2D TrimTexture(Texture2D sourceTexture){if (sourceTexture == null) return null;string assetPath = AssetDatabase.GetAssetPath(sourceTexture);TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;if (importer == null) return null;bool originalReadable = importer.isReadable;TextureImporterCompression originalCompression = importer.textureCompression;// 設置為可讀importer.isReadable = true;importer.textureCompression = TextureImporterCompression.Uncompressed;AssetDatabase.ImportAsset(assetPath);AssetDatabase.Refresh();// 重新加載紋理Texture2D readableTexture = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);Color[] pixels = readableTexture.GetPixels();// 找到邊界int width = readableTexture.width;int height = readableTexture.height;int left = width;int right = 0;int top = 0;int bottom = height;for (int y = 0; y < height; y++){for (int x = 0; x < width; x++){Color pixel = pixels[y * width + x];if (pixel.a > 0.01f) // 非完全透明{left = Mathf.Min(left, x);right = Mathf.Max(right, x);top = Mathf.Max(top, y);bottom = Mathf.Min(bottom, y);}}}// 創建新紋理int newWidth = right - left + 1;int newHeight = top - bottom + 1;Texture2D trimmedTexture = null;if (newWidth > 0 && newHeight > 0){trimmedTexture = new Texture2D(newWidth, newHeight, TextureFormat.RGBA32, false);Color[] newPixels = new Color[newWidth * newHeight];for (int y = bottom; y <= top; y++){for (int x = left; x <= right; x++){int sourceIndex = y * width + x;int destIndex = (y - bottom) * newWidth + (x - left);newPixels[destIndex] = pixels[sourceIndex];}}trimmedTexture.SetPixels(newPixels);trimmedTexture.Apply();}// 恢復原始導入設置importer.isReadable = originalReadable;importer.textureCompression = originalCompression;AssetDatabase.ImportAsset(assetPath);return trimmedTexture;}public static void SaveTexture(Texture2D texture, string savePath){if (texture == null || string.IsNullOrEmpty(savePath)) return;byte[] bytes = texture.EncodeToPNG();string directory = Path.GetDirectoryName(savePath);if (!Directory.Exists(directory)){Directory.CreateDirectory(directory);}File.WriteAllBytes(savePath, bytes);AssetDatabase.Refresh();Debug.Log("圖片已保存至: " + savePath);// 自動選擇保存的資源Texture2D savedTexture = AssetDatabase.LoadAssetAtPath<Texture2D>(savePath);if (savedTexture != null){Selection.activeObject = savedTexture;}}
}
using UnityEditor;
using UnityEngine;
using System.IO;public class ImageTrimmerWindow : EditorWindow
{private Object[] selectedTextures;[MenuItem("Tools/UI/批量剔除圖片的空白像素")]public static void ShowWindow(){GetWindow<ImageTrimmerWindow>("批量剔除圖片的空白像素");}private void OnGUI(){GUILayout.Label("批量圖片空白像素剔除", EditorStyles.boldLabel);EditorGUILayout.Space();EditorGUILayout.HelpBox("請選擇一個或多個 PNG 圖片文件(可在Project窗口多選后點擊“從選中項加載”)。", MessageType.Info);if (GUILayout.Button("從選中項加載")){selectedTextures = Selection.GetFiltered(typeof(Texture2D), SelectionMode.Assets);}if (selectedTextures != null && selectedTextures.Length > 0){EditorGUILayout.LabelField($"已選擇圖片數量: {selectedTextures.Length}");if (GUILayout.Button("批量剔除并覆蓋保存")){int successCount = 0;foreach (Object obj in selectedTextures){Texture2D tex = obj as Texture2D;if (tex == null) continue;Texture2D trimmed = ImageTrimmerHandle.TrimTexture(tex);if (trimmed != null){string path = AssetDatabase.GetAssetPath(tex);ImageTrimmerHandle.SaveTexture(trimmed, path);successCount++;}}AssetDatabase.Refresh();EditorUtility.DisplayDialog("處理完成", $"已處理并覆蓋保存 {successCount} 張圖片。", "確定");}}else{EditorGUILayout.LabelField("未選擇圖片。");}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86092.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

可編輯64頁PPT | 基于DeepSeek的數據治理方案

薦言摘要&#xff1a;在數據量爆炸式增長且業務需求日益復雜的當下&#xff0c;企業數據治理面臨著數據分散、標準混亂、價值挖掘難等諸多挑戰。我們基于DeepSeek強大的智能能力&#xff0c;為企業量身打造創新數據治理方案。 DeepSeek憑借其卓越的自然語言處理和深度學習技術…

啟用AWS VPC流日志保存到CloudWatch日志組

目標 啟用VPC流日志 啟用流日志 選擇vpc&#xff0c;開始啟用流日志&#xff0c;如下圖&#xff1a; 設置名稱和日志組&#xff0c;創建流日志&#xff0c;如下圖&#xff1a; 參考 AWS云中的VPC啟用流日志保存S3&#xff08;AWS中國云&#xff09;創建發布到 CloudWatc…

游戲引擎學習路徑與技術棧指南

游戲引擎架構全景圖&#xff08;基于GAMES104 V2.2思維導圖&#xff09; graph TDA[基礎架構] --> A1[面向數據管理]A --> A2[任務系統]A1 --> A11[ECS架構]A1 --> A12[內存優化]A2 --> A21[Job System]A2 --> A22[依賴調度]B[工具鏈] --> B1[編輯器框架]…

預訓練大語言模型

Encoder-only model&#xff08;Autoencoding model&#xff09; 使用掩碼語言模型&#xff08;Masked Language Modeling, MLM&#xff09;進行預訓練輸入原始語句和掩碼&#xff0c;訓練目標是預測掩碼標記&#xff0c;一遍重建原始句子->也稱為降噪目標&#xff08;deno…

C++信奧賽闖關題目1

1閏年 輸入一個年份,輸出它是否為閏年 閏年的規則: 描述:能被4整除,并且不能被100整除的,再加上可以被400整除的 版本一:原始版 #include <iostream> #include <cmath> using namespace std; int main() {int y;cin>>y;bool x = y%4==0&&y…

Qt+OPC開發筆記(三):OPC客戶端訂閱特點消息的Demo

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/148868209 長沙紅胖子Qt&#xff08;長沙創微智科&#xff09;博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、OpenCV…

嵌入式開發學習日志Day8(ARM體系架構——按鍵、蜂鳴器及中斷)

一、蜂鳴器學習 代碼實現&#xff1a; 二、BSP工程管理及Makefile 1、BSP工程管理 利用BSP工程管理&#xff0c;使文檔顯示不雜亂&#xff1b; 將這些文件分為4類&#xff0c;并保存到4個不同的文件夾里。 首先在新的工程文件夾里創建一個之后我們編寫的類似led驅動&#xff0…

Linux部署Sonic前后端(詳細版)(騰訊云)

系統用的是Ubuntu 22.04 LTS 1、安裝Docker sudo apt update sudo apt install -y docker.io docker-compose sudo systemctl start docker sudo systemctl enable docker# 如果不想每次用 sudo&#xff0c;可以加權限 sudo usermod -aG docker $USER 2、安裝 docker-compose…

騰訊云CBS:企業級云存儲的性能與可靠性重構

摘要 根據Forrester 2025年網絡分析與可見性&#xff08;NAV&#xff09;報告&#xff0c;東西向流量安全與加密威脅檢測成為企業核心痛點&#xff08;誤報率降低需求↑40%&#xff09;。騰訊云CBS作為底層存儲支柱&#xff0c;通過三副本跨可用區冗余架構與毫秒級故障切換能力…

ubuntu 22.04 更換阿里源 (wsl2 參照)

步驟 1: 備份當前源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 步驟 2: 編輯源列表文件 sudo nano /etc/apt/sources.list 步驟 3: 添加阿里云鏡像源 ubuntu 阿里源地址可以在這查看 ubuntu鏡像_ubuntu下載地址_ubuntu安裝教程-阿里巴巴開源鏡像站 …

idea中push拒絕,merge,rebase的區別

在 IntelliJ IDEA 中進行 Git 操作時&#xff0c;Push 拒絕&#xff08;Push Rejected&#xff09;、Merge 和 Rebase 是常見的沖突解決方式。它們有不同的適用場景和影響&#xff0c;下面詳細說明它們的區別&#xff0c;并附上流程圖幫助理解。 1. Push 拒絕&#xff08;Push …

輕松實現PDF局部擦除的技術級解決方案

在處理PDF文檔時&#xff0c;我們常常會遇到這樣的場景&#xff1a;想要刪除某段文字、擦除一張圖片&#xff0c;或者對頁面內容進行局部調整。但很多編輯工具要么操作繁瑣&#xff0c;要么功能受限&#xff0c;甚至還需要付費解鎖核心功能。 這是一款輕便又實用的PDF編輯工具…

css color 十六進制顏色透明度

css color 十六進制顏色透明度 例&#xff1a;#FFFFFF ~~ #FFFFFF1A(10% ) 0% 為 FF10% 為 1A20% 為 3330% 為 4D40% 為 6650% 為 8060% 為 9970% 為 B380% 為 CC90% 為 E6100% 為 00

Git簡介和常用命令

Git簡介 Git是一款版本管理軟件&#xff0c;可以在任何時間點保存文件&#xff0c;也能夠恢復到以前任意時間點保存的文檔&#xff0c;Git作用簡單舉例來說就是&#xff0c;寫論文&#xff0c;有很多個版本&#xff0c;將原來的論文保存起來&#xff0c;新建一個副本&#xff…

Kafka 性能調優指南

文章目錄 概述操作系統層面調優文件系統優化內存管理磁盤 I/O 優化 JVM 調優堆內存設置GC 收集器選擇常見 GC 問題 Broker 端調優版本兼容性關鍵參數配置日志段大小調優設置原則推薦配置調優考慮因素監控命令 應用層調優客戶端復用資源管理多線程消費模式 性能指標調優吞吐量優…

佰力博科技與您探討低溫真空探針臺如何保養

低溫真空探針臺是一種用于在低溫或真空環境下進行電學性能測試的精密儀器&#xff0c;其保養和維護對于確保設備的穩定運行和延長使用壽命至關重要。 一、日常清潔與檢查 1、使用后應立即清潔探針臺&#xff0c;尤其是探針、接口和連接器&#xff0c;避免灰塵和雜質影響精度。…

MySQL:深入總結鎖機制

寫在前面 在 MySQL 數據庫中&#xff0c;鎖機制是保障并發控制和數據一致性的關鍵。合理運用鎖機制&#xff0c;能有效避免數據競爭&#xff0c;提升數據庫性能。接下來&#xff0c;我們就深入了解 MySQL 中的各類鎖。 博主總結&#xff08;注&#xff1a;針對總結的詳解補充在…

AI+OT安全,讓威脅情報實現主動防御

當前&#xff0c;網絡犯罪組織的運作模式正日趨“企業化”&#xff0c;給全球網絡安全帶來了嚴峻挑戰。企業以及各類組織機構有必要采用威脅情報驅動的防御體系&#xff08;Threat-Informed Defense, TID&#xff09;&#xff0c;將安全運營模式從被動響應徹底轉向基于威脅情報…

深度剖析:UDS上下行分離隧道如何繞過主流防火墻?

&#x1f525; 深度剖析&#xff1a;UDS上下行分離隧道如何繞過主流防火墻&#xff1f; &#x1f4ca; 系統架構圖 #mermaid-svg-lv5FKIvBMKPeTFuW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lv5FKIvBMKPeTFuW …

Vue 使用vue-cli

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - 使用Vue-cli 筆記 目錄 使用vue-cli 創建項目 配置文件 啟動項目 入口文件 Index.html Main.js Eslint修復 第一種 第二種 第三種 更換為淘寶源 查看當前配置 配置淘寶源 驗證配置 總結 使用vue-cli 創建項目…