fix(scripts): fix image conversion was scrambling palette data (#7367)
Co-authored-by: Neo Xu <neo.xu1990@gmail.com>
This commit is contained in:
@@ -872,9 +872,19 @@ class LVGLImage:
|
|||||||
def _png_to_indexed(self, cf: ColorFormat, filename: str):
|
def _png_to_indexed(self, cf: ColorFormat, filename: str):
|
||||||
# convert to palette mode
|
# convert to palette mode
|
||||||
auto_cf = cf is None
|
auto_cf = cf is None
|
||||||
reader = png.Reader(
|
|
||||||
bytes=PngQuant(256 if auto_cf else cf.ncolors).convert(filename))
|
# read the image data to get the metadata
|
||||||
w, h, rows, _ = reader.read()
|
reader = png.Reader(filename=filename)
|
||||||
|
w, h, rows, metadata = reader.read()
|
||||||
|
|
||||||
|
# to preserve original palette data only convert the image if needed. For this
|
||||||
|
# check if image has a palette and the requested palette size equals the existing one
|
||||||
|
if not 'palette' in metadata or not auto_cf and len(metadata['palette']) != 2 ** cf.bpp:
|
||||||
|
# reread and convert file
|
||||||
|
reader = png.Reader(
|
||||||
|
bytes=PngQuant(256 if auto_cf else cf.ncolors).convert(filename))
|
||||||
|
w, h, rows, _ = reader.read()
|
||||||
|
|
||||||
palette = reader.palette(alpha="force") # always return alpha
|
palette = reader.palette(alpha="force") # always return alpha
|
||||||
|
|
||||||
palette_len = len(palette)
|
palette_len = len(palette)
|
||||||
|
|||||||
Reference in New Issue
Block a user