mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-06-21 21:43:10 +03:00
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
This commit is contained in:
parent
59a43752d1
commit
b7a589475d
|
@ -12,7 +12,7 @@ Full text of the CC0 license:
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
from enum import IntEnum, IntFlag
|
from enum import IntEnum, IntFlag
|
||||||
from io import BytesIO, BufferedIOBase
|
from io import BufferedIOBase, BytesIO
|
||||||
from math import ceil, log
|
from math import ceil, log
|
||||||
from typing import NamedTuple
|
from typing import NamedTuple
|
||||||
|
|
||||||
|
@ -125,7 +125,11 @@ VTFHeader = NamedTuple(
|
||||||
("resource_count", int),
|
("resource_count", int),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
RGB_FORMATS = (VtfPF.RGB888, VtfPF.BGR888, VtfPF.UV88,)
|
RGB_FORMATS = (
|
||||||
|
VtfPF.RGB888,
|
||||||
|
VtfPF.BGR888,
|
||||||
|
VtfPF.UV88,
|
||||||
|
)
|
||||||
RGBA_FORMATS = (
|
RGBA_FORMATS = (
|
||||||
VtfPF.DXT1,
|
VtfPF.DXT1,
|
||||||
VtfPF.DXT1_ONEBITALPHA,
|
VtfPF.DXT1_ONEBITALPHA,
|
||||||
|
@ -137,9 +141,7 @@ L_FORMATS = (
|
||||||
VtfPF.A8,
|
VtfPF.A8,
|
||||||
VtfPF.I8,
|
VtfPF.I8,
|
||||||
)
|
)
|
||||||
LA_FORMATS = (
|
LA_FORMATS = (VtfPF.IA88,)
|
||||||
VtfPF.IA88,
|
|
||||||
)
|
|
||||||
|
|
||||||
BLOCK_COMPRESSED = (VtfPF.DXT1, VtfPF.DXT1_ONEBITALPHA, VtfPF.DXT3, VtfPF.DXT5)
|
BLOCK_COMPRESSED = (VtfPF.DXT1, VtfPF.DXT1_ONEBITALPHA, VtfPF.DXT3, VtfPF.DXT5)
|
||||||
SUPPORTED_FORMATS = RGBA_FORMATS + RGB_FORMATS + LA_FORMATS + L_FORMATS
|
SUPPORTED_FORMATS = RGBA_FORMATS + RGB_FORMATS + LA_FORMATS + L_FORMATS
|
||||||
|
@ -152,12 +154,12 @@ def _get_texture_size(pixel_format: VtfPF, width, height):
|
||||||
if pixel_format in (VtfPF.DXT1, VtfPF.DXT1_ONEBITALPHA):
|
if pixel_format in (VtfPF.DXT1, VtfPF.DXT1_ONEBITALPHA):
|
||||||
return width * height // 2
|
return width * height // 2
|
||||||
elif (
|
elif (
|
||||||
pixel_format
|
pixel_format
|
||||||
in (
|
in (
|
||||||
VtfPF.DXT3,
|
VtfPF.DXT3,
|
||||||
VtfPF.DXT5,
|
VtfPF.DXT5,
|
||||||
)
|
)
|
||||||
+ L_FORMATS
|
+ L_FORMATS
|
||||||
):
|
):
|
||||||
return width * height
|
return width * height
|
||||||
elif pixel_format == VtfPF.UV88:
|
elif pixel_format == VtfPF.UV88:
|
||||||
|
@ -186,50 +188,50 @@ def _get_mipmap_count(width: int, height: int):
|
||||||
def _write_image(fp: BufferedIOBase, im: Image.Image, pixel_format: VtfPF):
|
def _write_image(fp: BufferedIOBase, im: Image.Image, pixel_format: VtfPF):
|
||||||
extents = (0, 0) + im.size
|
extents = (0, 0) + im.size
|
||||||
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')
|
im = im.convert("RGB")
|
||||||
elif pixel_format == VtfPF.DXT1_ONEBITALPHA:
|
elif pixel_format == VtfPF.DXT1_ONEBITALPHA:
|
||||||
encoder = 'bcn'
|
encoder = "bcn"
|
||||||
encoder_args = (1, "DXT1A")
|
encoder_args = (1, "DXT1A")
|
||||||
im = im.convert('RGBA')
|
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')
|
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')
|
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')
|
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')
|
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')
|
im = im.convert("RGBA")
|
||||||
elif pixel_format == VtfPF.A8:
|
elif pixel_format == VtfPF.A8:
|
||||||
encoder = 'raw'
|
encoder = "raw"
|
||||||
encoder_args = ("L", 0, 0)
|
encoder_args = ("L", 0, 0)
|
||||||
*_, a = im.split()
|
*_, a = im.split()
|
||||||
im = Image.merge('L', (a,))
|
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')
|
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')
|
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()
|
||||||
im = Image.merge('LA', (r, g))
|
im = Image.merge("LA", (r, g))
|
||||||
encoder_args = ("LA", 0, 0)
|
encoder_args = ("LA", 0, 0)
|
||||||
else:
|
else:
|
||||||
raise VTFException(f"Unsupported pixel format: {pixel_format!r}")
|
raise VTFException(f"Unsupported pixel format: {pixel_format!r}")
|
||||||
|
@ -240,7 +242,7 @@ def _write_image(fp: BufferedIOBase, im: Image.Image, pixel_format: VtfPF):
|
||||||
|
|
||||||
def _closest_power(x):
|
def _closest_power(x):
|
||||||
possible_results = round(log(x, 2)), ceil(log(x, 2))
|
possible_results = round(log(x, 2)), ceil(log(x, 2))
|
||||||
return 2 ** min(possible_results, key=lambda z: abs(x - 2 ** z))
|
return 2 ** min(possible_results, key=lambda z: abs(x - 2**z))
|
||||||
|
|
||||||
|
|
||||||
class VtfImageFile(ImageFile.ImageFile):
|
class VtfImageFile(ImageFile.ImageFile):
|
||||||
|
@ -325,12 +327,12 @@ class VtfImageFile(ImageFile.ImageFile):
|
||||||
|
|
||||||
def _save(im, fp, filename):
|
def _save(im, fp, filename):
|
||||||
im: Image.Image
|
im: Image.Image
|
||||||
if im.mode not in ("RGB", "RGBA", 'L', 'LA'):
|
if im.mode not in ("RGB", "RGBA", "L", "LA"):
|
||||||
raise OSError(f"cannot write mode {im.mode} as VTF")
|
raise OSError(f"cannot write mode {im.mode} as VTF")
|
||||||
encoderinfo = im.encoderinfo
|
encoderinfo = im.encoderinfo
|
||||||
pixel_format = VtfPF(encoderinfo.get("pixel_format", VtfPF.RGBA8888))
|
pixel_format = VtfPF(encoderinfo.get("pixel_format", VtfPF.RGBA8888))
|
||||||
version = encoderinfo.get("version", (7, 4))
|
version = encoderinfo.get("version", (7, 4))
|
||||||
generate_mips = encoderinfo.get('generate_mips', True)
|
generate_mips = encoderinfo.get("generate_mips", True)
|
||||||
|
|
||||||
flags = CompiledVtfFlags(0)
|
flags = CompiledVtfFlags(0)
|
||||||
|
|
||||||
|
@ -343,7 +345,7 @@ def _save(im, fp, filename):
|
||||||
elif pixel_format in RGB_FORMATS + L_FORMATS:
|
elif pixel_format in RGB_FORMATS + L_FORMATS:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
raise VTFException('Unhandled case')
|
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