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之间不会互相影响。

相关推荐
Ender(弹射回家版)4 分钟前
超越聊天机器人:GVIM 2.0 如何将人工智能转变为真正的科学实验室合作伙伴
人工智能
罗小罗同学7 分钟前
安德森癌症中心发表SCOPE IO模型,实现了对罕见肿瘤帕博利珠单抗疗效的精准预测,在患者早期即可预判药效
人工智能·算法·医学图像处理·医学ai
wuhanzhanhui8 分钟前
从精密齿轮到智慧流体:2026武汉动力传动展览会,重构未来工业动力
大数据·人工智能
万事可爱^15 分钟前
Claude 新发布的 Opus 5,系统提示语删了 80%,半价还能逼近 Fable 5
android·服务器·数据库·人工智能·claude
变量未定义~16 分钟前
Tarjan算法-强连通分量、路径、出差
算法
民乐团扒谱机20 分钟前
【微科普】一文搞懂AI对话平台公式复制差异:DeepSeek一键粘贴PPT可编辑,豆包复制仅得到LaTeX源码底层原理
人工智能·ai·powerpoint·ai写作·deepseek
geovindu24 分钟前
CSharp: Iterative Algorithms
开发语言·后端·算法·c#·.net·迭代算法
cooldream200926 分钟前
AI 时代,Git 应该怎么学
人工智能·git
小保CPP27 分钟前
OpenCV C++计算多边形的最大内切圆
c++·人工智能·opencv·计算机视觉
像风一样自由202029 分钟前
2.时序异常检测入门到实战:评估的陷阱:point-adjust 如何把烂模型刷成 SOTA
人工智能·时序异常检测·时间序列模型