【小白学Python】AI生成图片(四)

【小白学Python】自定义图片的生成(一)

【小白学Python】自定义图片的生成(二)

【小白学Python】爬取数据(三)


在之前python学习的过程中,暂时完成了以下几个步骤:

1.从某乎爬取问答,生成txt文件
2.筛选自己想要的txt数据,读取txt文件
3.根据txt文件的问答数据,生成简易的背景图片。

现在生成的背景图片都比较单一,如下:

在这里插入图片描述

正好这段时间在用一个免费的基于stabble diffusion 3模型的文生图网站,我计划对之前的图片生成的过程进行优化。

调用上述网站的ai接口,图片的上半部分基于图片中的文字生成。


ai文生图接口的获取

F12打开浏览器的开发者工具,之后在网站上写入prompt提示语,选好图片生成的配置之后,点击生成。

在这里插入图片描述

主要需要两个接口来生成图片

  • create 图片生成
  • record-detail 异步获取图片生成

python中调用ai接口

将上述接口的调用参数、地址转换为python代码如下

def createPics(prompt):
    url = ".../create"
    requestsStr = {
        "prompt": prompt,
        "negativePrompt": "",
        "model": "realistic",
        # "model": "visiCanvas",
        # "model": "oldRealistic",
        # "model": "tamarin",
        # "model": "superAnime",
        "size": "1:1",
        "batchSize": "1",
        "imageUrl": ""
    }

    response = requests.post(url, json=requestsStr, headers=headers)

    return response.json().get('data').get('recordUuid')


def getPicLinkUrl(prompt):
    recordUuid = createPics(prompt)
    picState = 'generating'
    while picState != 'success':
        url = "https://.../record-detail"
        params = {
            "recordUuid": recordUuid
        }

        response = requests.get(url, params=params)
        response = response.json()
        print(response)

        sleep(5)
        picState = response.get('data').get('picState')
    return json.loads(response.get('data').get('picUrl'))[0]['picUrl']

输入prompt参数,调用上述方法,图片生成结果如下:
在这里插入图片描述

图片拼接

AI生成的图片风格各异,如果直接当做背景图会影响文字的展示,所以将AI生成的图片,拼在之前生成的文字背景图上面,并调整图片的大小。

先将图片缩放
def editPic(prompt):
    picPath = "aipics/" + str(time.time()) + ".jpg"
    download_image(getPicLinkUrl(prompt), picPath)
    # 打开图片文件
    image = Image.open(picPath)

    # 定义缩放尺寸
    new_width = 600
    new_height = 600

    # 使用Image对象的resize方法进行缩放
    resized_image = image.resize((new_width, new_height))

    # # 保存缩放后的图片
    # resized_image.save(picPath)

    # 关闭原始图片对象(可选步骤)
    image.close()
    return resized_image
拼接图片
def mergePics(image1, image2):
    # 确保两张图片的尺寸相同(或者处理尺寸不同的情况)
    if image1.size[0] != image2.size[0]:  # 检查宽度是否相同
        raise ValueError("Images must have the same width")

    # 计算拼接后图片的尺寸
    width = image1.size[0]
    height = image1.size[1] + image2.size[1]

    # 创建一张新图片,尺寸为拼接后的尺寸
    merged_image = Image.new('RGB', (width, height))

    # 将两张图片粘贴到新图片上
    merged_image.paste(image1, (0, 0))
    merged_image.paste(image2, (0, image1.size[1]))

    # 保存拼接后的图片
    merged_image.save('pics/'+ str(time.time()) + '.jpg')

    # 显示拼接后的图片(可选)
    merged_image.show()

文字背景图代码

def draw_text(text):
    text = remove_between_chars(text, '@', ':')
    # 设置图片大小
    width, height = 600, 300
    image = Image.new('RGB', (width, height), color='black')
    # 加载字体文件,并设置字体大小
    # 注意:确保arial.ttf字体文件路径是正确的
    font = ImageFont.truetype('C:\\Windows\\Fonts\\simhei.ttf', 20)
    # font.color = 'yellow'
    # 创建画布
    draw = ImageDraw.Draw(image)
    # 使用draw的textsize方法获取文本大小
    text_width, text_height = draw.textsize(text, font=font)
    # 计算文字位置,使其居中
    x = (width - text_width) / 2
    y = (height - text_height) / 3.5

    # 此处简单处理 如果将要到达边界,往字符串指定位置增加换行符
    # 这里经过调试,我这里使用22比较合适,后续需要优化
    if text_width > width - 10:
        new_text = text[:25] + "\n\n   " + text[25:]
        # 绘制文字
        x = (width - text_width // 2) / 2.5
        draw.text((x, y), new_text, font=font, fill='white')
    else:
        # 绘制文字
        draw.text((x, y), text, font=font, fill='white')

    #ai生成的图片
    prompt = str.replace(str.replace(text, '\n', ''), 'A: ', ' ')
    image1 = editPic(prompt)
    #合并图片背景图及ai生成的图片
    mergePics(image1, image)

效果图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

由于我的原数据是爬取的QA形式,并没有经过优化,过于简洁,描述过少,其实并不适合AI文字生成图片的prompt,AI的理解大多数都出现了偏差,图片的生成比较随意,需要我的下一步优化。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成图片的方法有很多种,其中一种方法是使用开源AI模型,如引用所提到的文本到像模型。你可以使用HuggingFace等平台获取访问令牌并使用相应的API来生成图片。具体来说,你可以按照以下步骤进行操作: 1. 获取访问令牌:使用HuggingFace等平台注册并获取访问令牌,这将用于访问AI模型的API。 2. 准备输入文本:根据模型的要求,准备你想要生成图片的文本。 3. 调用API生成图片:使用Python编程语言调用API,并将输入文本作为参数传递给API。具体的调用方法可以参考引用中给出的示例代码。 4. 保存和显示图片:将生成图片保存到指定的目录,并使用适当的工具(如matplotlib)显示图片。 请注意,不同的AI模型可能有不同的调用方式和要求的输入格式。所以在使用具体的模型之前,你需要详细查阅相关的文档或参考示例代码来了解如何正确使用该模型生成图片。 希望这个回答对你有帮助!如果你还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python使用AI photo2cartoon制作属于你的漫画头像](https://blog.csdn.net/qq_40985985/article/details/130366039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【AI生成Python者能够以爆炸性的速度上手主题StableDiffusion](https://blog.csdn.net/EasyAI_/article/details/127243801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值