批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?
【摘要】 批量生成独一无二的NFT猫猫图,这项目王多鱼会投吗?前言我们本项目是基于Benyamin Ahmed小朋友写的 nft-image-generator。之前在新闻看到这个小朋友暑假期间靠卖NFT鲸鱼“表情包” weird-whales-images一个暑假赚了250万元。另外他还将这个NFT图片生成器开源了,今天我们就基于他的这个开源工具来生成猫猫表情包。一、设置合成部件的权重cat = [...
前言
我们本项目是基于Benyamin Ahmed小朋友写的。之前在新闻看到这个小朋友暑假期间靠卖NFT鲸鱼“表情包”一个暑假赚了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"
}
我们是将文件夹中的文件名放入字典中。
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来保存图片。
八、来欣赏一下我生成的独一无二的图片吧~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)