Проблема в том, что fromstring()
не делает то, что вы думаете, он не масштабирует изображения. Он может только передавать поток данных в исходный размер потока данных. Итак, если вы вводите 16x16
пикселей данных, размер fromstring()
потребуется для создания изображения из потока строк / байтов.
Вот как эта функция предназначена для работы:
from PIL import Image
print(Image.open("test.png"))
И он должен дать вам:
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=64x64 at 0x2FCB6B8>
Где размер и режимы важны. Вы также должны использовать это как входные векторы для fromstring()
, поскольку размер может измениться.
Для меня отлично работает следующее:
from PIL import Image
import pygame
pygame.init()
gameDisplay = pygame.display.set_mode((800, 600))
image = Image.open("test.png")
mode = image.mode
data = image.tobytes('raw', mode)
py_image = pygame.image.fromstring(data, image.size, mode)
exit = False
while not exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit = True
gameDisplay.fill((255, 255, 255))
gameDisplay.blit(py_image, (10, 10))
pygame.display.update()
pygame.quit()
И производит:
Если вы хотите преобразовать маленькое изображение в большее. Сначала вам нужно создать пустой шаблон, в который вы сможете считывать данные. Здесь я создам пустое (белое) изображение размером 64x64
пикселей и трансплантирую / объединяю меньшее изображение 16x16
с большим в позиции 0, 0
.
source = Image.open("test.png")
canvas = Image.new('RGB', (64,64), (255, 255, 255))
canvas.paste(source, (0, 0))
Затем вы можете продолжить использовать изображение как обычно. В любом случае, это не будет масштабировать , это только даст вам больший холст для работы. Если вы хотите масштабировать изображение, вы должны использовать pygame.transform.scale или PIL scale изображение.