在我看来,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链接选择红宝石