Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญการแปลงรูปภาพใน Ruby ด้วย MiniMagick

หากคุณทำงานกับรูปภาพประเภทใดประเภทหนึ่งในแอปพลิเคชัน Ruby ของคุณ มีโอกาสดีที่คุณจะ อยากเปลี่ยนมัน ในหนึ่งทางหรืออีกทาง

เช่น ปรับขนาด (resize) เพื่อประหยัดพื้นที่ และดาวน์โหลดเร็วขึ้นสำหรับผู้ใช้

แตทำอย่างไร?

MiniMagick เป็น gem ที่ช่วยคุณ

มันเป็น interface ระหว่างโปรแกรม ImageMagick และโค้ด Ruby ของคุณ

มันช่วยให้คุณนำการแปลงรูปแบบต่างๆ ไปใช้กับรูปภาพ เพื่อปรับแต่งให้ตรงตามความต้องการ!

ก่อนอื่น:

คุณต้อง ติดตั้ง ImageMagick โดยใช้ package manager ของระบบปฏิบัติการ หรือดาวน์โหลด installer จากเว็บไซต์โปรเจกต์

จากนั้นด้วย mini_magick คุณสามารถใช้เมธอด Ruby ธรรมดา เพื่อทำการเปลี่ยนแปลงรูปภาพ

มา看看ตัวอย่าง!

การเปิดรูปภาพ

คุณสามารถเปิดรูปภาพได้ 2 วิธี:

  1. MiniMagick::Image.open => ทำสำเนาของรูปภาพ
  2. MiniMagick::Image.new => เปลี่ยนรูปภาพต้นฉบับ

เมธอด open รับทั้งชื่อไฟล์และ URL ดังนั้นคุณดึงรูปภาพจากเว็บโดยตรงได้

ผมจะใช้รูปนี้จาก Unsplash เว็บแชร์รูปฟรี

เชี่ยวชาญการแปลงรูปภาพใน Ruby ด้วย MiniMagick

คุณสามารถโหลดรูปภาพได้แบบนี้:

require 'mini_magick'
image = MiniMagick::Image.open(
  "https://images.unsplash.com/photo-1516295615676-7ae4303c1c63"
)

ตอนนี้ที่คุณโหลดรูปภาพแล้ว คุณสามารถรับข้อมูลเกี่ยวกับมัน เช่น ขนาด, มิติ, รูปแบบ ฯลฯ

วิธีทำ:

image.dimensions # [3963, 5944]
image.type # "JPEG"
image.human_size # "20.7663MB"

นี่คือรูปภาพใหญ่มาก เรามา resize กัน!

นอกจากนี้ ผมอยากหมุนมันให้เป็นแนวนอน แทนแนวตั้ง

Resize และ Rotate

คุณสามารถ resize รูปภาพได้แบบนี้:

image.resize "500x500"

นี่ให้มิติที่แน่นอน แตถ้าคุณต้องการปรับขนาดรูปภาพเป็นเปอร์เซ็นต์ ขณะคงอัตราส่วน (aspect ratio) ไว้...

คุณสามารถทำได้:

image.resize "25%"

นี่คือการ resize เป็น 25% ของขนาดเดิม ไม่ใช่ resize โดย 25%

ตอนนี้:

คุณต้องนำการเปลี่ยนแปลงไปใช้จริงโดยเขียนไฟล์กลับไปที่ดิสก์

วิธีทำ:

image.write("/tmp/new_image.jpg")

หากคุณเปิดรูปภาพเพื่อแก้ไขโดยตรง (ใช้ new แทน open) คุณไม่ต้องใช้ write

วิธี Crop (ครอป) รูปภาพ

คุณสามารถครอปส่วนของรูปภาพ เพื่อลบสิ่งที่ไม่ต้องการ และทำให้มันเล็กลง

ไวยากรณ์คือ:

<width> x <height> +<xoffset> +<yoffset>

ตัวอย่าง หากคุณต้องการตัดครึ่งล่างของรูปภาพ:

image.crop "100%x50%+0+0"

สำหรับการครอปแนวตั้งครึ่งรูป:

image.crop "50%x100%+0+0"

คุณสามารถเล่นกับตัวเลขเหล่านี้จนกว่าจะได้การครอปที่คุณต้องการ

การสร้างรูปภาพมน (Rounded Image)

หากคุณมองหาวิธีทำให้รูปภาพมน คุณจะต้องรวมชุดเมธอด

เช่นนี้:

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

สิ่งนี้สร้าง canvas ว่างขนาดที่กำหนด ซึ่งควรเป็นขนาดของรูปภาพที่คุณต้องการให้มน

จากนั้น:

Canvas นี้ถูกเติมด้วยรูปภาพ วาดวงกลมตรงกลาง และลบทุกอย่างรอบวงกลม

สุดท้าย รูปภาพถูกบันทึกเป็น "circle.png"

สังเกตว่า translate 2000, 2500 คือพิกัดกึ่งกลางของ canvas

ขณะที่ 2000 ใน circle 0,0 2000,0 คือรัศมีของวงกลม

วิธีเพิ่มขอบ (Border) ด้วย MiniMagick

การเพิ่มขอบเป็นเรื่องง่ายที่สุดกับ mini_magick

ตัวอย่าง:

img.border 10

คุณตั้งสีได้แบบนี้:

img.bordercolor("white")

อย่าลืม write การเปลี่ยนแปลง หากคุณใช้ open แทน new

การเพิ่มประสิทธิภาพรูปภาพ (Image Optimization)

รูปภาพสามารถเพิ่มประสิทธิภาพได้เกินกว่าการทำให้เล็กลง

ตัวอย่าง คุณสามารถใช้เมธอด strip ใน mini_magick เพื่อลบ metadata

เช่นนี้:

image.strip

หากคุณต้องการ optimization เพิ่มเติม คุณสามารถใช้ gem อย่าง image_optim

เช่นนี้:

require 'image_optim'
image_optim.optimize_image!('orange.jpg')

ดูวิดีโอสอน

สรุป

คุณได้เรียนรู้วิธีเปลี่ยนรูปภาพ (หมุน, ปรับขนาด, ครอป) โดยใช้ gem mini_magick ของ Ruby!

ขอบคุณที่อ่านครับ