Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Làm chủ biến đổi hình ảnh trong Ruby với MiniMagick

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:

  1. MiniMagick::Image.open => Tạo bản sao của hình ảnh
  2. MiniMagick::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í.

Làm chủ biến đổi hình ảnh trong Ruby với MiniMagick

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.