TexturePacker版本 4.2.1

前言:因为水平有限,错误再所难免,望指正, 大家如果有购买能力的话,希望购买TexturePacker正版,不要再用盗版了。好东西就应该支持。

1.安装TexturePacker Command Line Tool

1.1 Mac下安装 TexturePacker => Install Command Line Tool => Install

python调用texturepacker命令行处理图片

python调用texturepacker命令行处理图片

1.2 win下安装 必须配置环境变量。

2.TexturePacker命令说明(主要命令)

2.1 --texture-format

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --texture-format <id>         Sets the format for the textures.  
  2.                               The format type is automatically derived from the sheet's file name  
  3.                               if possible.  
  4.                               Available formats:  
  5.                                   png               PNG (32bit)  
  6.                                   png8              PNG (8bit indexed)  
  7.                                   pvr3              PowerVR Texture Format, PVR Version 3  
  8.                                   pvr3gz            PowerVR Texture Format, PVR Version 3, compressed with gzip  
  9.                                   pvr3ccz           PowerVR Texture Format, PVR Version 3, compressed with zlib, cocos2d header  
  10.                                   jpg               JPG image format, lossy compression, no transparency  
  11.                                   bmp               24 bit BMP  
  12.                                   tga               Targa Image Format  
  13.                                   tiff              Tagged Image File Format  
  14.                                   pkm               PKM image format, ETC1 compression  
  15.                                   webp              WebP lossless / lossy format  
  16.                                   atf               Adobe Texture Format  
  17.                                   pvr2              PowerVR Texture Format, PVR Version 2, deprecated  
  18.                                   pvr2gz            PowerVR Texture Format, PVR Version 2, compressed with gzip, deprecated  
  19.                                   pvr2ccz           PowerVR Texture Format, PVR Version 2, compressed with zlib, cocos2d header, deprecate  
纹理输出格式,常用的 png,png8,pvr3ccz,pkm,jpg。  

png全平台都适用, 

png8文件小但效果比起png来说有一些损失,并且对一些图片渐变处理效果损失更加明显,如果效果看不过去还是用png吧

pvr3ccz pvr3ccz是pvr2ccz升级版,添加了一些功能,可以使用其他像素格式比如 ETC1,pvr2ccz 以前是不支持的。

pkm 主要用于ETC1
jpg 由于没有alpha通道,所以常用于背景图,压缩到80%的效果和原图差距不大,但压缩比例很吓人,文件小效果好,目前背景没有alpha通道的就用的这个。由于在cocos2d 2.x版本上加载速度慢,并且消耗内存大,根据实际情况选用。

2.2 --opt 像素格式

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --opt <pixelformat>           Optimized output for given pixel formats. Supported formats are:  
  2.                                     RGBA8888           32bit, 8bit/channel, 8bit transparency  
  3.                                     BGRA8888           32bit, 8bit/channel, 8bit transparency  
  4.                                     RGBA4444           16bit, 4bit/channel, 4bit transparency  
  5.                                     RGB888             24bit, 8bit/channel, no transparency  
  6.                                     RGB565             16bit, 5bit red, 6bit green, 5bit blue, no transparancy  
  7.                                     RGBA5551           16bit, 5bit/channel, 1bit transparancy  
  8.                                     RGBA5555           20bit, 5bit/channel, 5bit transparancy  
  9.                                     PVRTCI_2BPP_RGB    PVRTC compression, 2bit per pixel  
  10.                                     PVRTCI_4BPP_RGB    PVRTC compression, 4bit per pixel  
  11.                                     PVRTCI_2BPP_RGBA   PVRTC compression, 2bit per pixel  
  12.                                     PVRTCI_4BPP_RGBA   PVRTC compression, 4bit per pixel  
  13.                                     PVRTCII_2BPP       PVRTC2 compression, 2bit per pixel  
  14.                                     PVRTCII_4BPP       PVRTC2 compression, 4bit per pixel  
  15.                                     ALPHA              8bit transparency  
  16.                                     ALPHA_INTENSITY    8bit intensity, 8bit transparency  
  17.                                     ETC1_RGB           ETC1 compression  
  18.                                     ETC1_A             ETC1 Alpha channel only  
  19.                                     ETC1_RGB_A         ETC1 RGB + ETC1 Alpha  
  20.                                     ETC2_RGB           ETC2 compression  
  21.                                     ETC2_RGBA          ETC2 Alpha  
  22.                                     DXT1               Compressed with DXT1, 1 bit transparency  
  23.                                     DXT5               Compressed with DXT5, transparency  
  24.                                     ATF_RGB            ETC1+DXT1+PVRTC4, no transparency  
  25.                                     ATF_RGBA           ETC1/ETC1+DXT5+PVRTC4, no transparency  
