Add ktx
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# -----------------------------------------------------------------------------
|
||||
# Copyright 2019-2020 Arm Limited
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
# use this file except in compliance with the License. You may obtain a copy
|
||||
# of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# -----------------------------------------------------------------------------
|
||||
"""
|
||||
The ``astc_test_image_dl`` utility provides a means to programatically download
|
||||
test images that are available online, avoiding the need to duplicate them in
|
||||
the git repository.
|
||||
"""
|
||||
|
||||
|
||||
import os
|
||||
import sys
|
||||
import urllib.request
|
||||
|
||||
from PIL import Image
|
||||
|
||||
|
||||
TEST_IMAGE_DIR = os.path.join("Test", "Images")
|
||||
|
||||
|
||||
def download(testSet, index, srcUrl, dstPath):
|
||||
"""
|
||||
Download a single image.
|
||||
|
||||
Args:
|
||||
testSet (str): The test set name.
|
||||
index (int): The download index.
|
||||
srcUrl (str): The download URL.
|
||||
dstPath (str): The destination path.
|
||||
"""
|
||||
dirName = os.path.dirname(dstPath)
|
||||
if not os.path.exists(dirName):
|
||||
os.makedirs(dirName)
|
||||
|
||||
# Skip downloads if the file already exists
|
||||
if not os.path.exists(dstPath):
|
||||
print("%s image %u: Downloading" % (testSet, index))
|
||||
urllib.request.urlretrieve(srcUrl, dstPath)
|
||||
else:
|
||||
print("%s image %u: Skipping" % (testSet, index))
|
||||
|
||||
|
||||
def make_landscape(imgPath):
|
||||
"""
|
||||
Make an image on disk landscape aspect (edit in place)
|
||||
|
||||
Args:
|
||||
imgPath: The pth of the image on disk.
|
||||
"""
|
||||
img = Image.open(imgPath)
|
||||
if img.size[0] < img.size[1]:
|
||||
img = img.rotate(90, expand=True)
|
||||
img.save(imgPath)
|
||||
|
||||
|
||||
def make_mixed_image(imgPathA, imgPathB, dstPath):
|
||||
"""
|
||||
Make image consisting of RGB from A's RGB, and alpha from B's luminance.
|
||||
|
||||
Args:
|
||||
imgPathA: The path of input A on disk.
|
||||
imgPathB: The path of input B on disk.
|
||||
dstPath: The path of the destination.
|
||||
"""
|
||||
imgA = Image.open(imgPathA)
|
||||
imgB = Image.open(imgPathB).convert("L")
|
||||
|
||||
imgA.putalpha(imgB)
|
||||
|
||||
dirs = os.path.dirname(dstPath)
|
||||
if not os.path.exists(dirs):
|
||||
os.makedirs(dirs)
|
||||
|
||||
imgA.save(dstPath)
|
||||
|
||||
|
||||
def make_montage(imageDir, dstPath):
|
||||
"""
|
||||
Make a single mosaic montage consisting of all of the Kodak images.
|
||||
|
||||
Args:
|
||||
imgDir: The directory path of the Kodak images on disk.
|
||||
dstPth: The file path of the resulting montage.
|
||||
"""
|
||||
cols = 6
|
||||
rows = 4
|
||||
|
||||
width = 768
|
||||
height = 512
|
||||
|
||||
images = os.listdir(imageDir)
|
||||
images.sort()
|
||||
|
||||
montage = Image.new('RGB', (width * cols, height * rows))
|
||||
|
||||
for i, src in enumerate(images):
|
||||
im = Image.open(os.path.join(imageDir, src))
|
||||
col = i % cols
|
||||
row = i // cols
|
||||
montage.paste(im, (width * col, height * row))
|
||||
|
||||
dirs = os.path.dirname(dstPath)
|
||||
if not os.path.exists(dirs):
|
||||
os.makedirs(dirs)
|
||||
|
||||
montage.save(dstPath)
|
||||
|
||||
|
||||
def retrieve_kodak_set():
|
||||
"""
|
||||
Download the public domain Kodak image set.
|
||||
|
||||
To make test set mosaics easier to build we rotate images to make
|
||||
everything landscape.
|
||||
"""
|
||||
testSet = "Kodak"
|
||||
|
||||
# Download the original RGB images
|
||||
for i in range(1, 25):
|
||||
fle = "ldr-rgb-kodak%02u.png" % i
|
||||
dst = os.path.join(TEST_IMAGE_DIR, "Kodak", "LDR-RGB", fle)
|
||||
src = "http://r0k.us/graphics/kodak/kodak/kodim%02u.png" % i
|
||||
download(testSet, i, src, dst)
|
||||
|
||||
# Canonicalize image aspect
|
||||
make_landscape(dst)
|
||||
|
||||
# Make some correlated alpha RGBA images
|
||||
fle = "ldr-rgb-kodak%02u.png" # Expand later
|
||||
pattern = os.path.join(TEST_IMAGE_DIR, "Kodak", "LDR-RGB", fle)
|
||||
|
||||
for i in (22, 23):
|
||||
imgA = pattern % i
|
||||
fle = "ldr-rgba-kodak%02u+ca.png" % i
|
||||
dst = os.path.join(TEST_IMAGE_DIR, "KodakSim", "LDR-RGBA", fle)
|
||||
make_mixed_image(imgA, imgA, dst)
|
||||
|
||||
# Make some non-correlated alpha RGBA images
|
||||
for i, j in ((22, 24), (23, 20)):
|
||||
imgA = pattern % i
|
||||
imgB = pattern % j
|
||||
fle = "ldr-rgba-kodak%02u+%02u+nca.png" % (i, j)
|
||||
dst = os.path.join(TEST_IMAGE_DIR, "KodakSim", "LDR-RGBA", fle)
|
||||
make_mixed_image(imgA, imgB, dst)
|
||||
|
||||
# Make a large montage
|
||||
srcDir = os.path.join(TEST_IMAGE_DIR, "Kodak", "LDR-RGB")
|
||||
fle = "ldr-rgb-montage.png"
|
||||
dst = os.path.join(TEST_IMAGE_DIR, "KodakMnt", "LDR-RGB", fle)
|
||||
make_montage(srcDir, dst)
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
The main function.
|
||||
|
||||
Returns:
|
||||
int: The process return code.
|
||||
"""
|
||||
retrieve_kodak_set()
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user