Nếu bạn làm việc với bất kỳ loại hình ảnh nào trong ứng dụng Ruby, có khả năng lớn bạn sẽ muốn thay đổi chúng theo một cách hoặc cách khác.
Như resize chúng để tiết kiệm dung lượng & tải nhanh hơn cho người dùng.
Nhưng làm thế nào để làm điều này?
MiniMagick là gem có thể giúp bạn.
Nó là giao diện giữa chương trình ImageMagick & code Ruby của bạn.
Nó giúp bạn áp dụng mọi loại biến đổi cho hình ảnh để tùy chỉnh theo nhu cầu!
Trước hết:
Bạn cần cài đặt ImageMagick dùng package manager của hệ điều hành, hoặc tải installer từ trang web dự án.
Sau đó với mini_magick bạn có thể dùng phương thức Ruby thông thường để thay đổi hình ảnh.
Hãy xem vài ví dụ!
Mở hình ảnh (Opening an Image)
Bạn có thể mở hình ảnh theo hai cách:
MiniMagick::Image.open=> Tạo bản sao của hình ảnhMiniMagick::Image.new=> Thay đổi hình ảnh gốc
Phương thức open nhận cả tên file & URL, nên bạn có thể kéo hình ảnh trực tiếp từ web.
Tôi sẽ dùng hình ảnh này từ Unsplash, trang chia sẻ ảnh miễn phí.

Bạn có thể load hình ảnh như sau:
require 'mini_magick' image = MiniMagick::Image.open( "https://images.unsplash.com/photo-1516295615676-7ae4303c1c63" )
Bây giờ bạn đã load hình ảnh, bạn có thể lấy thông tin về nó, như kích thước, kích thước, định dạng, v.v.
Cách làm:
image.dimensions # [3963, 5944] image.type # "JPEG" image.human_size # "20.7663MB"
Đây là hình ảnh KHỦNG, nên hãy resize nó!
Cũng, tôi muốn xoay nó cho nó nằm ngang thay vì dọc.
Resize & Rotate
Bạn có thể resize hình ảnh như sau:
image.resize "500x500"
Điều này cho kích thước chính xác, nhưng nếu bạn muốn scale hình ảnh theo phần trăm trong khi giữ tỷ lệ khung hình…
Bạn có thể làm thế này:
image.resize "25%"
Đây là resize xuống 25% kích thước gốc, không phải resize BỞI 25%.
Bây giờ:
Bạn cần áp dụng thay đổi bằng cách ghi file trở lại disk.
Cách làm:
image.write("/tmp/new_image.jpg")
Nếu bạn mở hình ảnh để sửa trực tiếp (dùng new, thay vì open) thì bạn không cần dùng write.
Cách Crop hình ảnh (Crop an Image)
Bạn có thể crop phần của hình ảnh để bỏ điều bạn không muốn & làm nó nhỏ hơn.
Cú pháp là:
<width> x <height> +<xoffset> +<yoffset>
Ví dụ, nếu bạn muốn cắt nửa dưới của hình ảnh:
image.crop "100%x50%+0+0"
Để crop dọc nửa hình ảnh:
image.crop "50%x100%+0+0"
Bạn có thể chơi với các con số này cho đến khi tìm được crop bạn muốn.
Tạo hình ảnh tròn (Creating a Rounded Image)
Nếu bạn muốn làm hình ảnh tròn, bạn sẽ cần kết hợp một tập phương thức.
Như thế này:
MiniMagick::Tool::Convert.new do |img| img.size '3900x5000' img << 'xc:transparent' img.fill "apple.jpg" img.draw "translate 2000, 2500 circle 0,0 2000,0" img.trim img << 'circle.png' end
Điều này tạo canvas rỗng với kích thước cho trước, nên là kích thước hình ảnh bạn muốn làm tròn.
Sau đó:
Canvas này được fill với hình ảnh, một vòng tròn được vẽ ở giữa, và mọi thứ quanh vòng tròn bị loại bỏ.
Cuối cùng, hình ảnh được lưu là "circle.png".
Chú ý translate 2000, 2500 là tọa độ giữa canvas.
Trong khi 2000 trong circle 0,0 2000,0 là bán kính vòng tròn.
Cách thêm Border với MiniMagick
Thêm border là việc dễ dàng nhất trên đời với mini_magick.
Ví dụ:
img.border 10
Bạn có thể đặt màu như sau:
img.bordercolor("white")
Đừng quên write thay đổi nếu bạn dùng open thay vì new.
Tối ưu hóa hình ảnh (Image Optimization)
Hình ảnh có thể được tối ưu hóa hơn việc làm nhỏ chúng.
Ví dụ, bạn có thể dùng phương thức strip trong mini_magick để xóa metadata.
Như thế này:
image.strip
Nếu bạn muốn tối ưu thêm, bạn có thể dùng gem như image_optim.
Như thế này:
require 'image_optim'
image_optim.optimize_image!('orange.jpg')
Xem Video Tutorial
Tóm tắt
Bạn đã học cách thay đổi hình ảnh (xoay, resize, crop) dùng gem mini_magick Ruby!
Cảm ơn bạn đã đọc.