Ruby Meme Generator吸引了对该语言的兴趣

图片

在我看来,Ruby语言不再像2012年至2014年那样流行,因此我一直希望直到它被完全忘记为止,然后再次尝试将其重新推向大众,因为我认为Ruby是Web开发中最方便,最实用的语言。
一周前,我很想通过电报建立我的社区,寻找新手程序员,并将Ruby开发带到光明的一面。

计划是创建一个社区,但并不是每个人都在其中写出他们在项目中的问题和错误(此类社区足够多),而是一个社区,其中会发布来自Ruby世界的有用信息。

首先,我想以模因的形式发布帖子,但要有教育意义。

像这样
图片

当我通过模因发生器的站点制作10张图片时,我意识到一切都非常缓慢且存在问题,再加上所有内容,我仅制作了10种红宝石方法,并且可以键入约1000种方法。 决定创建自己的模因生成器,甚至将接口绑定到这一切,并使用Ruby语言来完成所有工作。

使用RMagic生成图像


为了不影响渲染,将已经存在的`rmagick`作为基础。 由于有了这个宝石,我们可以轻松地修改图片。

在下面的代码中,我以图片的形式创建了新的对象(文本),并将它们放置在以图片为基础的图片上。

主要逻辑代码
 img = Magick::ImageList.new("1.jpg") title = Magick::Draw.new title.pointsize = 126 title.font_weight = Magick::BoldWeight title.fill = 'white' title.gravity = Magick::CenterGravity title.annotate(img, 0, 0, 0, -400, first_text) descritpion = Magick::Draw.new descritpion.pointsize = 72 descritpion.font_weight = Magick::BoldWeight descritpion.fill = 'white' descritpion.gravity = Magick::CenterGravity descritpion.annotate(img, 0, 0, 0, 300, second_text) img.write("actual_mem/#{first_text}.jpg") 


填写基本属性,例如字体大小,粗体,文本的颜色和重力。 接下来,将图片保存在actual_mem文件夹中。 为什么我需要这个文件夹,以后会回来。

Sinatra中的Web界面


现在有必要实现该接口。 为了不为了小型应用程序而部署大型Rails项目,我决定使用另一个名为Sinatra的Ruby框架。

结果是一个小的文件,其中包含用于运行应用程序的代码

Sinatra应用程序启动文件
 require 'sinatra' get('/') do haml :index end post('/') do if params[:title] && params[:description] require 'rmagick' b = params[:description].scan(/[-a-zA-Z-0-9_.,()—-]+/) second_text = "" b.each_with_index do |text, index| if index.modulo(4) == 3 second_text += text + "\n" else second_text += text + " " end end img = Magick::ImageList.new("../1.jpg") title = Magick::Draw.new title.font = '' title.pointsize = 126 title.font_weight = Magick::BoldWeight title.fill = 'white' title.gravity = Magick::CenterGravity title.annotate(img, 0, 0, 0, -400, params[:title]) descritpion = Magick::Draw.new descritpion.font = '' if b.size > 20 descritpion.pointsize = 48 else descritpion.pointsize = 72 end descritpion.font_weight = Magick::BoldWeight descritpion.fill = 'white' descritpion.gravity = Magick::CenterGravity descritpion.annotate(img, 0, 0, 0, 300, second_text) img.write("../actual_mem/#{params[:title]}.jpg") end haml :index end 


您可以在官方网站上找到有关sinatra的文档,这里我将不做过多解释。
我拧了一点CSS Grid,并使用haml组成了数据输入页面以创建一个meme

Haml代码:
 !!! 5 %html(lang="en") %head %title C  %link{:rel => "stylesheet", :type => "text/css", :href => "/style/main.css"} %body %h1    %form{ :action => "/", method: "post"} %label   %input{ name: "title" } %label   %textarea{ name: "description" } %input{type: "submit"} 


CSS代码:
 form { display: grid; grid-template-columns: 200px 1fr; grid-gap: 16px; } label { grid-column: 1 / 2; } input, button { grid-column: 2 / 3; } 


在浏览器中显示:
图片

在第一阶段,我没有添加任何美感,只需要对功能进行清晰的实现。 因此,页面只有一个标题,两个标签标签,上面的文本输入和下面的文本区域。 并输入用于将表单提交到服务器的信息。

未来计划


将来,我将考虑填写表格-我将添加一个滑块来设置上下文本的字体大小,并添加一个滑块来定位文本,还可以制作一个预览块。

除了meme生成器外,我还有一个针对该组的机器人,可以通过命令将图片发送到社区,并将图片从Actual_mem文件夹移动到sended_mem文件夹。 该机器人也是用Ruby制作的,但是如果有趣的话,我会再写一篇关于它的文章。

撰写本文是为了使新手程序员理解该语言并不复杂,并且您可以在短短几个小时内尽快实现自己的想法和项目,而不会出现任何紧张的情况。

源代码


github链接

选择红宝石


图片

Source: https://habr.com/ru/post/zh-CN468383/


All Articles