# 如何在一级市场发行NFT（2）：NFT图片生成

By [Jason chen](https://paragraph.com/@jason-chen) · 2022-04-11

---

在之前的文章[如何在一级市场发行NFT系列（1）：区块链合约开发](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483687&idx=1&sn=b1843982bf62367ee59b78ddda91c3a5&chksm=fb04371bcc73be0d75bfb7272b17604139d98e2e560bdde40859af9d44a431130f80176855ea&scene=21#wechat_redirect)中我们已经完成了对于区块链合约代码的开发，并在[当你在买NFT时，你买到的究竟是什么？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483721&idx=1&sn=06e96729063655a2f103143b007a8707&chksm=fb043775cc73be6365d1499081073977798f86a5cba98d065bb7efdb68a9b32a91d8fce998a0&scene=21#wechat_redirect)中为大家讲解了NFT的“图片”到底是什么，在本文中，我们将会学习如何生成NFT图片并将其上传在IPFS中从而映射在token上。

强烈建议先完成上述篇文章的阅读，再读本文，否则会有大量的内容无法连续理解。

目前主流的NFT项目，都是有数千个图片，每个图片大同小异，表情、配饰、颜色等存在差异，这些图片肯定不是一个个画出来的，否则工作量极大，它们都是通过脚本代码自动生成的。

我们使用一套开源的图片生成工具[https://github.com/HashLips/hashlips\_art\_engine，它可以实现将多个图层进行重叠合成一张图片，且每种图层可设置出现概率的权重。](https://github.com/HashLips/hashlips_art_engine%EF%BC%8C%E5%AE%83%E5%8F%AF%E4%BB%A5%E5%AE%9E%E7%8E%B0%E5%B0%86%E5%A4%9A%E4%B8%AA%E5%9B%BE%E5%B1%82%E8%BF%9B%E8%A1%8C%E9%87%8D%E5%8F%A0%E5%90%88%E6%88%90%E4%B8%80%E5%BC%A0%E5%9B%BE%E7%89%87%EF%BC%8C%E4%B8%94%E6%AF%8F%E7%A7%8D%E5%9B%BE%E5%B1%82%E5%8F%AF%E8%AE%BE%E7%BD%AE%E5%87%BA%E7%8E%B0%E6%A6%82%E7%8E%87%E7%9A%84%E6%9D%83%E9%87%8D%E3%80%82)

![](https://storage.googleapis.com/papyrus_images/c1560c5b79e0ee452b946493cd6bcbb506fe217d09ca1392c3a8dfcb26bed013.png)

如上图，layers文件夹是用来存储生成图片的图层物料，一级文件是图层属性，二级文件则是这个属性下的样式种类，每个具体图层的文件命名是 名称 + # + 数字，这个数字即该种类在属性下出现的概率权重。

![](https://storage.googleapis.com/papyrus_images/f4fd623669e08deee5c6d3779292e2364799c6a6e6bcc20096aea91a6ab46acb.png)

在configs中的growEditionSizeTo设置总共要生成多少张图片，layerOrder中则设置每一类图层的叠加顺序，如下图表示先生成“背景”图层，再叠加“二层”，最后叠加“三层”。

![](https://storage.googleapis.com/papyrus_images/c9c2f009650351854894f57be07bdb6dce77d5c0c5174a96b14b97b71819c79f.png)

namePrefix表示该NFT项目的名字，description表示该NFT项目的表述，baseUri则是该NFT项目存储在IPFS中的地址，这里我们先不设置baseUri，因为运行代码后，会分别生成两个文件夹，一个是存储所有生成的图片，一个存储每张图片对应的json，baseUri是存储在json中的，所以要先把生成的图片上传到IPFS后获取地址，再去批量替换对应json的baseUri地址。

我们执行 node index.js运行代码，可以看到左边新出现了一个文件夹，内部包含了images和json。

![](https://storage.googleapis.com/papyrus_images/b9fc6f498b7c9fcdb05ee386bb2b7ce2f668a932d6b6fcc108df941cbad086ad.png)

我们打开images文件夹，可以看到生成了预设的30张图片，其中每张图片都由三个图层叠加而成且样式不一。

![](https://storage.googleapis.com/papyrus_images/bd5f2d6b2edb384dae8ef3f318fc0fd57582bb4bcc29bafec51cae006f0c97f1.png)

同样打开json文件夹，可以看到生成了一一对应的30个json文件。

![](https://storage.googleapis.com/papyrus_images/821f9ca5a8e1324239320b9f7168877d84c89ec19a8a73ccb5cd27fc73b9a267.png)

我们任意打开其中一个，里面包含了该NFT所有的信息，其中最重要的就是image和attributes这两个属性，image是该NFT图片在IPFS中的URI链接，attributes是该NFT的属性，即稀有度，这些稀有度则会显示在opensea中。

![](https://storage.googleapis.com/papyrus_images/742664175a0fcd2479aabc87b7d2289ac4a1b696f0506ca7287192f46b62357b.png)

但此时我们并未将图片上传至IPFS中，所以这里的image的地址是无效的，我们打开[https://app.pinata.cloud/，注册登录后，点击Upload，选择刚才生成的images文件夹上传。](https://app.pinata.cloud/%EF%BC%8C%E6%B3%A8%E5%86%8C%E7%99%BB%E5%BD%95%E5%90%8E%EF%BC%8C%E7%82%B9%E5%87%BBUpload%EF%BC%8C%E9%80%89%E6%8B%A9%E5%88%9A%E6%89%8D%E7%94%9F%E6%88%90%E7%9A%84images%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%8A%E4%BC%A0%E3%80%82)

![](https://storage.googleapis.com/papyrus_images/ec0a2cdec48bc099204c328b2341e1bb5bcd564695d4abceb08a780383dc6189.png)

上传完成后，复制CID。

![](https://storage.googleapis.com/papyrus_images/bad4dac0c94f0559a1c4f01482b70969a053cb8ca3f3ec9dd464f85638dd5d1c.png)

将之前无效的baseUri替换掉。

我们只需要更新所有json文件的image地址而不需要重现生成一遍图片和json，所以执行 node utils/update\_info.js即可，执行完成后你会发现所有的json中的image都被替换为新的。

至此我们的NFT物料全部搞定。

至于如何将NFT使用合约代码正式发布在opensea见到，参考我之前的两篇文章即可：[如何在一级市场发行NFT系列（1）：区块链合约开发](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483687&idx=1&sn=b1843982bf62367ee59b78ddda91c3a5&chksm=fb04371bcc73be0d75bfb7272b17604139d98e2e560bdde40859af9d44a431130f80176855ea&scene=21#wechat_redirect)  和  [当你在买NFT时，你买到的究竟是什么？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483721&idx=1&sn=06e96729063655a2f103143b007a8707&chksm=fb043775cc73be6365d1499081073977798f86a5cba98d065bb7efdb68a9b32a91d8fce998a0&scene=21#wechat_redirect)

如有不对的地方非常欢迎指正讨论，感兴趣可添加微信交流：cj350306878，请备注姓名、公司与来意，谢谢。

其他文章：

*   [可以退款的ERC721R会成为闯入NFT市场的鲶鱼吗？](https://mp.weixin.qq.com/s/LWNDkqrOgBkAX_-Q1ue9Vg)
    
*   [那个可以跨链的Gh0stlyGh0sts会成为下一个Azuki吗？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483939&idx=1&sn=776834ea87918d2bd1a291c99547ba45&chksm=fb04341fcc73bd09879947945e0345b1b087bf9ee2f95aa7e67ee3056acacb1abf37ccba9892&scene=21#wechat_redirect)
    
*   [如何做一个钓鱼网站偷走周杰伦的NFT？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483914&idx=1&sn=f0b64d82edb21edadac8026bf5a916c0&chksm=fb043436cc73bd2011fe5130a591631dbf837f9e64ff6b6f5d8d68a7ade097d1955d85039fc1&scene=21#wechat_redirect)
    
*   [ERC1155是什么？以阿迪达斯NFT为例解析](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483891&idx=1&sn=b83b74b1f6d34b4609886e3f3614c1cf&chksm=fb0437cfcc73bed96264b08823dba695394927e957314518a61aa24aead12d26f7c257589ba0&scene=21#wechat_redirect)
    
*   [怎么通过看懂etherscan了解NFT项目情况？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483868&idx=1&sn=59fcaf88498f5d27cbb038c3dbf17bd7&chksm=fb0437e0cc73bef614f604b7b82d31bc39804f890d50515e01a73c3f5c4678c7b9a4b3d13da4&scene=21#wechat_redirect)
    
*   [我是怎么让V神给我转了一个NFT的？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483830&idx=1&sn=e5df3cf9f507efdaea639a8d4609a913&chksm=fb04378acc73be9cbe36c0e468716be904503008083982f45cb2f740273413928c4e8ce39c4d&scene=21#wechat_redirect)
    
*   [web3的产品架构和web2到底有什么区别？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483795&idx=1&sn=f517a10415078e36920e59db5c935475&chksm=fb0437afcc73beb9c274829a5ccdf0ce404416b6f81b60c6245066ef572500d4c54bfae4c47d&scene=21#wechat_redirect)
    
*   [为什么你在opensea“铸造”的NFT不需要交gas费？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483784&idx=1&sn=b216918a73392ddbcc69efb04988da5b&chksm=fb0437b4cc73bea2e2ba60afbae55ee1d2dd5be806da89b066ab90b47b5d8352e27e086c609a&scene=21#wechat_redirect)
    
*   [如何用5行代码发行一套虚拟货币？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483772&idx=1&sn=89bedacaaa642162b8d48e5b56dc8796&chksm=fb043740cc73be56b586fe8e1ad598548ebd4181a0799014d317581a20816d21c3de1bc268fc&scene=21#wechat_redirect)
    
*   [阿狸NFT到底做错了什么？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483760&idx=1&sn=3df35eed0200d80e7957ec9b64414ace&chksm=fb04374ccc73be5a963704f3cf34b4326edf31c842e452b2c9a8dc6d29617edd57ba453705c2&scene=21#wechat_redirect)
    
*   [web3的世界一片蛮荒-详解ERC721A](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483754&idx=1&sn=c67a5ec2c70d03d4dcb786458d07860e&chksm=fb043756cc73be40027ed1d5c4132bae513b897544078592485887a1e8c4898720835260d500&scene=21#wechat_redirect)
    
*   [如何在一级市场发行NFT（2）：NFT图片生成](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483737&idx=1&sn=bf525bef38f9716fa59d38c410d7068c&chksm=fb043765cc73be731fb65d0a7a8d75136c38c5210e67cd36cc0a4bc71fa883522b2dd827a320&scene=21#wechat_redirect)
    
*   [当你在买NFT时，你买到的究竟是什么？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483721&idx=1&sn=06e96729063655a2f103143b007a8707&chksm=fb043775cc73be6365d1499081073977798f86a5cba98d065bb7efdb68a9b32a91d8fce998a0&scene=21#wechat_redirect)
    
*   [NFT的130亿美金是从哪里来的？它与虚拟货币之间的关系是什么？](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483689&idx=1&sn=6d08a4f92972073b8966b93fe0fc5a14&chksm=fb043715cc73be039d01157e1dd6a56e5bc90d2c3ae59521f373c021cef174b0fb1fcf3e4ecb&scene=21#wechat_redirect)
    
*   [如何在一级市场发行NFT系列（1）：区块链合约开发](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483687&idx=1&sn=b1843982bf62367ee59b78ddda91c3a5&chksm=fb04371bcc73be0d75bfb7272b17604139d98e2e560bdde40859af9d44a431130f80176855ea&scene=21#wechat_redirect)
    
*   [浅谈我对元宇宙、Web3、区块链与NFT的理解](http://mp.weixin.qq.com/s?__biz=MzU0MzgyNjc3MQ==&mid=2247483664&idx=1&sn=bcf16ebc64aa00b97e6da7f52f9db718&chksm=fb04372ccc73be3adc86c44daec8b0c7ab882c942ed7c0dbcd9f0683a9ba846065fe37d4877f&scene=21#wechat_redirect)

---

*Originally published on [Jason chen](https://paragraph.com/@jason-chen/nft-2-nft)*
