|  | 
|  | 1 | +--- | 
|  | 2 | +title: 喜欢土味视频,但是不好意思看,于是我专门做了个网站 | 
|  | 3 | +date: 2024-12-08T17:27:33Z | 
|  | 4 | +slug: post-32 | 
|  | 5 | +author: chaseFunny:https://github.com/chaseFunny | 
|  | 6 | +tags: ["AI","产品"] | 
|  | 7 | +--- | 
|  | 8 | + | 
|  | 9 | +网站地址:https://ascii.luckysnail.cn/ | 
|  | 10 | + | 
|  | 11 | +最近刷抖音,发现了一个叫“青海摇”的舞蹈视频,看第一遍的时候觉得好土,感紧划走,但是这个舞蹈视频深深的留在了我的脑海里,于是我偷偷又看了一遍,结果发现人家靠这个舞蹈赚麻了,想起了评论区的一句话:“一开始以为人家是一个笑话,最后发现我才是那个笑话”,最搞笑的是人家现在已经在解决就业问题了,但是要求是:学历最高不得超过大专(dog),哈哈哈哈,本科成案底啦!看了一会后,我想能不能做一个字符版的,刚好最近 Cursor 写代码嘎嘎快,说干就干 | 
|  | 12 | + | 
|  | 13 | +对了,你如果还不知道 cursor,先看这两个文章了解 cursor,它已经改变了编程游戏规则,拥抱它吧! | 
|  | 14 | + | 
|  | 15 | +1. cursor 使用经验:https://www.luckysnail.cn/posts/post-27 | 
|  | 16 | +2. corsor 带来全新的编程体验:https://github.com/coderPerseus/blog/issues/31  | 
|  | 17 | + | 
|  | 18 | +## 需求分析 | 
|  | 19 | + | 
|  | 20 | +随便找一个我之前写的项目模板:https://github.com/axin-s-Template/Nextjs-Boilerplate,先不急写代码,先分析一下需求 : | 
|  | 21 | + | 
|  | 22 | +1. 一个上传按钮,支持上传图片、视频 | 
|  | 23 | +2. 把图片转为 ASCII 码 | 
|  | 24 | + | 
|  | 25 | +完了,就这么简单 | 
|  | 26 | + | 
|  | 27 | +## 开发 | 
|  | 28 | + | 
|  | 29 | +我们按照开发顺序来进行开发 | 
|  | 30 | + | 
|  | 31 | +1)上传按钮组件开发 | 
|  | 32 | + | 
|  | 33 | +这里就使用 cursor 的 cpmposer 能力,让他帮我们开发,我们只需要告诉清楚我们的需求,我的提示词 | 
|  | 34 | + | 
|  | 35 | +```bash | 
|  | 36 | +开发上传组件,上传组件支持接受上传本地的图片和视频,不支持 gif,上传成功,返回上传成功内容,给父组件转为 ASCII,尽可能使用 shadui/cn 组件,页面简单美观 | 
|  | 37 | +``` | 
|  | 38 | + | 
|  | 39 | +开发完成,我们去验证,可能需要微调一下 | 
|  | 40 | + | 
|  | 41 | +2)开发文件转  ASCII 的功能 | 
|  | 42 | + | 
|  | 43 | +```bash | 
|  | 44 | +现在开发 ASCII 预览功能,要求: | 
|  | 45 | +1. 减少 css 书写,简单美观,尽可能使用 shadui/cn 组件 | 
|  | 46 | +2. 播放,暂停,重新播放,调整ASCII 的密度(如果不能实现就不做),展示原素材 | 
|  | 47 | +3. 页面上下结构,上面的操作按钮,下面是内容预览,左边是原内容,右边是ASCII, | 
|  | 48 | +4. 下面是一个中间可以调整宽度的盒子,也就是可以通过中间的调整条来调整原内容和 ASCII 内容占据的位置, | 
|  | 49 | +5. 要限制内容展示的宽高,让展示的宽高合适 | 
|  | 50 | +``` | 
|  | 51 | + | 
|  | 52 | +它会给我们一个初版,我们进行微调 | 
|  | 53 | + | 
|  | 54 | +文件转为 ASCII 的核心逻辑也很简单: | 
|  | 55 | + | 
|  | 56 | +1. 通过 canvas 获取视频每一帧的图片,通过 drawImage 绘制到 canvas 上 | 
|  | 57 | +2. 通过 canvas 的 getImageData 获取图片的像素点数据 | 
|  | 58 | +3. 通过像素点数据,得到图像宽度,高度,根据宽度,高度计算图片的灰度值, | 
|  | 59 | +4. 根据灰度值计算函数,得到对应的 ascii 字符 | 
|  | 60 | +5. 将获取到的 ascii 字符添加到 div 中显示 | 
|  | 61 | + | 
|  | 62 | +图片和视频的逻辑有一点点区别,具体看参考中的源码 | 
|  | 63 | + | 
|  | 64 | +3)开发全局的 header 和 footer ,关于页面 | 
|  | 65 | + | 
|  | 66 | +网站到这里还是很简陋的,我们可以让网站看起来像个样子,继续向 AI 提问: | 
|  | 67 | + | 
|  | 68 | +```bash | 
|  | 69 | +参考优秀的网站做一个全局 header 组件, | 
|  | 70 | +左边是 logo ,右边是关于按钮,关于里面也就是一个内容展示,介绍这个项目,说明图片和视频是如何转为 ASCII 的原理,页面简单美观 | 
|  | 71 | +然后再开发一个 全局 footer 组件,用来放备案号和友链 | 
|  | 72 | +``` | 
|  | 73 | + | 
|  | 74 | +然后,我们会得到对应的页面,我们进行微调 | 
|  | 75 | + | 
|  | 76 | +4)作品集 | 
|  | 77 | + | 
|  | 78 | +感觉网站到这里还是缺点什么,我想是不是可以搞一个作品集,让用户进来就可以直接在这里查看一些视频和图片的效果 | 
|  | 79 | + | 
|  | 80 | +于是我继续提问题: | 
|  | 81 | + | 
|  | 82 | +```bash | 
|  | 83 | +根据这个数据结构开发 作品集合列表页面,作品项展示视频封面,标题描述 | 
|  | 84 | +1. 简单美观 | 
|  | 85 | +2. 尽可能使用 shadui/cn 组件,完成页面 | 
|  | 86 | +3. 点击视频封面进入,详情页面(新开发),使用 @Preview.tsx  来展示,详情页面上面是 标题描述,下面展示预览组件,注意这个页面标题和描述需要修改 | 
|  | 87 | +4. 代码符合组件化,模块化开发规范 | 
|  | 88 | +``` | 
|  | 89 | + | 
|  | 90 | +这里的数据结构是这样的: | 
|  | 91 | + | 
|  | 92 | +```ts | 
|  | 93 | +import { ShowItem } from '@/types/show'; | 
|  | 94 | +const baseUrl = 'https://xxx.com/'; | 
|  | 95 | +export const showList: ShowItem[] = [ | 
|  | 96 | +	{ | 
|  | 97 | +		id: 1, | 
|  | 98 | +		title: '小黑子', | 
|  | 99 | +		description: '来源于网络的蔡徐坤舞蹈视频', | 
|  | 100 | +		path: baseUrl + 'xiaoheizi.mp4', | 
|  | 101 | +		type: 'video' | 
|  | 102 | +	}, | 
|  | 103 | +	{ | 
|  | 104 | +		id: 3, | 
|  | 105 | +		title: '海绵宝宝', | 
|  | 106 | +		description: '动漫海绵宝宝中的主角', | 
|  | 107 | +		path: baseUrl + 'haimianbaobao.webp', | 
|  | 108 | +		type: 'image' | 
|  | 109 | +	}, | 
|  | 110 | +]; | 
|  | 111 | +``` | 
|  | 112 | + | 
|  | 113 | +然后我们微调一下页面就好了,最后我们看一下效果: | 
|  | 114 | + | 
|  | 115 | + | 
|  | 116 | + | 
|  | 117 | + | 
|  | 118 | + | 
|  | 119 | + | 
|  | 120 | + | 
|  | 121 | +一个简单的图片,视频转 ASCII 就实现了 | 
|  | 122 | + | 
|  | 123 | +AI 真的大大缩短了想法变成现实的时间,只要肯动手,会越来越快 | 
|  | 124 | + | 
|  | 125 | +## 参考 | 
|  | 126 | + | 
|  | 127 | +1. 源码:https://github.com/chaseFunny/imageAndVideo2Ascii | 
|  | 128 | + | 
|  | 129 | +--- | 
|  | 130 | +此文自动发布于:<a href="https://github.com/coderPerseus/blog/issues/32" target="_blank">github issues</a> | 
0 commit comments