縮小と回転を同時に行うことも可能です。
アフィン変換の関数に、"Image.NEAREST"という部分がありますが、これは画像拡大時のデータ補間方法を定義しており、Nearest Neighborという手法を使っています。
import numpy as np
import tkinter as tk
from PIL import Image, ImageTk
app = tk.Tk()
img = Image.open('test.png') # 画像ファイル情報取得。text.pngは任意に設定
affine = np.array([ # 縮小と回転
[1, -0.5, 0],
[0.5, 0.7, 0],
[0, 0, 1]])
aff_inv = np.linalg.inv(affine) # アフィン変換逆行列
aff_tuple = tuple(aff_inv.flatten()) # アフィン逆行列を一次元へ変換
img = img.transform((300,300),Image.AFFINE,aff_tuple,Image.NEAREST) # アフィン変換
tk_img = ImageTk.PhotoImage(img)
canvas = tk.Canvas(app, width=300, height=300) # 画像表示エリアの作成
canvas.pack()
canvas.create_image(0, 0 , anchor = tk.NW, image=tk_img) # 画像表示
app.mainloop()