You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
64 lines
1.9 KiB
import os |
|
import sys |
|
import pathlib |
|
import subprocess |
|
|
|
if len(sys.argv) < 2: |
|
print("No path to original / hi-res icon provided") |
|
raise SystemExit |
|
|
|
if len(sys.argv) > 2: |
|
print("Too many arguments") |
|
raise SystemExit |
|
|
|
originalPicture = sys.argv[1] |
|
if not (os.path.isfile(originalPicture)): |
|
print(f"There is no such file: {sys.argv[1]}") |
|
raise SystemExit |
|
|
|
fname = pathlib.Path(originalPicture).stem |
|
ext = pathlib.Path(originalPicture).suffix |
|
destDir = pathlib.Path(originalPicture).parent |
|
|
|
iconsetDir = os.path.join(destDir, f"{fname}.iconset") |
|
if not (os.path.exists(iconsetDir)): |
|
pathlib.Path(iconsetDir).mkdir(parents=False, exist_ok=True) |
|
|
|
class IconParameters(): |
|
width = 0 |
|
scale = 1 |
|
def __init__(self,width,scale): |
|
self.width = width |
|
self.scale = scale |
|
def getIconName(self): |
|
if self.scale != 1: |
|
return f"icon_{self.width}x{self.width}{ext}" |
|
else: |
|
return f"icon_{self.width//2}x{self.width//2}@2x{ext}" |
|
|
|
# https://developer.apple.com/design/human-interface-guidelines/macos/icons-and-images/app-icon#app-icon-sizes |
|
ListOfIconParameters = [ |
|
IconParameters(16, 1), |
|
IconParameters(16, 2), |
|
IconParameters(32, 1), |
|
IconParameters(32, 2), |
|
IconParameters(64, 1), |
|
IconParameters(64, 2), |
|
IconParameters(128, 1), |
|
IconParameters(128, 2), |
|
IconParameters(256, 1), |
|
IconParameters(256, 2), |
|
IconParameters(512, 1), |
|
IconParameters(512, 2), |
|
IconParameters(1024, 1), |
|
IconParameters(1024, 2) |
|
] |
|
|
|
# generate iconset |
|
for ip in ListOfIconParameters: |
|
subprocess.call(["sips", "-z", str(ip.width), str(ip.width), originalPicture, "--out", os.path.join(iconsetDir, ip.getIconName())]) |
|
#print(f"Generated {ip.getIconName()}") |
|
|
|
# convert iconset to icns file |
|
subprocess.call(["iconutil", "-c", "icns", iconsetDir, "-o", os.path.join(destDir, f"{fname}.icns")]) |
|
|
|
|