From 66d3b65fa154725db3f6c5ccce21a7c298c8827a Mon Sep 17 00:00:00 2001 From: yangyiqiang Date: Tue, 19 Jul 2022 18:56:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=20unreal=20?= =?UTF-8?q?=E5=9B=BE=E9=9B=86=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gizmos/T_UI_Giz_Battery.TGA | Bin 0 -> 5612 bytes Gizmos/T_UI_Giz_Charge.TGA | Bin 0 -> 1388 bytes Gizmos/T_UI_Giz_Power.TGA | Bin 0 -> 5612 bytes Gizmos/T_UI_Giz_SignalHigh.TGA | Bin 0 -> 3788 bytes Gizmos/T_UI_Giz_SignalLow.TGA | Bin 0 -> 3788 bytes Gizmos/T_UI_Giz_SignalMid.TGA | Bin 0 -> 3788 bytes .../PackerInterface/AtlasInterface.py | 23 +++++++++++++++++- .../PackerInterface/PackerInterface.py | 2 +- PyTexturePacker/Utils.py | 19 ++++++++++++++- main.py | 15 ++++++++++-- 10 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 Gizmos/T_UI_Giz_Battery.TGA create mode 100644 Gizmos/T_UI_Giz_Charge.TGA create mode 100644 Gizmos/T_UI_Giz_Power.TGA create mode 100644 Gizmos/T_UI_Giz_SignalHigh.TGA create mode 100644 Gizmos/T_UI_Giz_SignalLow.TGA create mode 100644 Gizmos/T_UI_Giz_SignalMid.TGA diff --git a/Gizmos/T_UI_Giz_Battery.TGA b/Gizmos/T_UI_Giz_Battery.TGA new file mode 100644 index 0000000000000000000000000000000000000000..2f81a9ff96abe52d91862b5cd8ca2839428d4d39 GIT binary patch literal 5612 zcmeI0%?d$56vrn!Z(ylxlz0HKQPeFTpya8 z8WY<)Gfw?GXYQHB{O*~1n>md67+IVJSdh7{8-`Yp3AO`73gTR{<|Y6N3>U@?0;E3j_imRj^RHtH^noOI}-oK;XY|w*H(SdtH8) zUKrb2&oTDr2IBu!UI#MM_U(kg;B!K3GUv<^&XXmaH%mCLmT(>|;hb8+nK77i0JarW zhfF>va5hmGzRa|9g2*V=vjbW=r_(t3t`~RT?qx&GIe*==sc&)s=NRHW2%UN-O{}*M ztsyd1-(*2aL;M*Wen|f2LU_hmsjdjMvgJYZGKB7&WTg%EYYOE4-vft5|{#Ky+wu=4`i+4=?+T3DwS zB7&{Be!uL%aG2ff9{6|8?c2F*CeGEIx4LV(d6%YXs5RnQlMCy4ejDZqO;luS^nant zik#N*jDFEhMfQq*ndWVwygk{x=JEE9GlOhTEN*xx8y^_Up3~5<=ftr&Z0^=@Kg63Q z*n!~`j?e<~b9C@mj82GS_DXUZi9L-q6y$Ei$r!H-`eLO)#!XRti8YYZn(aQ8$@zWG z;eQ}&XC!=2-ndSW&OEexg1r7PulI*GBnaz8{#^*-H%qemMsESzE6Hgsi|8|Bb+?Mv zXKP#Z>zs6#ZEak90rQO}E3&$Kk4XPnhcDfBG zHNgxL^`xd-i$UUUQk_u<)IdtV45Zc;h@*jcDD<@xfbR4KVp99rq=w0;deYO;XqZtU a%wVIrAwi+8VV=RB{(ia;OS(6h=2$$s4?68F|Q?5F(REi0C51KOm?sg2;;q zgbLCM3W;vYN}=co-BwgY5R`U+4q91n-=8=#47<7e?)Kuqhj(^%=9y<_cGuPO@;p-( zdGoy@FO$h6VM0Q2lE|f+Twb7b9OSf_9KJ)P4`oQ=8ncN}!`uU~%LfitBAa+|#?&*X zn~TZoBbC)T%&CsK2F>IFzn^K(RZiv1^(r6_)BJ$ST*TRfC}Srv*M8hXKXgyOLpQb~ zO01}TClbFH`i(kP{U>87l6Xfc#%}z?WlTdJ!sMlX3($ja*n~JaDPA*v!IV!_4xQ27NZ^7M^jYSyEEII8W}qTzoPc%xPcCw!bRN18~lM^8KAKeVb<5}vxITa z{DQ`4yTjP&aOVnptg)T=jW|W`t7CBY%00I8nnM3I$cNpo`UX5k&^~a=w`gCrr_12R zoI#uRPWRsEIemR_tb6egv<_FHzN3Aty56~G@e)C6ru+XXPC(DO8%JxR=k5{o-0p&% zlb(}S*zq-=)=KBxc;;9+S6~Nrq5;ZR>umbCzdEPCH~lb0`R{?5OZnNkn0{L83n+q~ zVK;WzW37koffeY6U(sCpUQo<=c!;2)HNA$dm_ZjSq6F)qoDZTMPcYVZfcEML?CY`XjhxdrRW8bFCP~4b z->*K4KIiZQ|D${%=urgiw_i?bTZr?}_$11Ef*i+e1kD+yUH9)^+=RYGqm;LF*88j$ zdd|Yk7p2csVy?phoJJRJp%>S21t-yhRnWCWiEsWn9CyF9+v-yF>6&!)mgNl_(^aVw F?=OW9vF-o> literal 0 HcmV?d00001 diff --git a/Gizmos/T_UI_Giz_SignalLow.TGA b/Gizmos/T_UI_Giz_SignalLow.TGA new file mode 100644 index 0000000000000000000000000000000000000000..8314635508aa3387bb1f7155feb8024b757cdc75 GIT binary patch literal 3788 zcmd6qS!+{K6h?0+wTL4sPH2_Zc>>X*MTJ6(QQJyK6%>LXv^d~wt(sb^RsWOk;(rjI z#Q~qxx4Krzh7fWkX+mjWan3z=58v5mNRlM=Nqkz9%}Gl#J3Cto>S`3H7Fzny@)-^< z0!=+=_zix(!4as%9On~bfZTte@biO*qcER%)%XmPvsg>$`bnpK0W}Sg>u)4aX@4=k zP@0aD>r0A`82&_O15~pHmH0N2>n?nR@8F*P3LjtuDv4F8Z3FRFfNiC|+BfC>YjH;z zV?R8Gi(u?}C`Xret3f~gw?Q?UjHj08Fb%KZ4jhB!;F?)8(Kh;OUJIw;A-o2C@56SO zuckJ9pMhE?^Sq=rzRy`W4`-kQy1=tH2HNRo8@_6~2OFWB`WD-)$L}f_r!a2BpUS^8 zZ;)oI{{##|BNXQ<_jw7v-S7g`QA$_nOKWrZS(g(~oVTvTSlF1`bzfS-W)ox9%Dp7& zvOd;D9rgp?Y3CZcPewso*C3bg zTSGNGg6nV!Rzl>D)|#w=VaUO5DAeS7swD^RRp*=q@7MpWwe{Qrd*J}If^{s69U7w5 zXD8f-8L*b)un!`a`kYsso5_6N`FDbMVG~5mN?Yq;y{&C8yaD&UdBpw$*aOC11^qAu z>J2;l`cA-Euom7s#&#}gb#UDG%fPuVBEPMue8p;6WjyZl+tA^ z&xzVSE4#q;SqJVDTQysI_s(VTUVabLP#jY|#ybf~3a;HPP?z&5jG@0{uImiEg?C`S zz-PzRUaTSNVN7eDg{_dLCC05)H+W9mSEY0ryAsq8I&RXpzLBro)_vvofxj!pA!-)- zB1hJUzQtAPYC(8jQd>XonV)2(AL<&;3}pIx4_@ldT_lQOL@cbtxS?XI&!_2WZf`iIq$wysvs3gNosMbIMv_Z zpARPF$xc4BG@|7#REz^n^=SA3mXEL=^0CL!*l5OgA4JP%IvZg$_HtR%hR?W`pz8~b z$}!Z`im#u+`7rf2#>Yz2CVagcMn@QaL8AzA$w4-2C*kWTJcm!_Z4abKDCXR!7@{DoYK_ti~^=PKTh>YBp*xiA%?JW4F)^%1OwxJ~1< z5PbKBp854b-*?g9opa!CWRfQ5dFS2*f6w(5FY5IyzJgm|&WC&rwvEXgXoGGjho~mc ziCVhhD)c}H6oJp;_CnuWR)P259%zCM;Q0!3;1u00FeU^8hkOu7ze7sV-|7y4Z&Pmdxtz)3}%}@r5U>?jGtkrDnx56$s z1)i%Oh}%?;_O?KDKhd_iI}GY_KT#X5cg$S&!gaU-`U}{1Tr(##(MVn# literal 0 HcmV?d00001 diff --git a/PyTexturePacker/PackerInterface/AtlasInterface.py b/PyTexturePacker/PackerInterface/AtlasInterface.py index ddabe82..6b25c8c 100644 --- a/PyTexturePacker/PackerInterface/AtlasInterface.py +++ b/PyTexturePacker/PackerInterface/AtlasInterface.py @@ -9,7 +9,7 @@ AtlasInterface.py ----------------------------------------------------------------------------""" -from ..Utils import ATLAS_FORMAT_PLIST, ATLAS_FORMAT_JSON +from ..Utils import ATLAS_FORMAT_PLIST, ATLAS_FORMAT_JSON,ATLAS_FORMAT_UNREAL_PAPER2D MAX_RANK = 2 ** 32 MAX_WIDTH = 1024 * 16 @@ -80,6 +80,17 @@ def dump_plist(self, texture_file_name="", input_base_path=None, atlas_format=AT sourceSize=dict(w=image_rect.source_size[0], h=image_rect.source_size[1]) ) + if atlas_format == ATLAS_FORMAT_UNREAL_PAPER2D: + frames[path] = dict( + frame=dict(x=image_rect.x, y=image_rect.y, w=width, h=height), + rotated=bool(image_rect.rotated), + trimed=bool(image_rect.trimmed), + spriteSourceSize=dict( + x=image_rect.source_box[0], y=image_rect.source_box[1], + w=image_rect.source_box[2], h=image_rect.source_box[3]), + sourceSize=dict(w=image_rect.source_size[0], h=image_rect.source_size[1]) + ) + plist_data["frames"] = frames if atlas_format == ATLAS_FORMAT_PLIST: plist_data["metadata"] = dict( @@ -96,6 +107,16 @@ def dump_plist(self, texture_file_name="", input_base_path=None, atlas_format=AT size=dict(w=self.size[0], h=self.size[1]), scale=1, ) + if atlas_format == ATLAS_FORMAT_UNREAL_PAPER2D: + plist_data["meta"] = dict( + app="https://www.codeandweb.com/texturepacker", + target="paper2d", + image=texture_file_name, + format="RGBA8888", + size=dict(w=self.size[0], h=self.size[1]), + scale=1, + ) + return plist_data diff --git a/PyTexturePacker/PackerInterface/PackerInterface.py b/PyTexturePacker/PackerInterface/PackerInterface.py index 10ced70..20f129c 100644 --- a/PyTexturePacker/PackerInterface/PackerInterface.py +++ b/PyTexturePacker/PackerInterface/PackerInterface.py @@ -34,7 +34,7 @@ class PackerInterface(object): def __init__(self, bg_color=0x00000000, texture_format=".png", max_width=4096, max_height=4096, enable_rotated=True, force_square=False, border_padding=2, shape_padding=2, inner_padding=0, trim_mode=0, - reduce_border_artifacts=False, extrude=0, atlas_format=Utils.ATLAS_FORMAT_PLIST): + reduce_border_artifacts=False, extrude=0, atlas_format=Utils.ATLAS_FORMAT_UNREAL_PAPER2D): """ init a packer :param bg_color: background color of output image. diff --git a/PyTexturePacker/Utils.py b/PyTexturePacker/Utils.py index 93cff8e..7ef6c02 100644 --- a/PyTexturePacker/Utils.py +++ b/PyTexturePacker/Utils.py @@ -12,9 +12,10 @@ if sys.version_info.major > 2: xrange = range -SUPPORTED_IMAGE_FORMAT = [".png", ".jpg", ".bmp"] +SUPPORTED_IMAGE_FORMAT = [".png", ".jpg", ".bmp", '.tga'] ATLAS_FORMAT_PLIST = "plist" ATLAS_FORMAT_JSON = "json" +ATLAS_FORMAT_UNREAL_PAPER2D = "unreal_paper2d" def load_images_from_paths(image_path_list): @@ -62,6 +63,8 @@ def get_atlas_data_ext(atlas_format): return '.plist' if atlas_format == ATLAS_FORMAT_JSON: return '.json' + if atlas_format == ATLAS_FORMAT_UNREAL_PAPER2D: + return ".paper2dsprites" def save_atlas_data(data_dict, file_path, atlas_format): @@ -76,6 +79,8 @@ def save_atlas_data(data_dict, file_path, atlas_format): return save_plist(data_dict, file_path) if atlas_format == ATLAS_FORMAT_JSON: return save_json(data_dict, file_path) + if atlas_format == ATLAS_FORMAT_UNREAL_PAPER2D: + return save_unreal_paper2d(data_dict, file_path) def save_json(data_dict, file_path): @@ -90,6 +95,18 @@ def save_json(data_dict, file_path): json.dump(data_dict, fp) +def save_unreal_paper2d(data_dict, file_path): + """ + save a dict as a unreal json file + :param data_dict: dict data + :param file_path: json file path to save + :return: + """ + import json + with open(file_path, 'w') as fp: + json.dump(data_dict, fp) + + def save_plist(data_dict, file_path): """ save a dict as a plist file diff --git a/main.py b/main.py index 28f98c2..b7799dd 100644 --- a/main.py +++ b/main.py @@ -8,7 +8,9 @@ Description: main.py ----------------------------------------------------------------------------""" +import os +import click from PyTexturePacker import Packer @@ -17,10 +19,19 @@ def pack_test(): packer = Packer.create(max_width=2048, max_height=2048, bg_color=0xffffff00) # pack texture images under the directory "test_case/" and name the output images as "test_case". # "%d" in output file name "test_case%d" is a placeholder, which is a multipack index, starting with 0. - packer.pack("test_image/", "test_image%d", "") + packer.pack("Gizmos/", "Gizmos%d", "") -def main(): +def pack(source): + source = os.path.normpath(source) + for root, ds, fs in os.walk(source): + if len(fs) > 0: + dir_name = root.split('\\')[-1] + packer = Packer.create(max_width=2048, max_height=2048, bg_color=0xffffff00) + packer.pack(root, dir_name, root) + + +def main(source): pack_test()