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 的幂,所以你永远不会有任何问题
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 的幂,所以你永远不会有任何问题