批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?

举报
Regan Yue 发表于 2021/12/09 13:29:45 2021/12/09
【摘要】 批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?前言我们本项目是基于Benyamin Ahmed小朋友写的 nft-image-generator。之前在新闻看到这个小朋友暑假期间靠卖NFT鲸鱼“表情包” weird-whales-images一个暑假赚了250万元。另外他还将这个NFT图片生成器开源了,今天我们就基于他的这个开源工具来生成猫猫表情包。一、设置合成部件的权重cat = [...

批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?

前言

我们本项目是基于Benyamin Ahmed小朋友写的 nft-image-generator。之前在新闻看到这个小朋友暑假期间靠卖NFT鲸鱼“表情包” weird-whales-images一个暑假赚了250万元。另外他还将这个NFT图片生成器开源了,今天我们就基于他的这个开源工具来生成猫猫表情包。


一、设置合成部件的权重

cat = ["01","02","03","04","05","06","07"]
cat_weights = [10, 40, 15, 5, 10, 10, 10]
​
title = ["01","02","03","04"]
title_weights = [20, 40, 15, 15]

我们这里分别有7张和4张猫咪图片。我们要将这7张猫咪与4张猫咪排列组合,生成独一无二的图片。

P.S. 这里权重之和要是100.


二、每一张图片对应的文件名

cat_files = {
    "01": "cat1",
    "02": "cat2",
    "03": "cat3",
    "04": "cat4",
    "05": "cat5",
    "06": "cat6",
    "07": "cat7"
}
​
title_files = {
    "01": "title01",
    "02": "title02",
    "03": "title03",
    "04": "title04"
}
​

我们是将文件夹中的文件名放入字典中。

image-20211105212957978

image-20211105213009005

三、随即生成基于权重的图片组合

TOTAL_IMAGES = 10 # Number of random unique images we want to generate
​
all_images = [] 
​
# A recursive function to generate unique image combinations
def create_new_image():
    
    new_image = {} #
​
    # For each trait category, select a random trait based on the weightings 
​
    new_image ["Cat"] = random.choices(cat, cat_weights)[0]
    new_image ["Title"] = random.choices(title, title_weights)[0]
    
    if new_image in all_images:
        return create_new_image()
    else:
        return new_image
    
    
# Generate the unique combinations based on trait weightings
for i in range(TOTAL_IMAGES): 
    
    new_trait_image = create_new_image()
    
    all_images.append(new_trait_image)
    

TOTAL_IMAGES这个变量是我们要生成的最大图片数量。

create_new_image是利用递归,对于每个图片类别都根据权重随机选择一张图片。

四、判断所有的图片是否独特

def all_images_unique(all_images):
    seen = list()
    return not any(i in seen or seen.append(i) for i in all_images)
​
print("Are all images unique?", all_images_unique(all_images))

这里我们遍历所有图片来判断是否有重复图片。

五、为每一张图片添加Token Id

# Add token Id to each image
i = 0
for item in all_images:
    item["tokenId"] = i
    i = i + 1
print(all_images)

这之后all_images中内容是:

[{'Cat': '05', 'Title': '01', 'tokenId': 0}, {'Cat': '02', 'Title': '04', 'tokenId': 1}, {'Cat': '01', 'Title': '03', 'tokenId': 2}, {'Cat': '01', 'Title': '02', 'tokenId': 3}, {'Cat': '02', 'Title': '03', 'tokenId': 4}, {'Cat': '07', 'Title': '02', 'tokenId': 5}, {'Cat': '02', 'Title': '02', 'tokenId': 6}, {'Cat': '07', 'Title': '01', 'tokenId': 7}, {'Cat': '03', 'Title': '02', 'tokenId': 8}, {'Cat': '05', 'Title': '02', 'tokenId': 9}]

包含tokenId和两种猫的图片。

六、获取图片使用的数量

# Get Trait Counts
​
    
title_count = {}
for item in title:
    title_count[item] = 0
​
cat_count = {}
for item in cat:
    cat_count[item] = 0
​
for image in all_images:
    cat_count[image["Cat"]] += 1
    title_count[image["Title"]] += 1
    
print(cat_count)
print(title_count)

使用字典来存储各个图片被使用的次数。

七、拼凑图片

#### Generate Images    
for item in all_images:
​
    im1 = Image.open(f'./trait-layers/cat/{cat_files[item["Cat"]]}.png').convert('RGBA')
    im2 = Image.open(f'./trait-layers/title/{title_files[item["Title"]]}.png').convert('RGBA')
    
    im1 = im1.resize((400, 400))
    im2 = im2.resize((400, 400))
    #Create each composite
​
    com = Image.alpha_composite(im1, im2)
    
    #Convert to RGB
    rgb_im = com.convert('RGB')
    file_name = str(item["tokenId"]) + ".png"
    rgb_im.save("./images/" + file_name)
    

这里的思路很简单,将图片转化为同一尺寸,然后利用Image.alpha_composite将其叠加,然后在根据tokenId来保存图片。

八、来欣赏一下我生成的独一无二的图片吧~

image-20211105214705663


image-20211105214722464

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。