Outpainting绘制将图像扩展到其原始边界之外,允许在保留原始图像的同时添加、替换或修改图像中的视觉元素。与Inpainting一样,可以用新的视觉元素填充蒙版指定区域(在这种情况下,是原始图像之外的区域),同时保留原始图像。
有几种方法可以进行绘制,例如使用ControlNet或Differential Diffusion。下面展示如何使用Inpainting 模型ControlNet和ZoeDepth估计器进行绘制。在开始之前,请确保已安装controlnet_aux库,以便可以使用ZoeDepth估计器。
# 以下代码为程序运行进行设置
import os os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" import random import requests import torch from controlnet_aux import ZoeDetector from PIL import Image, ImageOps from diffusers import ( AutoencoderKL, ControlNetModel, StableDiffusionXLControlNetPipeline, StableDiffusionXLInpaintPipeline, )
""" Stable Diffusion XL(SDXL)型号最适合1024x1024张图像,但只要硬件有足够的内存支持,就可以将图像调整为任何大小。图像中的透明背景也应该替换为白色背景。创建一个函数(如下图所示),将图像缩放并粘贴到白色背景上。"""
def scale_and_paste(original_image):
aspect_ratio = original_image.width / original_image.height
if original_image.width > original_image.height:
new_width = 1024
new_height = round(new_width / aspect_ratio)
else:
new_height = 1024
new_width = round(new_height * aspect_ratio)
resized_original = original_image