91 lines
No EOL
2.2 KiB
Python
91 lines
No EOL
2.2 KiB
Python
from PIL import Image
|
|
import os
|
|
import sys
|
|
import urllib.request
|
|
|
|
def boot():
|
|
path = input("Path to image or directory\n> ")
|
|
if path == '':
|
|
path = os.getcwd()
|
|
objectives = input("Pixel Objective\n> ")
|
|
objectives = objectives.replace(' ', '')
|
|
objectives = [int(x) for x in objectives.split(',')]
|
|
outpath = input("Path to output (Blank for standard)\n> ")
|
|
start(path, objectives, outpath=outpath)
|
|
|
|
def start(path, objectives=[32], subfolder="pixel", outpath=""):
|
|
if '.' in path:
|
|
path = path.replace('\\', '/')
|
|
name = path.split('/')[-1]
|
|
path = '/'.join(path.split('/')[:-1])
|
|
images = [name]
|
|
else:
|
|
images = os.listdir(path)
|
|
if path[-1] in ['/', '\\']:
|
|
path = path[:-1]
|
|
|
|
print(path)
|
|
|
|
if outpath == "":
|
|
outpath = path + '/' + subfolder + '/'
|
|
elif ':' not in outpath:
|
|
outpath = path + '/' + outpath + '/'
|
|
if outpath[-1] not in ['/', '\\']:
|
|
outpath += '/'
|
|
path += '/'
|
|
|
|
print('from:', path)
|
|
print(' to:',outpath)
|
|
|
|
done = False
|
|
while not done:
|
|
done = True
|
|
for name in images:
|
|
ext = name.lower()[-4:]
|
|
if ext != '.png' and ext != '.jpg':
|
|
done = False
|
|
images.remove(name)
|
|
if name != subfolder:
|
|
print('Unlisted "%s": not .jpg or .png' % name)
|
|
break
|
|
|
|
os.makedirs(outpath, exist_ok=True)
|
|
|
|
for name in images:
|
|
filepath = path + name
|
|
image = Image.open(filepath)
|
|
|
|
for objective in objectives:
|
|
nimage = pixelify(image, name, objective)
|
|
parts = name.split('.')
|
|
newpath = outpath + parts[0] + '_' + str(objective) + '.' + parts[1]
|
|
nimage.save(newpath, quality=100)
|
|
|
|
def pixelify(image, name, objective):
|
|
print("Working: " + name, objective)
|
|
image = image.copy()
|
|
image_width = image.size[0]
|
|
image_height = image.size[1]
|
|
ratio = objective / max([image_width, image_height])
|
|
new_width = image_width * ratio
|
|
new_height = image_height * ratio
|
|
image = image.resize((round(new_width), round(new_height)), 1)
|
|
image = image.resize((image_width, image_height), 0)
|
|
return image
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1:
|
|
print(sys.argv)
|
|
path = sys.argv[1]
|
|
objectives = [32]
|
|
outpath = ""
|
|
try:
|
|
objectives = [int(x) for x in sys.argv[2].split(',')]
|
|
outpath = sys.argv[3]
|
|
except IndexError:
|
|
pass
|
|
start(path, objectives, outpath=outpath)
|
|
else:
|
|
while True:
|
|
boot()
|
|
print('\n') |