আপনি যদি আপনার রুবি অ্যাপ্লিকেশনে যেকোনো ধরনের ইমেজের সাথে কাজ করেন, তবে ভালো চান্স আছে যে আপনি সেগুলোকে এক বা অন্য উপায়ে পরিবর্তন করতে চাবেন।
যেন সেগুলো রিসাইজ করা হয় স্পেস বাঁচাতে এবং আপনার ইউজারদের জন্য ফাস্টার ডাউনলোড।
কিন্তু আপনি কীভাবে এটা করবেন?
MiniMagick হলো একটি জেম যা আপনাকে সাহায্য করতে পারে।
এটি ImageMagick প্রোগ্রাম এবং আপনার রুবি কোডের মাঝপথে একটি ইন্টারফেস।
এটি আপনাকে সব ধরনের ট্রান্সফরমেশন আপনার ইমেজে অ্যাপ্লাই করতে সাহায্য করে যাতে সেগুলো আপনার প্রয়োজন অনুযায়ী কাস্টমাইজ হয়!
প্রথমে:
আপনাকে ImageMagick ইনস্টল করতে হবে আপনার অপারেটিং সিস্টেম প্যাকেজ ম্যানেজার ব্যবহার করে, বা প্রজেক্টের ওয়েবসাইট থেকে ইনস্টলার ডাউনলোড করে।
তারপর mini_magick দিয়ে আপনি রেগুলার রুবি মেথড ব্যবহার করে আপনার ইমেজে পরিবর্তন আনতে পারেন।
চলুন কিছু উদাহরণ দেখি!
একটি ইমেজ খোলা
আপনি দুটি পদ্ধতিতে একটি ইমেজ খুলতে পারেন:
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"
এটি একটি বিশাল ইমেজ, তাই আপনি এটিকে রিসাইজ করুন!
এছাড়া, আমি চাই এটি রোটেট করা যাতে এটি হরিজেন্টাল হয় ভার্টিক্যালের বদলে।
রিসাইজ এবং রোটেট
আপনি একটি ইমেজ রিসাইজ করতে পারেন এভাবে:
image.resize "500x500"
এটি আপনাকে একটি একজাক্ট ডাইমেনশন দেয়, কিন্তু আপনি আস্পেক্ট রেশিও রক্ষা করে ইমেজকে একটি পার্সেন্টেজে স্কেল করতে চাইলে...
আপনি এভাবে করতে পারেন:
image.resize "25%"
এটি אורিজিনাল সাইজের ২৫% রিসাইজ, ২৫% দ্বারা রিসাইজ নয়।
এখন:
আপনাকে পরিবর্তনগুলো ডিস্কে ফাইল লিখে অ্যাপ্লাই করতে হবে।
এখানে কীভাবে:
image.write("/tmp/new_image.jpg")
আপনি যদি ইমেজটি ডায়রেক্ট মডিফিকেশনের জন্য খোলেন (এখানে new ব্যবহার করে, open না) তবে আপনাকে write ব্যবহার করতে হবে না।
ইমেজ কীভাবে ক্রপ করবেন
আপনি ইমেজের অংশগুলো ক্রপ করতে পারেন যেসব আপনি চান না এবং এটিকে ছোট করতে।
সিনট্যাক্সটি এভাবে:
<width> x <height> +<xoffset> +<yoffset>
উদাহরণস্বরূপ, আপনি যদি ইমেজের নিচের نصف অংশ কাটতে চান:
image.crop "100%x50%+0+0"
ভার্টিক্যাল ক্রপ অর্ধেক ইমেজের জন্য:
image.crop "50%x100%+0+0"
আপনি এই নম্বরগুলো দিয়ে এক্সপেরিমেন্ট করুন যতক্ষণ না আপনি যে ক্রপটি খুঁজছেন সেটি পান।
রাউন্ডেড ইমেজ তৈরি করা
আপনি যদি আপনার ইমেজকে রাউন্ডেড করতে চান, তবে আপনাকে মেথডের একটি সেট কম্বাইন করতে হবে।
এভাবে:
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
এটি দেওয়া সাইজের একটি খালি ক্যানভাস তৈরি করে, যা আপনি যে ইমেজটি রাউন্ড করতে চান তার সাইজ হওয়া উচিত।
তারপর:
এই ক্যানভাসটি ইমেজ দিয়ে ফিল করা হয়, মাঝপথে একটি সার্কেল আঁকা হয়, এবং সার্কেলের চারপাশের সব কিছু রিমুভ হয়ে যায়।
শেষে, ইমেজটি "circle.png" হিসেবে সেভ হয়।
লক্ষ্য করুন translate 2000, 2500 হলো ক্যানভাসের মাঝপথের কো-অর্ডিনেট।
যখন circle 0,0 2000,0-এ 2000 হলো সার্কেলের রেডিয়াস।
MiniMagick দিয়ে বর্ডার যোগ করা
MiniMagick দিয়ে বর্ডার যোগ করা দুনিয়ার সবচেয়ে সহজ জিনিস।
উদাহরণ:
img.border 10
আপনি কালার সেট করতে পারেন এভাবে:
img.bordercolor("white")
write করতে ভুলবেন না আপনার পরিবর্তনগুলো যদি আপনি open ব্যবহার করেন new-এর বদলে।
ইমেজ অপ্টিমাইজেশন
ইমেজগুলো ছোট করার বাশিতেও অপ্টিমাইজ করা যায়।
উদাহরণস্বরূপ, আপনি mini_magick-এ strip মেথড ব্যবহার করতে পারেন মেটাডেটা রিমুভ করতে।
এভাবে:
image.strip
আপনি এক্সট্রা অপ্টিমাইজেশন চাইলে image_optim জেম ব্যবহার করতে পারেন।
এভাবে:
require 'image_optim' image_optim.optimize_image!('orange.jpg')
ভিডিও টিউটোরিয়াল দেখুন
সারসংক্ষেপ
আপনি mini_magick রুবি জেম ব্যবহার করে ইমেজ পরিবর্তন (রোটেট, রিসাইজ, ক্রপ) করা শিখেছেন!
পড়ার জন্য ধন্যবাদ।