将 DDS 格式的贴图转换成 PNG 格式

最近为了实现更好更炫酷的 UI 交互效果,我们在尝试使用 3D UI 来做,在网上找了些模型,发现很多 dump 出来模型使用的都是 DDS(DirectDraw Surface) 格式的纹理贴图,而不是通用的诸如 PNG、JPG、BMP、TIF 等文件格式。

由于我主要使用 macOS 作为主力电脑,所以总不想再开个虚拟机去转换这些东西。而且网上很多转换工具也都不是特别好用。最后是使用了 ImageMagick 这个大杀器来解决问题的。

Mac 下面安装很容易,用 Brew 就好了,这个软件我已经「安利」过很多次,不再赘述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ brew install imagemagick
==> Installing dependencies for imagemagick: libtool, jpeg, libpng, libtiff, freetype
==> Installing imagemagick dependency: libtool
==> Downloading https://homebrew.bintray.com/bottles/libtool-2.4.6_1.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libtool-2.4.6_1.sierra.bottle.tar.gz
==> Caveats
In order to prevent conflicts with Apple's own libtool we have prepended a "g"
so, you have instead: glibtool and glibtoolize.
==> Summary
🍺 /usr/local/Cellar/libtool/2.4.6_1: 70 files, 3.7M
==> Installing imagemagick dependency: jpeg
==> Downloading https://homebrew.bintray.com/bottles/jpeg-8d.sierra.bottle.2.tar.gz
######################################################################## 100.0%
==> Pouring jpeg-8d.sierra.bottle.2.tar.gz
🍺 /usr/local/Cellar/jpeg/8d: 19 files, 708.2K
==> Installing imagemagick dependency: libpng
==> Downloading https://homebrew.bintray.com/bottles/libpng-1.6.25.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libpng-1.6.25.sierra.bottle.tar.gz
🍺 /usr/local/Cellar/libpng/1.6.25: 25 files, 1.2M
==> Installing imagemagick dependency: libtiff
==> Downloading https://homebrew.bintray.com/bottles/libtiff-4.0.6_2.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libtiff-4.0.6_2.sierra.bottle.tar.gz
🍺 /usr/local/Cellar/libtiff/4.0.6_2: 261 files, 3.4M
==> Installing imagemagick dependency: freetype
==> Downloading https://homebrew.bintray.com/bottles/freetype-2.7.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring freetype-2.7.sierra.bottle.tar.gz
🍺 /usr/local/Cellar/freetype/2.7: 61 files, 2.4M
==> Installing imagemagick
==> Downloading https://homebrew.bintray.com/bottles/imagemagick-6.9.6-2.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring imagemagick-6.9.6-2.sierra.bottle.tar.gz
🍺 /usr/local/Cellar/imagemagick/6.9.6-2: 1,465 files, 22.5M

安装好以后,进入需要转换格式的贴图文件目录,运行如下命令,即可一键转换:

1
2
3
4
for file in *.dds
do
convert "$file" "$(basename "$file" .dds).png"
done

用 Cinema 4D、Maya 等导入 OBJ 文件,就可以正常贴图了。

我们也可以使用 identify 命令,来看看 ImageMagick 支持哪些文件格式,我这里只关心 DDS 的处理,好像新版本的已经支持 DDS 的读写了:

1
2
3
4
$ identify -list format | grep DDS
DDS* DDS rw+ Microsoft DirectDraw Surface
DXT1* DDS rw+ Microsoft DirectDraw Surface
DXT5* DDS rw+ Microsoft DirectDraw Surface

参考:Convert DDS to PNG using linux command line