หากคุณทำงานกับรูปภาพประเภทใดประเภทหนึ่งในแอปพลิเคชัน Ruby ของคุณ มีโอกาสดีที่คุณจะ อยากเปลี่ยนมัน ในหนึ่งทางหรืออีกทาง
เช่น ปรับขนาด (resize) เพื่อประหยัดพื้นที่ และดาวน์โหลดเร็วขึ้นสำหรับผู้ใช้
แตทำอย่างไร?
MiniMagick เป็น gem ที่ช่วยคุณ
มันเป็น interface ระหว่างโปรแกรม ImageMagick และโค้ด Ruby ของคุณ
มันช่วยให้คุณนำการแปลงรูปแบบต่างๆ ไปใช้กับรูปภาพ เพื่อปรับแต่งให้ตรงตามความต้องการ!
ก่อนอื่น:
คุณต้อง ติดตั้ง ImageMagick โดยใช้ package manager ของระบบปฏิบัติการ หรือดาวน์โหลด installer จากเว็บไซต์โปรเจกต์
จากนั้นด้วย mini_magick คุณสามารถใช้เมธอด Ruby ธรรมดา เพื่อทำการเปลี่ยนแปลงรูปภาพ
มา看看ตัวอย่าง!
การเปิดรูปภาพ
คุณสามารถเปิดรูปภาพได้ 2 วิธี:
MiniMagick::Image.open=> ทำสำเนาของรูปภาพMiniMagick::Image.new=> เปลี่ยนรูปภาพต้นฉบับ
เมธอด open รับทั้งชื่อไฟล์และ URL ดังนั้นคุณดึงรูปภาพจากเว็บโดยตรงได้
ผมจะใช้รูปนี้จาก Unsplash เว็บแชร์รูปฟรี

คุณสามารถโหลดรูปภาพได้แบบนี้:
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!
ขอบคุณที่อ่านครับ