This script scales the image provided to a specific resolution. Below are two examples. The first is downscale and the second upscale
from PIL import Image
import math
im = Image.open("4by4colors.png") #(input image)
pix = im.load()
print(im.size)
reqSizex = 1600 # required resolution x
reqSizey = 900 # required resolution y
newIm = Image.new('RGB', (reqSizex, reqSizey), color = 'black')
newpix = newIm.load() # all pixels
prevx = 0
prevy = 0
for y in range (0, reqSizey):
for x in range (0, reqSizex):
oldx = math.floor(x*im.size[0] / reqSizex)
oldy = math.floor(y*im.size[1] / reqSizey)
fracx = x*im.size[0] / reqSizex - oldx
fracy = y*im.size[1] / reqSizey - oldy
#if fracx == 0: fracx = 1
#if fracy == 0: fracy = 1
if oldx+1 < im.size[0]:
#print(oldx, oldy, fracx)
r = round(pix[oldx, oldy][0] * (1-fracx) + pix[oldx+1, oldy][0] * (fracx))
g = round(pix[oldx, oldy][1] * (1-fracx) + pix[oldx+1, oldy][1] * (fracx))
b = round(pix[oldx, oldy][2] * (1-fracx) + pix[oldx+1, oldy][2] * (fracx))
else:
r = round(pix[oldx, oldy][0])
g = round(pix[oldx, oldy][1])
b = round(pix[oldx, oldy][2])
newpix[x,y] = (r,g,b)
prevx = x
prevy = y
newIm.save('4by4upscaled') #
#print(newIm.size)