#!/usr/bin/python
def escape(str):
- result=""
+ result = ""
for c in str:
if c=='"':
- result+='\\"'
+ result += '\\"'
elif c=='\\':
- result+='\\\\'
+ result += '\\\\'
elif ord(c)<0x20:
- result+="\\%03o"%ord(c)
+ result += "\\%03o"%ord(c)
else:
- result+=c
- return result;
+ result += c
+ return result
-def make_tex(fn):
- import Image
+def make_tex(fn, filter="LINEAR", anisotropy=0, wrap=None, srgb=False):
+ from PIL import Image
- img=Image.open(fn)
+ img = Image.open(fn)
- fmt="".join(img.getbands())
+ fmt = "".join(img.getbands())
if fmt=="LA":
- fmt="LUMINANCE_ALPHA"
+ fmt = "LUMINANCE_ALPHA"
elif fmt=="L":
- fmt="LUMINANCE"
+ fmt = "LUMINANCE"
+
+ if srgb:
+ fmt = "S"+fmt
- result="storage %s %d %d;\n"%(fmt, img.size[0], img.size[1])
- result+="min_filter LINEAR;\n"
- result+="raw_data \""
- data=list(img.getdata())
+ result = "storage %s %d %d;\n"%(fmt, img.size[0], img.size[1])
+ result += "filter %s;\n"%filter
+ if "MIPMAP" in filter:
+ result += "generate_mipmap true;\n"
+ if anisotropy:
+ result += "max_anisotropy %d;\n"%anisotropy
+ if wrap:
+ result += "wrap %s;\n"%wrap
+ result += "raw_data \""
+ data = list(img.getdata())
for y in range(img.size[1]):
- i=(img.size[1]-1-y)*img.size[0]
- result+=escape("".join(["".join([chr(v) for v in p]) for p in data[i:i+img.size[0]]]))
- result+="\";\n"
+ i = (img.size[1]-1-y)*img.size[0]
+ if fmt=="LUMINANCE" or fmt=="SLUMINANCE":
+ result += escape("".join([chr(v) for v in data[i:i+img.size[0]]]))
+ else:
+ result += escape("".join(["".join([chr(v) for v in p]) for p in data[i:i+img.size[0]]]))
+ result += "\";\n"
return result
if __name__=="__main__":
- import sys
import os
+ import argparse
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-o", "--output", metavar="FILE", help="Output filename")
+ parser.add_argument("-f", "--filter", choices=["NEAREST", "LINEAR", "MIPMAP"], default="LINEAR", help="Filtering mode")
+ parser.add_argument("-a", "--anisotropy", metavar="NUMBER", help="Maximum anisotropy, 0 = disable")
+ parser.add_argument("-w", "--wrap", choices=["REPEAT", "CLAMP_TO_EDGE", "MIRRORED_REPEAT"], help="Wrapping mode")
+ parser.add_argument("--srgb", action="store_const", const=True, help="Use sRGB color space")
+ parser.add_argument("image")
+
+ args = parser.parse_args()
+
+ filter = args.filter
+ if filter=="MIPMAP":
+ filter = "LINEAR_MIPMAP_LINEAR"
- if len(sys.argv)<2:
- print "Usage: %s <image>"%sys.argv[0]
- else:
- out=file(os.path.splitext(sys.argv[1])[0]+".tex", "w")
- out.write(make_tex(sys.argv[1]))
+ out_fn = args.output
+ if not out_fn:
+ out_fn = os.path.splitext(args.image)[0]+".tex2d"
+ out = file(out_fn, "w")
+ out.write(make_tex(args.image, filter, args.anisotropy, args.wrap, args.srgb))