android gif库
直到我自己学习编码的时候,我才有自由选择和探索随机的新事物和技术,并为自己构建小型的CLI / chrome扩展。
我参加的每个小型项目都有一个有趣的课要教。 但是最终,像我周围的每个人一样,我进入了一家正规公司,由于工作日程繁忙,无法继续我的独立探索。
但是现在,幸运的是,或者由于不幸的是,由于covid19的情况,我们全都呆在家里,远程工作。 这使我有时间回到我最喜欢做的事情,并建立一些令人兴奋且同时有用的东西。
无论如何,我爱GIFS! 与朋友聊天时,我总是在使用它们。 但是,当我的一位朋友抱怨她找不到高质量的高清GIF时,我就想到了创建整个GIF集线器的想法。 她必须访问不同的网站才能提出一个不错的GIF!
我也很失望! 但是,此时此刻,构筑资源丰富的高质量GIF集线器的想法震惊了我。 我知道这将是另一个很棒的项目! 我翻阅了所有提供GIF,GIPHY API,男高音等的资源,然后发现了相同的模式,其中GIF具有预览和可以使用各种尺寸的主URL。 现在,唯一的问题是如何过滤它们?
我的导师总是说,先在纸上解决问题,然后再去解决它的实用性。 这有助于我以下述方式解决问题:
- 如果我通过自己的Node Application进行过滤,应该选择以下哪种尺寸?
- 使用哪个JS库处理图像?
- 我在哪里存储已处理的GIF?
- 简化所有内容(1、2和3)?
- 如何创建HD GIF的集合?
一次选择一个问题,我决定使用GIPHY的搜索API针对不同的关键字来分析GIPHY的响应。 我观察到React是……嗯,请参考图片,您会知道的。 *深呼吸*
因此,我决定从响应中提取一个预览和主URL,这将为我提供一系列GIF URL以及它们各自的预览URL(以压缩形式)。
哇,什么……。? 😆
我确保它们都不会太小,否则可能会导致质量下降或太大而无法一次处理。
我的下一个挑战是如何处理这些GIF并为高清质量的GIF设置明确的标准。
我开始探索Jimp , Sharp等图像处理库,最后决定使用image-size 。 因为我的唯一目的是处理图像的大小,所以我选择了一个轻量级的库来解决我的问题。
我的下一步是确定有资格使用HD的GIF的大小。 同样,它们需要足够轻以易于处理,同时渲染时看起来应该像高清图像。 经过几次迭代,我决定将480 x 360保留为我的HD GIF的合格标准。
总结起来,我能够从API提取图像,从详细的响应中提取一个平均大小的URL,然后通过图像大小对其进行处理并过滤高清图像。 很简单?
现在,下一个最大的挑战是将这些GIF存储在哪里。 由于数据具有已定义的架构(主要URL,预览URL和相应的关键字),因此我决定使用My SQL Database。
经过几次搜索,我获得了免费的AWS RDS(亚马逊关系数据库服务),为我提供20GBMySQL存储。 这对于启动我的小型图书馆并以最少的投入非常有用。 🎉
这是我第一次使用AWS ,所以我开始探索他们的其他免费套餐资源。 该项目的想法是用最少的投入尝试新技术。 因此,我决定使用Amazon的Elastic Compute Cloud(EC2)启动我的应用程序。 EC2实例不过是我可以在家中操作的云中的虚拟机。
到这个时候,这个项目开始让我非常兴奋,而我一直不停地思考着我能做多大。 🎉
但是同样,在将它们推送到数据库之前,我遇到了一系列问题。 我需要实现一个过程,在该过程中,我可以将GIF处理移出HTTP请求并在后台继续。
我们曾经使用RabbitMQ在我们的工作场所对电子邮件进行排队,该工作首先完成HTTP响应,然后将电子邮件发送到队列,然后依次发送。
那是我决定让RabbitMQ用于对我的GIF处理进行排队的时候。
RabbitMQ充当您服务的邮递员。 我将使用相同的类比解释它。 想象一下,您的邮箱中有很多字母。 这些信件需要交付给不同的消费者。 RabbitMQ充当邮递员,他从您的邮箱中挑选这些信件,并将它们逐一传递到所需的位置。 现在,在实际应用程序中这些位置是什么?
在实际的应用程序中,很多时候您需要在后台处理某些PDF /图像/视频。 如果您在RabbitMQ中将这些图像(字母)排队,并要求兔子对它们进行一个接一个的处理(请想象一下现在有字母的邮递员)。
Rabbit有自己的消费者(位置)来接收这些图像(字母)。 作为应用程序的所有者,您可以决定接收图像后执行哪些处理。
您可以根据需要处理的速度启动任意数量的消费者。 再次使用这个比喻,如果我有100个字母,并分配20个邮递员来发送,那么这些信件的发送速度将比一个人要快得多。 请注意,这些工作人员会消耗您的CPU。 确保您启动的系统不多。
对于我的小型图书馆,我派了3名工人来处理我的GIF。 想象所有它们并行运行,这就是RabbitMQ的强大功能。
我在DockerHub上找到RabbitMQ映像,通过它我可以为我的项目设置RabbitMQ。 我决定使用他们的管理插件 ,这使通过基于浏览器的UI监视队列更加容易。 很酷的东西,我能够看到我的GIF在浏览器中正在处理。💯。
现在,下一步是将Amazon RDS连接到我的节点应用程序。 我决定使用MYSQL工作台来简化工作 ,并与数据库建立远程ssh连接。
我激动不已,继续前进,尝试将数据库连接到我的节点应用程序,但是,糟糕! 失败了 如何为本地计算机上运行的节点应用程序建立连接?
仔细阅读文档后,我发现我的RDS安全组规则仅允许白名单IP的连接。 因此,我决定在这里将EC2实例的IP列入白名单,因为我的应用程序将反过来在EC2上运行,并且它不会像本地计算机那样立即更改其IP。 因此,这将减少我每次使用IP时更新IP的麻烦。 一切都准备就绪,RDS已在我的EC2的IP中列入白名单,并且在MySQL Workbench上建立了ssh连接。
这么多的运动部件♿️
但是我的Node应用程序仍然不知道我的小技巧。 我知道我必须通过隧道连接来欺骗节点应用程序。 我做了一些Google搜索,介绍了如何将SQL连接建立到RDS的通道,最后经过大量尝试切换端口并显式定义localhost后,我成功了。 我能够将处理后的GIF插入RDS。 (这是拍拍她的回想 ))
它已经准备就绪,我可以创建可供人们使用的一百万个GIF的集合。
现在,由于一切就绪,我开始考虑要进行的所有优化以及填充库的策略。
在观察手动填充的数据时,我意识到所有的GIF都有相同的URL,仅通过各自的gif_id加以区分,所以我想为什么不随身携带它们,而只将gif_id与关键字一起存储并创建URL在旅途中。 由于存储空间有限,这似乎是个好主意。 💁
具有唯一gif_id的过滤数据
已准备好与酷炫和超赞关键字匹配的GIF。 但是我现在该怎么办?
- 如何填充? 如果我使用GIF-API包装器,并且在后台处理高清影片,我该怎么办? 但这将永远需要建立我的图书馆library
- 如何处理关键字? 我在哪里存放它们?
- 如何处理属于多个类别的GIF。
ew 一开始这似乎是三天的工作,而我的全职工作已经花了三个星期,而且该项目似乎还没有结束。
(重播心中的编码口头禅,保持简单愚蠢,并用笔书写)。
在这里。 一个仅包含唯一关键字和相应ID的关键字的单独表,该表将映射到我的GIF。 因此,同一个gif_id可以有多个`keyword_ids`。 我使用GIPHYs类别端点在我的图书馆中创建了关键字列表。 完善。 我的关键字已排序。 gif也是。
现在,我需要一个可以从数据库中获取预先保存的关键字,选择关键字并继续调用我的API的系统,以便可以在后台处理我的GIF。 这比为此设置CRON作业更简单!
显然,我不得不使用一些道德手段,以防止我的API_Key被GIPHY阻止,在这里,我在10天之内使用了3lac GIF:D
我等不及他们达到一百万,并为大众建立一个RESTAPI.💛
这是我的迷你仪表板 ,让您浏览收藏
GIF小偷-🙋
我接下来的几个挑战包括为其添加男高音和其他平台支持,以及如何使用新的GIF更新我的音乐库。
翻译自: https://hackernoon.com/how-i-made-my-own-library-of-hd-gifs-57773wxg
android gif库