Generator meme Ruby untuk menarik minat pada bahasa

gambar

Menurut pendapat saya, bahasa Ruby tidak lagi sepopuler tahun 2012 - 2014, jadi saya memiliki keinginan, sampai bahasa tersebut benar-benar dilupakan, untuk mencoba menyampaikannya kepada orang banyak lagi, karena Ruby, menurut saya, adalah bahasa yang paling nyaman dan praktis untuk pengembangan web.
Seminggu yang lalu, saya tergoda untuk membuat komunitas saya di telegram, menemukan programmer pemula dan membawa pengembangan Ruby ke sisi yang cerah.

Rencananya adalah membuat komunitas, tetapi tidak di mana setiap orang akan menulis tentang masalah dan bug mereka pada proyek (ada cukup banyak komunitas seperti itu), tetapi sebuah komunitas di mana informasi yang berguna dari dunia Ruby akan diposting.

Pertama-tama, saya ingin membuat posting dalam bentuk meme, tetapi dengan konten pendidikan.

Seperti itu
gambar

Ketika saya membuat 10 gambar melalui situs generator meme, saya menyadari bahwa semuanya sangat lambat dan bermasalah, ditambah dengan semuanya, saya hanya membuat 10 metode ruby, dan sekitar 1.000 lebih dari mereka dapat diketik. Diputuskan untuk membuat generator meme Anda sendiri dan bahkan mengikat antarmuka untuk semua ini dan melakukan semuanya menggunakan bahasa Ruby.

Pembuatan Gambar dengan RMagic


Agar tidak terlalu repot dengan rendering, permata `rmagick` sudah ada diambil sebagai dasar. Berkat permata ini, kami dapat dengan mudah memodifikasi gambar.

Dalam kode di bawah ini, saya membuat objek baru (teks) dalam bentuk gambar dan menempatkannya pada gambar yang diambil sebagai dasar.

Kode logika utama
 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") 


Setelah mengisi atribut dasar seperti ukuran font, keberanian, warna dan gravitasi teks. Selanjutnya, saya menyimpan gambar di folder actual_mem. Mengapa saya perlu folder ini akan kembali lagi nanti.

Antarmuka Web di Sinatra


Sekarang itu perlu untuk mengimplementasikan antarmuka. Agar tidak menyebarkan proyek Rails besar demi aplikasi kecil, saya memutuskan untuk menggunakan kerangka kerja Ruby lain yang disebut Sinatra

Hasilnya adalah file kecil dengan kode untuk menjalankan aplikasi

File Peluncuran Aplikasi 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 


Anda dapat menemukan dokumentasi tentang sinatra di situs web resmi, saya tidak akan menjelaskan banyak hal di sini.
Saya mengacaukan CSS Grid sedikit dan menggunakan haml saya membuat halaman entri data untuk membuat meme

Kode 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"} 


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


Tampilan di browser:
gambar

Saya tidak menambahkan keindahan pada tahap pertama, saya hanya membutuhkan implementasi fungsional yang jelas. Oleh karena itu, halaman hanya memiliki judul, dua label tag, input untuk teks atas dan textarea untuk yang lebih rendah. Dan juga input untuk mengirimkan formulir ke server.

Rencana masa depan


Di masa depan saya berpikir untuk menyelesaikan formulir - Saya akan menambahkan bilah geser untuk mengatur ukuran font teks atas dan bawah, bilah geser untuk memposisikan teks, dan Anda juga dapat membuat blok pratinjau.

Selain generator meme, saya juga menerapkan bot untuk grup, yang, berdasarkan perintah, mengirimkan gambar ke komunitas dan memindahkan gambar dari folder aktual_mem ke folder sended_mem. Bot juga dibuat di Ruby, tetapi jika menarik, saya akan membuat artikel tentang itu di lain waktu.

Artikel itu ditulis sehingga programmer pemula mengerti bahwa bahasa itu tidak rumit dan Anda dapat mewujudkan ide dan proyek Anda secepat mungkin dan tanpa situasi tegang hanya dalam beberapa jam.

Kode sumber


tautan github

Pilih Ruby


gambar

Source: https://habr.com/ru/post/id468383/


All Articles