Stable Diffusion中的图像修改尺寸和编辑工具实现

图生图

在图生图中,使用Stablediffusion的pipeline来构建Webui应用,如果直接把参数传给pipeline是无效的。 __call__参数中虽然有单独的weightheight 这两个参数,但最终图像尺寸实际上是由传入图片的尺寸决定的,因此需要定义函数来做原始图片的尺寸变换,达到用参数来控制输出图像尺寸的目的,这可以通过resize调整图片尺寸大小来实现。

python 复制代码
# 图片宽度和高度按照比例调整
def fn_resize_ratio(original_image, ratio):
    
    original_width, original_height = original_image.size
    new_width, new_height  = int(ratio * original_width), int(ratio * original_height) 
    
    while not new_width%8==0:
        new_width += 1
    while not new_height%8==0:
        new_height += 1

    # Resize the image
    resized_image = original_image.resize((new_width, new_height))

    return resized_image, new_width, new_height
python 复制代码
# 图片宽度和高度按照不同尺寸调整
def fn_resize_fixed(original_image, new_width, new_height):
    resized_image = original_image.resize((new_width, new_height))
    return resized_image

上传一张初始图片 图片宽度和高度按照比例调整,缩放到1.2倍,高度和高度同步变成1232。

图片宽度和高度按照不同尺寸调整,可以看到图片被「压扁」了。

图像编辑

Gradio 4.0以上的版本提供了ImageEditor 的组件,可以很方便实现图片的裁剪,涂改等,非常适合图像编辑目的。 ImageEditor 是一个图像组件,可用于上传和编辑图像(作为输入)或显示图像(作为输出)。 但是上传后的图像不是一个PIL.Image对象,而是变成一个字典。包含background、layers 和composite。background是上传的原始图像,layers表述的是当前层的操作的痕迹,如裁剪或者涂改。

python 复制代码
# 提取图像编辑器的涂鸦区域和原图
def save_mask(inputs):
    layers = inputs['layers']
   
    # layers[0]表示第一张mask
    mask = layers[0]
    new_image = Image.new('RGBA', mask.size, color='white').paste(mask, mask=mask).convert('RGB')
    return ImageOps.invert(new_image), inputs['background']

图像编辑器 图像做了涂鸦,右侧输出为涂鸦的区域 图像编辑器的层数,默认是1。如果需要多个涂鸦层,可以点击「+」号增加。不同的layer之间不会互相影响。

相关推荐
Ai_easygo9 小时前
AI下半场_09_CSDN版_Agent安全攻防
人工智能
速易达网络9 小时前
宇树机器人和Microduck仿真区别
人工智能
PNP Robotics9 小时前
【PNP具身解读】GPT6 Astra:具身智能新范式,大模型 + Franka机器人快速落地验证一、GPT6 Astra 背后的布局、数据与具身方向
人工智能·学习·机器学习·机器人
一木 之林9 小时前
手搓家庭服务器:二手装机、Docker部署、端口映射与frp内网穿透
服务器·人工智能·git·编辑器
咖啡星人k9 小时前
MCP 协议入门:从 tools/list 到一次真实调用
人工智能·mcp·ai工程
YOLO数据集集合10 小时前
光伏板红外-可见光配对缺陷检测数据集 | 光伏板缺陷 红外可见光配准 多模态检测 无人机巡检 目标检测 YOLO格式9094期
人工智能·目标检测·计算机视觉·目标跟踪·红外·无人机视角·太阳能板
知几蜗牛10 小时前
Agent会互相调用了,但A2A 1.0真正解决的是协作边界
人工智能
qq_4101942910 小时前
.NET 8.0 下基于 PaddleOCRSharp 的离线文字识别落地指南
算法·.net
掘金泥石流10 小时前
从 Palantir AI FDE 到我们的实践:企业交付如何变成产品?
人工智能·架构·agent
HIT_Weston10 小时前
227、【AI】【模型部署】基座模型研究:RoPE 旋转位置编码
人工智能·模型部署