像素格式常用 RGBA8888,RGBA4444,RGB888,RGB565,RGBA5551,RGBA5555,PVRTCI_4BPP_RGBA,ETC1_RGB,ERC1_A。

RGBA8888 效果最好消耗内存比较大。 内存消耗32bpp

RGBA4444 效果比起RGBA8888在某些图片上丢失得有点大。 但消耗内存是 RGBA8888的一半。 内存消耗16bpp

RGB888 少个alpha通道,内存占用是 RGBA8888 的 四分之三。内存消耗24bpp

RGB565 效果上比 RGB888差一些,但对于有些图片还是可以接受的, 但没有alpha通道。内存消耗16bpp

RGBA5551 对于透明渐变少的可以采用效果 比 RGBA4444好。内存消耗16bpp

RGBA5555 alpha通道增加 自然透明效果好了,但内存消耗也增加了。 仙存消耗24bpp

PVRTCI_4BPP_RGBA 效果上比RGBA8888要差一些,但内存消耗极小,加载速度也快,渲染速度快,在ios上完全是可以接受的,强烈建议ios 用这个格式。内存消耗4bpp

ETC1_RGB 消耗内存极小,加载速度比RGBA8888快,渲染速度快,效果也比较不错,但没有alpha通道,这也是ETC1被一直吐槽的点,所以后来有个ETC2。内存消耗4bpp

ETC1_A 和ETC1_RGB 组合在一起用,给ETC1_RGB提供alpha通道,达到透明效果,建议android可以选用这种方法来处理ETC1没有alpha通道的缺点。内存消耗4bpp

ETC1_RGB、ETC1_A可以通过shader对纹理进行两次采集处理达到RGBA的效果,这里就不讨论这个问题了。


内存消耗计算方式 :假如一张图是 1024 * 888

ETC1内存消耗 = 1024 * 888 * 4bpp / 8 = 454656byte = 444KB

PVRTCI_4BPP_RGBA内存消耗 = 1024 * 888 * 4bpp / 8 = 454656byte = 444KB

RGB888内存消耗 = 1024 * 888 * 24bpp / 8 = 2727936byte = 2664KB

RGBA8888内存消耗 = 1024 * 888 * 32bpp / 8 = 3637248byte = 3552KB

RGBA4444内存消耗 = 1024 * 888 * 16bpp / 8 = 1818624byte = 1776KB

2.3 --data 输出纹理文件的信息数据路径 plist

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --data <filename>             Name of the data file to write  

2.4 --sheet 输出图集路径

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --sheet <filename>            Name of the sheet to write, see texture-format for formats available  

2.5 --dither-type 颜色抖动

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --dither-type <dithertype>    Dithering to improve quality of color reduced images  
  2.                                   NearestNeighbour      no dithering  
  3.                                   Linear                no dithering  
  4.                                   FloydSteinberg        Floyd Steinberg, no alpha  
  5.                                   FloydSteinbergAlpha   Floyd Steinberg, with alpha  
  6.                                   Atkinson              Atkinson, no alpha  
  7.                                   AtkinsonAlpha         Atkinson, alpha  
  8.                                   PngQuantLow           PNG-8 only: minimum dithering  
  9.                                   PngQuantMedium        PNG-8 only: medium dithering  
  10.                                   PngQuantHigh          PNG-8 only: strong dithering  

