【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.tpcf.cn/pingmian/86092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 创建项目…