调整图像内容大小,但保留图像尺寸

2024-10-03 06:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用PyGame用Python制作一个基本的口袋妖怪副本。过去,我已经学习了一些关于这个库的教程。所以,对于这个项目,我将有一个基本的瓷砖结构,草或水。玩家不允许在水砖上移动,但可以在草地砖上自由移动。我通过教程获得的精灵的尺寸为64 x 64,它占据了瓷砖的整个空间,因此边界周围没有透明像素

但是,出于我的目的,我需要使用我自己的精灵(64 x 64),这是我从精灵表中获得的。但是,在本例中,精灵将图像的上半部分作为透明的未使用像素。这同样适用于雪碧两侧的四分之一。因此,我需要通过沿两个轴将可见像素大小乘以2来批量调整所有精灵的大小。也就是说,只需将精灵大小增加比例因子2即可。我可以很容易地做到这一点,但它仍然是无效的,因为新的精灵大小将是128 x 128,并且未使用像素的比率保持不变

我的问题:

  • 如何通过比例因子2调整精灵的大小,并通过仅处理64 x 64帧之外的透明像素来保持64 x 64的原始尺寸

我需要一个方法,我可以用于所有9600精灵我有,最好是在Python,即使我不介意与一些其他软件的解决方案

我试图在网上寻找解决方案,但我不知道如何恰当地表达这个问题


Tags: 项目尺寸玩家副本教程像素解决方案结构
3条回答

@rabbi76的答案是复制/blit't't一段原稿,然后放大/缩放,这是一个很好的选择,可能也是我的选择

但是,如果您已经将它们调整为较大的大小,并且只需要现有图像/曲面的裁剪版本,则可以使用subsurface()。这将为您提供一个真正类似于虚拟曲面的曲面,该曲面提供了一个进入原始曲面的一部分的窗口。它引用与原始曲面相同的像素,因此如果一个像素发生更改,另一个像素中的像素也可见。不过,这似乎不是你正在做的事情的问题

创建一个透明alpha且大小为32x32的空^{}对象:

new_image = pygame.Surface((32, 32), pygame.SRCALPHA)

^{}所需区域(32,16,32,32)将原始64x64精灵(original_image)形成到新曲面上:

new_image.blit(original_image, (0, 0), (32, 16, 32, 32))

^{}缩放新曲面对象

new_image = pygame.transform.smoothscale(new_image, (64, 64))

如果这些是图像,您可以使用PIL轻松地执行此操作

from PIL import Image

忽略此位,它只生成64x64测试图像

from scipy import misc
img = misc.face()

img=Image.fromarray(np.uint8(img))
img=img.resize((64,64))

这应该是一只可爱的小浣熊

enter image description here

接下来,我们可以按照您描述的比例因子2调整大小(注意:我并没有利用这是一个正方形图像的事实,只是为了使这更具普遍性。您可以使用imsz=img.size[0] 将其简化一点)

imsz=img.size
# resize by factor of 2
img=img.resize((imsz[0]*2,imsz[1]*2))

这样可以得到2倍比例的图像

enter image description here

现在我们只是修剪它

# box – The crop rectangle, as a (left, upper, right, lower)-tuple
crpimg=img.crop(box=(int(0.5*imsz[0]),int(0.5*imsz[1]),int(1.5*imsz[0]),int(1.5*imsz[1])))

这为我们提供了一个64x64图像:

enter image description here

相关问题 更多 >