对图片颜色进行一些插值处理。不同参数算法不同。 

PngQuantLow,PngQuantMedium,PngQuantHigh选用PNG8 可以试试这三个参数。用了比原PNG8好 

2.6 --format
[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --format <format>             Format to write, default is cocos2d  
  2.                                 Available formats:  
  3.                                     2dtoolkit           2D Toolkit exporter  
  4.                                     andengine           Format for AndEngine  
  5.                                     agk                 Format for AppGameKit  
  6.                                     batterytech         BatteryTech Exporter  
  7.                                     bhive               Format for BHive  
  8.                                     caat                Exporter for CAAT - the Canvas Advanced Animation Toolkit  
  9.                                     cegui               Format for CEGUI / OGRE  
  10.                                     cocos2d             plist format version 3 for cocos2d  
  11.                                     cocos2d-v2          old plist format version 2 for cocos2d (deprecated)  
  12.                                     cocos2d-x           plist format version 3 for cocos2d-x with polygon packing  
  13.                                     corona-imagesheet   Exporter for Corona(TM) SDK using new image sheet format.  
  14.                                     css                 css format for web design  
  15.                                     easeljs             Exporter for EaselJS.  
  16.                                     gideros             Format for Gideros  
  17.                                     json-array          Text file for json/html as array  
  18.                                     json                Text file for json/html as hash  
  19.                                     kwik                Exporter for Kwik using new image sheet format.  
  20.                                     less                Creates a LESS file that can be incorporated into a sprites arrangement  
  21.                                     libgdx              text file for lib GDX  
  22.                                     libRocket           Exporter to demonstrate how to crate your own exporters  
  23.                                     melonjs             Data file for MelonJS  
  24.                                     moai                Format for Moai  
  25.                                     molecule            Exporter for Molecule Framework  
  26.                                     monogame            Input format for the MonoGame TexturePacker Importer  
  27.                                     orx                 Orx Exporter  
  28.                                     panda               Exporter for Panda Engine  
  29.                                     phaser-json-array   JSON array data for Phaser  
  30.                                     phaser-json-hash    JSON hash data for Phaser  
  31.                                     pixijs              Data file for PixiJS  
  32.                                     sass-mixins         Exporter for SASS.  
  33.                                     shiva3d-jpsprite    Shiva3D with JPSprite extension  
  34.                                     shiva3d             Exporter for Shiva3D.  
  35.                                     slick2d             Format for Slick2D  
  36.                                     sparrow             xml file for Sparrow/Starling SDK  
  37.                                     spine               text file for Spine  
  38.                                     spritesheet-only    Exports only the sprite sheet without data file  
  39.                                     spritekit           plist format for SpriteKit, Objective-C header file  
  40.                                     spritekit-swift     plist format for SpriteKit, with swift class file  
  41.                                     spriter             JSON file for Spriter  
  42.                                     spritestudio        OPTPiX SpriteStudio 5 CellMap File.  
  43.                                     tresensa            Exporter for TreSensa TGE.  
  44.                                     uikit               Exporter for UIKit  
  45.                                     unity               Text file for Unity(R), json format with .txt ending  
  46.                                     unity-texture2d     Input format for the Unity(R) TexturePacker Importer  
  47.                                     unreal-paper2d      Format for UnrealEngine / Paper2d  
  48.                                     vplay               JSON file for V-Play engine  
  49.                                     wave-engine-1       WaveEngine Sprite Sheet  
  50.                                     x2d                 Export to x2d engine format.  
  51.                                     xml                 Generic XML format  
  52.                                     plain               Exporter to demonstrate how to crate your own exporters  
纹理打包方式

cocos2d-x 新版本的多边形打包方式,目前cocos studio 不支持

cocos2d-v2 老版本的打包方式,现在已经被废弃,但我还是用的这个。

cocos2d 新版本的打包方式 目前cocos studio 不支持

其他方式比如unity,unreal,spritekit如果有用的可以自行研究


2.7 --multipack 多图集打包

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --multipack                   Create multiple sprite sheets if not all sprites match into a single one  
避免一个图集包含不完所以精灵,开起则会生成多张图集。但要在 --data --sheet 加入 {n}  索引会从0开始

2.8 --maxrects-heuristics

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. MaxRects  
  2.   --maxrects-heuristics     Heuristic for MaxRects algorithm  
  3.                                 Best              Best  
  4.                                 ShortSideFit      ShortSideFit  
  5.                                 LongSideFit       LongSideFit  
  6.                                 AreaFit           AreaFit  
  7.                                 BottomLeft        BottomLeft  
  8.                                 ContactPoint      ContactPoint  

maxrect的算法方式


2.9 --enable-rotation 精灵旋转

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --enable-rotation             Enables rotation of sprites (overriding file format's defaults)  
开起旋转,得到更小的图集


2.10 --trim-mode 透明像素处理

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --trim-mode <value>           Remove transparent parts of a sprite to shrink atlas size and speed up rendering  
  2.                                   None              Keep transparent pixels  
  3.                                   Trim              Remove transparent pixels, use original size.  
  4.                                   Crop              Remove transparent pixels, use trimmed size, flush position.  
  5.                                   CropKeepPos       Remove transparent pixels, use trimmed size, keep position.  
  6.                                   Polygon           Approximate sprite contour with polygon path.  

常用Trim。

Trim 删除图片透明像素,用原图片像素大小,在帧动画中常用,

None 保证原样大小,和透明像素。 不建议用。图集大。

Crop 删除图片透明像素,用删除后的图片像素大小,位置改变

CropKeepPos 删除图片透明像素,用删除后的图片像素大小,位置不变

Polygon 多边形方式,得到图集更小,目前cocos2d 也不支持多边形精灵。


建议使用Trim,其他用处不大。

2.11 --basic-sort-by 和 --basic-order 

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. Basic  
  2.   --basic-sort-by           Sort order for the sprite list  
  3.                                 Best              Best  
  4.                                 Name              Name  
  5.                                 Width             Width  
  6.                                 Height            Height  
  7.                                 Area              Area  
  8.                                 Circumference     Circumference  
  9.   --basic-order             Sorting direction  
  10.                                 Ascending         Ascending  
  11.                                 Descending        Descending  

选用 Name 和 Ascending就行了。这个我觉得不用多做了解,按名称升序方式排序在 list中

2.12 --max-size 最大纹理图集大小

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --max-size <int>              Sets the maximum width and height for the texture in auto size mode, default is 2048  

建议使用2048,最大不超过4096,各个机型支持图集大小有区别。 以前

2.13 --size-constraints 图集高宽约束方式

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --size-constraints <value>    Restrict sizes  
  2.                                   POT               Power of 2 (2,4,8,16,32,...)  
  3.                                   WordAligned       Texture width is multiple of 2 (for 16-bit formats)  
  4.                                   AnySize           Any size  
POT 2次幂方式

AnySize 任意大小

2.14  --force-publish

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --force-publish               Ignore smart update hash and force re-publishing of the files  

强制重新再次生成,忽略智能更新,废弃以前的 --smart-update

2.15 --shape-padding 和 --border-padding

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --shape-padding <int>         Sets a padding around each shape, value is in pixels, default is 2  
  2. --border-padding <int>        Sets a padding around each the border, value is in pixels, default is 2  

--shape-padding 边框填充像素

--border-padding 相当于精灵之间的间距像素


2.16  --scale 和 --scale-mode精灵缩放

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --scale <float>               Scales all images before creating the sheet. E.g. use 0.5 for half size  
  2. --scale-mode <mode>           Use mode for scaling:  
  3.                                   Smooth            Smooth  
  4.                                   Fast              Fast (Nearest Neighbor)  
  5.                                   Scale2x           Scale2x (fixed 2x upscaling)  
  6.                                   Scale3x           Scale3x (fixed 3x upscaling)  
  7.                                   Scale4x           Scale4x (fixed 4x upscaling)  
  8.                                   Eagle             Eagle2x (fixed 2x upscaling)  
  9.                                   Hq2x              Hq2x (fixed 2x upscaling)  

主要用于不同 分辨率的机型和处理纹理大小,如果只用一套资源来适配。不用关心。scale 设为1就行

2.17  --replace 正则表达式

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. --replace <regexp>=<string>   Replaces matching parts of the sprite's name with <string>  
  2.                               Uses full regular expressions, make sure to escape the expression  
正则表达式来修改精灵名,--replace ^={sheetName}_ win和mac得到的结果不一样。

3. python 批处理

目录结构

python调用texturepacker命令行处理图片

[plain] view plain copy
 python调用texturepacker命令行处理图片python调用texturepacker命令行处理图片
  1. #!/usr/bin/python    
  2. #encoding=utf-8    
  3. import io  
  4. import os  
  5. import sys    
  6. import hashlib    
  7. import string    
  8. import re  
  9.   
  10.   
  11.   
  12.   
  13. rootPath = os.path.abspath(os.path.join(sys.argv[0], os.pardir))  
  14.   
  15. # # input paths  
  16. ImageDir= os.path.join(rootPath, "input")  
  17.   
  18. # temporary path to place the sprite sheets  
  19. OutputDir = os.path.join(rootPath, "output")  
  20.   
  21. #PVRTC4  
  22. OutputDirPVRTC4 = os.path.join(OutputDir, "PVRTC4") #ios 中PVRTC4输出目录  
  23. #ETC  
  24. OutputDirETC =  os.path.join(OutputDir, "ETC") #android 中 ETC输出目录  
  25. #PNG  
  26. OutputDirPNG =  os.path.join(OutputDir, "PNG") #通用 中 PNG输出目录  
  27.   
  28. OutputDirPNG8 =  os.path.join(OutputDir, "PNG8") #通用 中 PNG输出目录  
  29.   
  30. # # path of the texture packer command line tool  
  31. TP="TexturePacker"  
  32.   
  33.   
  34. print("ImageDir = " + ImageDir)  
  35. print("OutputDir = " + OutputDir)  
  36. print("OutputDirPVRTC4 = " + OutputDirPVRTC4)  
  37. print("OutputDirETC = " + OutputDirETC)  
  38. print("OutputDirPNG = " + OutputDirPNG)  
  39. print("OutputDirPNG8 = " + OutputDirPNG8)  
  40. print("TP = " + TP)  
  41.   
  42.   
  43. #文件输出目录  
  44. def createPath(cPath):  
  45.     if not os.path.isdir(cPath):  
  46.         os.mkdir(cPath)  
  47.   
  48.   
  49. # --trim-sprite-names  去除png等后缀  
  50. # --multipack 多图片打包开起,避免资源图太多,生成图集包含不完全,开起则会生成多张图集。  
  51. # --maxrects-heuristics macrect的算法  参数 Best ShortSideFit LongSideFit AreaFit BottomLeft ContactPoint  
  52. # --enable-rotation 开起旋转,计算rect时如果旋转将会使用更优的算法来处理,得到更小的图集  
  53. # --border-padding 精灵之间的间距  
  54. # --shape-padding 精灵形状填充  
  55. # --trim-mode Trim 删除透明像素,大下使用原始大小。 参数 None Trim Crop CropKeepPos Polygon  
  56. # --basic-sort-by Name  按名称排序  
  57. # --basic-order Ascending 升序  
  58. # --texture-format 纹理格式  
  59. # --data 输出纹理文件的信息数据路径 plist  
  60. # --sheet 输出图集路径 png  
  61. # --scale 1 缩放比例 主要用于低分辨率的机子多资源适配。  
  62. # --max-size 最大图片像素 一般我是用的2048,超过2048以前的有些android机型不支持。  
  63. # --size-constraints 结纹理进行大小格式化,AnySize 任何大小 POT 使用2次幂 WordAligned  
  64. # --replace 正则表达式,用于修改plist加载后的名称  
  65. # --pvr-quality PVRTC 纹理质量  
  66. # --force-squared 强制使用方形  
  67. # --etc1-quality ETC 纹理质量  
  68. def pack_textures(inputPath, outputPath, opt, scale, maxSize, sheetSuffix, textureFormat, sizeConstraints, sheetName, otherParams, fileNameSuffix):  
  69.     packCommand = TP + \  
  70.         " --multipack" \  
  71.         " --format cocos2d-v2" \  
  72.         " --maxrects-heuristics best" \  
  73.         " --enable-rotation" \  
  74.         " --shape-padding 2" \  
  75.         " --border-padding 0" \  
  76.         " --trim-mode Trim" \  
  77.         " --basic-sort-by Name" \  
  78.         " --basic-order Ascending" \  
  79.         " --texture-format {textureFormat}" \  
  80.         " --data {outputSheetNamePath}{fileNameSuffix}.plist" \  
  81.         " --sheet {outputSheetNamePath}{fileNameSuffix}.{sheetSuffix}" \  
  82.         " --scale {scale}" \  
  83.         " --max-size {maxSize}" \  
  84.         " --opt {opt}" \  
  85.         " --size-constraints {sizeConstraints}" \  
  86.         " {inputPath}" \  
  87.         " {otherParams}"  
  88.   
  89.   
  90.     # win 和 mac 上处理正则表达式结果不一样  
  91.     if sys.platform == "win32":  
  92.         packCommand = packCommand + " --replace (.png)$=" \  
  93.             " --replace \\b={sheetName}_" \  
  94.             " --replace {sheetName}_$=.png"  
  95.     else:  
  96.         packCommand = packCommand + " --replace ^={sheetName}_"  
  97.   
  98.   
  99.     packCommand = packCommand.format(  
  100.         textureFormat=textureFormat,  
  101.         outputSheetNamePath=os.path.join(outputPath,sheetName) + "_{n}",  
  102.         sheetName=sheetName,  
  103.         sheetSuffix=sheetSuffix,  
  104.         scale=scale,  
  105.         maxSize=maxSize,  
  106.         opt=opt,  
  107.         sizeConstraints=sizeConstraints,  
  108.         inputPath=inputPath,  
  109.         otherParams=otherParams,  
  110.         fileNameSuffix=fileNameSuffix)  
  111.     os.system(packCommand)  
  112.   
  113. if __name__ == '__main__':  
  114.     createPath(OutputDir)  
  115.     createPath(OutputDirPVRTC4)  
  116.     createPath(OutputDirETC)  
  117.     createPath(OutputDirPNG)  
  118.     createPath(OutputDirPNG8)  
  119.     for sheet in os.listdir(ImageDir):  
  120.         iPath = os.path.join(ImageDir, sheet)  
  121.         if os.path.isdir(iPath):   
  122.             pack_textures(iPath,OutputDirPVRTC4,'PVRTCI_4BPP_RGBA',1,2048,'pvr.ccz',"pvr3ccz","POT",sheet,"--pvr-quality best --force-squared", "")  
  123.             pack_textures(iPath,OutputDirETC,'ETC1_RGB',1,2048,'pkm',"pkm","AnySize",sheet,"--etc1-quality high-perceptual", "")  
  124.             pack_textures(iPath,OutputDirETC,'ETC1_A',1,2048,'pkm',"pkm","AnySize",sheet,"--etc1-quality high-perceptual", "_alpha")  
  125.             pack_textures(iPath,OutputDirPNG,'RGBA8888',1,2048,'png',"png","AnySize",sheet,"--png-opt-level 7", "")  
  126.             pack_textures(iPath,OutputDirPNG8,'RGBA8888',1,2048,'png',"png8","AnySize",sheet,"--png-opt-level 7 --dither-type PngQuantHigh", "")  

相关文章:

  • 2022-01-31
  • 2022-01-15
  • 2022-12-23
  • 2022-12-23
  • 2021-12-06
  • 2021-12-23
  • 2021-06-16
  • 2021-04-06
猜你喜欢
  • 2021-11-21
  • 2021-10-15
  • 2022-12-23
  • 2021-10-15
  • 2022-02-13
  • 2022-12-23
  • 2021-10-24
相关资源
相似解决方案