You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

技术求助:如何将图像适配指定宽高尺寸且不拉伸原图?

解决图像适配指定尺寸且不拉伸的问题

嘿,我完全懂你现在的困扰——想把图像调整到指定宽高,但又不想让原始图像被拉伸变形对吧?你的现有代码应该是直接强制将图像缩放到目标尺寸了,这种做法自然会破坏原图的比例,导致拉伸。咱们换个思路来实现:先按原图比例缩放,让缩放后的图像能完整放进目标尺寸里,再把它放在一个刚好是目标尺寸的画布中央,剩下的空白区域可以填充你想要的颜色(比如黑色、透明色或者其他背景色)。

下面以Python的Pillow库为例,给你一段可以直接用的代码:

from PIL import Image

def resize_and_fit(image_path, target_width, target_height, background_color=(0, 0, 0)):
    # 打开原始图像
    with Image.open(image_path) as img:
        original_width, original_height = img.size
        
        # 计算缩放比例:取宽高比例中较小的那个,确保图像能完整放入目标尺寸
        scale = min(target_width / original_width, target_height / original_height)
        
        # 计算缩放后的图像尺寸
        new_width = int(original_width * scale)
        new_height = int(original_height * scale)
        
        # 按比例缩放图像(用LANCZOS算法保证缩放质量)
        resized_img = img.resize((new_width, new_height), Image.Resampling.LANCZOS)
        
        # 创建目标尺寸的画布,填充背景色
        final_img = Image.new("RGB", (target_width, target_height), background_color)
        
        # 计算图像在画布上的居中位置
        paste_x = (target_width - new_width) // 2
        paste_y = (target_height - new_height) // 2
        
        # 将缩放后的图像粘贴到画布中央
        final_img.paste(resized_img, (paste_x, paste_y))
        
        return final_img

# 示例用法:把test.jpg调整为500x500尺寸,背景填充黑色
result_img = resize_and_fit("test.jpg", 500, 500)
result_img.save("output.jpg")

关键步骤解释:

  • 计算缩放比例:取目标宽/原图宽目标高/原图高里的较小值,这样缩放后的图像不会超出目标尺寸的任何一边,保证原图比例完全不变。
  • 创建画布:生成一个刚好是目标尺寸的新图像,填充你指定的背景色,适配不同场景需求。
  • 居中粘贴:计算出缩放后图像在画布上的居中坐标,把图像粘贴进去,完美实现“适配指定尺寸但不拉伸”的效果。

如果你需要透明背景,只需要把画布的模式改成"RGBA",背景色设为(0, 0, 0, 0)即可。

内容的提问来源于stack exchange,提问作者ar099968

火山引擎 最新活动