保持宽高比调整图片:同宽堆叠图片适配屏幕的缩放方案
解决同宽图片缩放后保持比例且宽度一致的问题
核心思路是用统一的缩放因子处理所有图片,这样既能保持每张图的宽高比,又能保证缩放后宽度一致(因为原图宽度相同)。
步骤说明
- 先计算三张图片的原始总高度:
total_original_height = img1.get_height() + img2.get_height() + img3.get_height() - 计算缩放比例:这个比例是屏幕高度与总原始高度的比值,也就是你之前计算高度时用到的比例:
scale_factor = screen.get_height() / total_original_height - 对每张图片,用这个比例同时缩放宽度和高度即可。因为原图宽度相同,缩放后宽度必然一致,且每张图的宽高比完全保留。
代码实现(浮点数版本)
import pygame # 假设已经加载了img1、img2、img3,以及screen对象 total_original_height = img1.get_height() + img2.get_height() + img3.get_height() scale_factor = screen.get_height() / total_original_height # 处理第一张图 new_w1 = int(img1.get_width() * scale_factor) new_h1 = int(img1.get_height() * scale_factor) new_img1 = pygame.transform.scale(img1, (new_w1, new_h1)) # 处理第二张图 new_w2 = int(img2.get_width() * scale_factor) new_h2 = int(img2.get_height() * scale_factor) new_img2 = pygame.transform.scale(img2, (new_w2, new_h2)) # 处理第三张图 new_w3 = int(img3.get_width() * scale_factor) new_h3 = int(img3.get_height() * scale_factor) new_img3 = pygame.transform.scale(img3, (new_w3, new_h3))
整数运算版本(避免浮点数误差)
如果你偏好和之前一样的整数除法,也可以用分数形式的比例:
total_original_height = img1.get_height() + img2.get_height() + img3.get_height() scale_num = screen.get_height() scale_den = total_original_height # 处理第一张图 new_w1 = img1.get_width() * scale_num // scale_den new_h1 = img1.get_height() * scale_num // scale_den new_img1 = pygame.transform.scale(img1, (new_w1, new_h1)) # 处理第二张图 new_w2 = img2.get_width() * scale_num // scale_den new_h2 = img2.get_height() * scale_num // scale_den new_img2 = pygame.transform.scale(img2, (new_w2, new_h2)) # 处理第三张图 new_w3 = img3.get_width() * scale_num // scale_den new_h3 = img3.get_height() * scale_num // scale_den new_img3 = pygame.transform.scale(img3, (new_w3, new_h3))
这样处理后,三张图片不仅总高度适配屏幕,每张图的宽高比完全不变,而且缩放后的宽度也完全一致,完美满足你的需求。
内容的提问来源于stack exchange,提问作者Rebagliati Loris
相关产品推荐
相关产品推荐

