mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-02-23 15:20:33 +03:00
Refactor vtf saving
This commit is contained in:
parent
afc0e8e1a0
commit
59a43752d1
|
@ -188,27 +188,44 @@ def _write_image(fp: BufferedIOBase, im: Image.Image, pixel_format: VtfPF):
|
||||||
if pixel_format == VtfPF.DXT1:
|
if pixel_format == VtfPF.DXT1:
|
||||||
encoder = 'bcn'
|
encoder = 'bcn'
|
||||||
encoder_args = (1, "DXT1")
|
encoder_args = (1, "DXT1")
|
||||||
|
im = im.convert('RGB')
|
||||||
|
elif pixel_format == VtfPF.DXT1_ONEBITALPHA:
|
||||||
|
encoder = 'bcn'
|
||||||
|
encoder_args = (1, "DXT1A")
|
||||||
|
im = im.convert('RGBA')
|
||||||
elif pixel_format == VtfPF.DXT3:
|
elif pixel_format == VtfPF.DXT3:
|
||||||
encoder = 'bcn'
|
encoder = 'bcn'
|
||||||
encoder_args = (3, "DXT3")
|
encoder_args = (3, "DXT3")
|
||||||
|
im = im.convert('RGBA')
|
||||||
elif pixel_format == VtfPF.DXT5:
|
elif pixel_format == VtfPF.DXT5:
|
||||||
encoder = 'bcn'
|
encoder = 'bcn'
|
||||||
encoder_args = (5, "DXT5")
|
encoder_args = (5, "DXT5")
|
||||||
|
im = im.convert('RGBA')
|
||||||
elif pixel_format == VtfPF.RGB888:
|
elif pixel_format == VtfPF.RGB888:
|
||||||
encoder = 'raw'
|
encoder = 'raw'
|
||||||
encoder_args = ("RGB", 0, 0)
|
encoder_args = ("RGB", 0, 0)
|
||||||
|
im = im.convert('RGB')
|
||||||
elif pixel_format == VtfPF.BGR888:
|
elif pixel_format == VtfPF.BGR888:
|
||||||
encoder = 'raw'
|
encoder = 'raw'
|
||||||
encoder_args = ("BGR", 0, 0)
|
encoder_args = ("BGR", 0, 0)
|
||||||
|
im = im.convert('RGB')
|
||||||
elif pixel_format == VtfPF.RGBA8888:
|
elif pixel_format == VtfPF.RGBA8888:
|
||||||
encoder = 'raw'
|
encoder = 'raw'
|
||||||
encoder_args = ("RGBA", 0, 0)
|
encoder_args = ("RGBA", 0, 0)
|
||||||
|
im = im.convert('RGBA')
|
||||||
|
elif pixel_format == VtfPF.A8:
|
||||||
|
encoder = 'raw'
|
||||||
|
encoder_args = ("L", 0, 0)
|
||||||
|
*_, a = im.split()
|
||||||
|
im = Image.merge('L', (a,))
|
||||||
elif pixel_format == VtfPF.I8:
|
elif pixel_format == VtfPF.I8:
|
||||||
encoder = 'raw'
|
encoder = 'raw'
|
||||||
encoder_args = ("L", 0, 0)
|
encoder_args = ("L", 0, 0)
|
||||||
|
im = im.convert('L')
|
||||||
elif pixel_format == VtfPF.IA88:
|
elif pixel_format == VtfPF.IA88:
|
||||||
encoder = 'raw'
|
encoder = 'raw'
|
||||||
encoder_args = ("LA", 0, 0)
|
encoder_args = ("LA", 0, 0)
|
||||||
|
im = im.convert('LA')
|
||||||
elif pixel_format == VtfPF.UV88:
|
elif pixel_format == VtfPF.UV88:
|
||||||
encoder = 'raw'
|
encoder = 'raw'
|
||||||
r, g, *_ = im.split()
|
r, g, *_ = im.split()
|
||||||
|
@ -316,22 +333,17 @@ def _save(im, fp, filename):
|
||||||
generate_mips = encoderinfo.get('generate_mips', True)
|
generate_mips = encoderinfo.get('generate_mips', True)
|
||||||
|
|
||||||
flags = CompiledVtfFlags(0)
|
flags = CompiledVtfFlags(0)
|
||||||
if pixel_format in RGBA_FORMATS:
|
|
||||||
im = im.convert('RGBA')
|
|
||||||
if pixel_format in RGB_FORMATS:
|
|
||||||
im = im.convert('RGB')
|
|
||||||
if pixel_format in L_FORMATS:
|
|
||||||
im = im.convert('L')
|
|
||||||
if pixel_format in LA_FORMATS:
|
|
||||||
im = im.convert('LA')
|
|
||||||
|
|
||||||
if "A" in im.mode:
|
|
||||||
if pixel_format == VtfPF.DXT1_ONEBITALPHA:
|
if pixel_format == VtfPF.DXT1_ONEBITALPHA:
|
||||||
flags |= CompiledVtfFlags.ONEBITALPHA
|
flags |= CompiledVtfFlags.ONEBITALPHA
|
||||||
elif pixel_format == VtfPF.DXT1:
|
elif pixel_format == VtfPF.A8:
|
||||||
im = im.convert("RGB")
|
|
||||||
else:
|
|
||||||
flags |= CompiledVtfFlags.EIGHTBITALPHA
|
flags |= CompiledVtfFlags.EIGHTBITALPHA
|
||||||
|
elif pixel_format in RGBA_FORMATS + LA_FORMATS:
|
||||||
|
flags |= CompiledVtfFlags.EIGHTBITALPHA
|
||||||
|
elif pixel_format in RGB_FORMATS + L_FORMATS:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise VTFException('Unhandled case')
|
||||||
|
|
||||||
im = im.resize((_closest_power(im.width), _closest_power(im.height)))
|
im = im.resize((_closest_power(im.width), _closest_power(im.height)))
|
||||||
width, height = im.size
|
width, height = im.size
|
||||||
|
|
Loading…
Reference in New Issue
Block a user