Python 成像产生矩形像素而不是方形像素

Python imaging producing rectangular pixels instead of square pixels

Python 成像库 (PIL) 的新手,但注意到生成的像素是矩形而不是正方形。查看图片

图1: 左边的红色像素明显偏了(从96x96像素的图像放大)。 图片 2: 所有像素似乎都是矩形的(从 48x48 像素图像缩放而来)。

看起来小图 (< 20x20) 似乎没问题(也许它们是矩形的,但我没注意到)但是当你往高处 (> 30x30) 时,矩形像素非常明显。

我很想知道为什么会发生这种情况以及如何解决?有没有办法设置像素 ratio/dimensions.

我模拟图2的代码如下:

import numpy as np
from PIL import Image

def random_rgb():
    """
    Creates tuple of random values between 0 - 255 inclusive.
    :return: tuple
    """
    r, g, b = np.random.randint(0, 256), np.random.randint(0, 256), np.random.randint(0, 256)
    rgb = (r, g, b)
    return rgb

def rainbow_bg(n):
    """
    Creates a list of lists of dimensions n x n
    :return: list
    """
    img = []
    for i in range(n):
        img.append([random_rgb() for i in range(n)])

    return img

def generate_image(pixels, dim, img_name):
    """
    Generates pixel image from list.
    :param pixels: list
    :param dim: tuple
    :param img_name: string
    :return:
    """

    arr = np.array(pixels, dtype=np.uint8)

    new_image = Image.fromarray(arr)
    new_image = new_image.resize(dim, resample=0)

    filename = f'{img_name}.png'
    new_image.save(filename)
    return


bg = rainbow_bg(48)
generate_image(pixels=bg, dim=(400, 400), img_name=f'background')

我认为这是一个除法问题,因为您的图像尺寸不适合您要绘制的像素数。

如果您将维度更改为:

dim=(480, 480)

你会得到完美的正方形

我可能会为“n”和 dims 使用 2 的幂,所以你永远不会有任何问题