Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

পিএইচপি দিয়ে ইমেজের আকার পরিবর্তনের সমাধান

by
Read Time:12 minsLanguages:

Bengali (বাংলা) translation by Bint Salim (you can also view the original English article)

কখনও পিএইচপি দিয়ে ইমেজের আকার পরিবর্তনের জন্য কোন সহজ পদ্ধতি ব্যবহার করতে চেয়েছিলেন কি? ব্যস, এ জন্যই পিএইচপি ক্লাস – পুনরায় ব্যবহারযোগ্য ফাংশনালিটি যা কল করে আমরা পর্দার আড়ালে এই কঠিন কাজটি করিয়ে নিতে পারি। এখানে আমরা শিখতে যাচ্ছি, কীভাবে আমাদের নিজস্ব ক্লাস তৈরি করতে হবে, যেটা ভালভাবে নির্মিত হবে এবং পাশাপাশি বিস্তৃতও করা যাবে। আকার পরিবর্তন করা সহজ হওয়া উচিত? কতটা সহজ? তিন ধাপ সম্পর্কে আপনার কি ধারণা !


সূচনা

আমাদের ক্লাসটি কেমন হওয়া উচিত এবং তা দিয়ে কি অর্জন করার চেষ্টা করছি, এখানে তার একটি দ্রুত আভাস দিবো:

  • সহজে ব্যবহারযোগ্য
  • যেকোনো ফরম্যাটে ব্যবহার করতে সক্ষম। যেমন, খোলা, আকার পরিবর্তন, এবং বিভিন্ন ইমেজ ফরম্যাটের নম্বর সংরক্ষন করা।
  • বুদ্ধিমান মাপ - ছবির কোন বিকৃতি ছাড়াই!

দ্রষ্টব্য: এটি ক্লাস এবং অবজেক্ট কিভাবে তৈরি করতে হয় সে সম্পর্কে কোনও টিউটোরিয়াল নয়, যদিও এই দক্ষতা পরবর্তীতে সাহায্য করবে, তবে, এই টিউটোরিয়ালটি অনুসরণ করার জন্য এটি প্রয়োজনীয় নয়।

করার জন্য এখানে আরও অনেক কিছু আছে - চলুন শুরু করি।


ধাপ ১ঃ প্রস্তুতি

আমরা খুব সহজেই কাজটি শুরু করব। তাই এই কাজের জন্য নির্দিষ্ট ডাইরেক্টরিতে দুটি ফাইল তৈরি করুন: index.php নামে একটি, অন্যটি resize-class.php


ধাপ ২ঃ অবজেক্ট কল করা

আমরা কি অর্জন করবো সে সম্পর্কে আপনাকে একটি প্রাথমিক ধারনা দিতে, ইমেজ রিসাইজের জন্য নির্দিষ্ট কলগুলো কোডিং করার মাধ্যমে আমরা শুরু করতে যাচ্ছি। আপনার index.php ফাইল খুলুন এবং নিম্নলিখিত কোড যোগ করুন।

আপনি দেখতে পাচ্ছেন যে, আমরা যা করেছি সে সম্পর্কে এখানে একটি চমৎকার যুক্তি আছে। আমরা ইমেজ ফাইলটি খুলেছি, ইমেজের আকার পরিবর্তনের জন্য মাত্রা নির্ধারণ করেছি, এবং আকার পরিবর্তনের পর কি ধরনের ইমেজ ফাইল হবে তা ঠিক করেছি।
তারপর আমরা যে ধরনের ইমেজ ফরম্যাট ও মান চাই সে অনুযায়ী ইমেজ সংরক্ষন করেছি। এবার আপনার index.php ফাইলটি সেভ করুন ও বন্ধ করুন।

উপরের কোডে আপনি দেখতে পাচ্ছেন যে আমরা একটি jpg ফাইল খুলেছি কিন্তু সেভ করেছি gif ফরম্যাটে। মনে রাখবেন, এটাই হচ্ছে নমনীয়তা।


ধাপ ৩ঃ ক্লাস কাঠামো

এটা হচ্ছে অবজেক্ট-ভিত্তিক প্রোগ্রামিং (OOP) যা এই সহজ ধারণাটি তৈরি করে। একটি ক্লাসকে প্যাটার্ন হিসেবে চিন্তা করুন; আপনি এটা দিয়ে তথ্য সংকুচিত করতে পারবেন - একটি নিরর্থক শব্দ যা দিয়ে শুধুমাত্র তথ্য গোপন করা বুঝায়। আমরা অতঃপর এই ক্লাসটি বারংবার ব্যবহার করতে পারি, কোনও ধরনের রিসাইজিং কোড পুনর্লেখন ছাড়াই  - আপনাকে শুধুমাত্র সঠিক পদ্ধতিটি কল করতে হবে, ঠিক যেভাবে আমরা দ্বিতীয় ধাপে করেছি। একবার আমাদের এই প্যাটার্নগুলো তৈরি হয়ে গেলে, আমরা এই প্যাটার্নের উদাহরণসমূহ তৈরি করবো, যেটাকে অবজেক্ট বলা হয়।

"কন্সট্রাকটর হিসাবে পরিচিত কন্সট্রাক্ট ফাংশন হল একটি বিশেষ ক্লাস বা শ্রেণী পদ্ধতি যা আপনি নতুন অবজেক্ট তৈরি করার সময় ক্লাস দ্বারা ডাকা বা কল করা হয়।"

চলুন, আমাদের রিসাইজ ক্লাস তৈরি করতে শুরু করি। আপনার resize-class.php ফাইলটি খুলুন। নীচে একটি সত্যিকারের মৌলিক ক্লাস কাঠামো গঠিত হয়েছে যা আমি 'resize' নামে নামকরণ করেছি। ক্লাস ভেরিয়েবল কমেন্ট লাইনটি লক্ষ্য করুন; এখানে আমরা পরে আমাদের গুরুত্বপূর্ণ ক্লাস ভেরিয়েবল যোগ করতে শুরু করবো।

কনস্ট্রাক্ট ফাংশন, যেটা কনস্ট্রাক্টর হিসেবে পরিচিত, তা আসলে একটি বিশেষ ক্লাস মেথড বা পদ্ধতি (মেথড শব্দটি ফাংশনের মতই, যদিও আমরা যখন ক্লাস এবং অবজেক্ট নিয়ে কথা বলি, তখন মেথড শব্দটি প্রায়ই ব্যবহার করা হয়) যা নতুন ক্লাস দ্বারা কল করা হয়, যখন আমরা কোনও নতুন অবজেক্ট তৈরি করি। এটা আমাদের এমন কিছু শুরু করার জন্য উপযুক্ত করে তোলে - যা আমরা পরবর্তী ধাপে তৈরি করবো।

লক্ষ্য করুন, কনস্ট্রাক্ট মেথডের জন্য এখানে দুটি আন্ডারস্কোর রয়েছে।


ধাপ ৪ঃ কন্সট্রাক্টর

আমরা উপরের কন্সট্রাকটর পদ্ধতিটি সংশোধন করতে যাচ্ছি। প্রথমত, আমাদের ইমেজ পরিবর্তনের জন্য ফাইল নাম (এবং পাথ) এর মধ্য দিয়ে যেতে হবে। আমরা এই ভেরিয়েবলটিকে $fileName ডাকতে পারি।

আমাদের এই ফাইলটিকে পিএইচপির মাধ্যমে খুলতে হবে (আরও নির্দিষ্টভাবে বললে পিএইচপি জিডি লাইব্রেরি দিয়ে) যাতে পিএইচপি ইমেজটিকে বুঝতে পারে। আমরা এটা কাস্টম মেথড 'openImage' দ্বারাও করতে পারি। আমি দেখাবো কীভাবে এই মেথডটি ব্যবহার করবেন।
এটা মুহূর্তেই কাজ করে, কিন্তু এখন, আমাদের একটি ক্লাস ভেরিয়েবল হিসাবে এর ফলাফল সংরক্ষণ করতে হবে। একটি ক্লাস ভেরিয়েবল হচ্ছে একটি সাধারন ভেরিয়েবল - কিন্তু এটা শুধুমাত্র সেই ক্লাসের জন্যই নির্দিষ্ট। ক্লাস ভেরিয়েবল কমেন্টটি মনে আছে কি যা আমি পূর্বে উল্লেখ করেছিলাম? 'private $image;' টাইপ করে ব্যাক্তিগত ভেরিয়েবল হিসেবে ইমেজ যোগ করুন। ভেরিয়েবল হিসেবে 'Private' সেট করে আপনি এই ভেরিয়েবলের জন্য এমন একটি সুযোগ তৈরি করলেন যাতে কেবল নির্ধারিত ক্লাস দ্বারাই প্রবেশ করা যাবে। এখন থেকে আমরা আমাদের খোলা ছবিতে কল করতে পারি, যা একটি রিসোর্স বা সম্পদ হিসাবে পরিচিত। এটা আমরা পরে করব যখন আমরা পুনরায় আকার পরিবর্তন করব।

এখানে যখন আছি, তবে চলুন, ইমেজের উচ্চতা এবং প্রস্থ সঞ্চয় করা যাক। আমার মনে হচ্ছে, এগুলো পরে কাজে লাগবে।

আপনি এবার নিম্নলিখিত কোডগুলো পেলেন। 

imagesx এবং imagesy মেথডগুলো হচ্ছে বিল্ট-ইন ফাংশন যা জিডি লাইব্রেরীর অংশ। এগুলো যথাক্রমে আপনার ছবির প্রস্থ এবং উচ্চতা পুনরুদ্ধার করে।


ধাপ ৫ঃ ইমেজ খোলা

আগের ধাপে, আমরা কাস্টম মেথড বা পদ্ধতি openImage কল করি। এই ধাপে আমরা সেই পদ্ধতি তৈরি করতে যাচ্ছি। আমরা স্ক্রিপ্টটি দিয়ে আমাদের মত করে চিন্তা করতে চাই, তাই এটার ভিতর দিয়ে যাওয়া ফাইলের প্রকারের উপর ভিত্তি করে, এই স্ক্রিপ্টটি ঠিক করবে ইমেজ খোলার জন্য কোন ধরনের জিডি লাইব্রেরি ফাংশন কল করতে হবে। এটি একটি ফাইল এক্সটেনশনের সাথে সুইচ স্টেটমেন্ট তুলনা করে সহজেই অর্জন করা যায়।

আমরা যেই ফাইলগুলি রিসাইজ করতে চাই সেগুলোর ভিতর দিয়ে এই পদ্ধতিটি পার করতে হবে, যাতে কাঙ্ক্ষিত ফাইল রিসোর্সগুলো ফেরত পাই।


ধাপ ৬ঃ কীভাবে রিসাইজ হবে

এটা হচ্ছে সেই জায়গা যেখানে আসল কাজ হয়। এই ধাপটি আমরা আসলে কি করতে যাচ্ছি শুধু তার একটি ব্যাখ্যা - তাই এখানে কোন হোমওয়ার্ক নেই। পরবর্তী ধাপে, আমরা একটি পাবলিক মেথড তৈরি করবো যা আকার পরিবর্তনের জন্য পরবর্তীতে কল করবো; তাই এটি প্রস্থ এবং উচ্চতার ক্ষেত্রে ফলপ্রদ হবে, একই সাথে কীভাবে ইমেজের আকার পরিবর্তন করতে চাই সে ব্যপারেও কার্যকর হবে। চলুন, এই মুহূর্তে এ সম্পর্কে কিছু বলি। এখানে, কিছু পরিস্থিতি আসবে যখন আপনি একটি ইমেজ একটি নির্দিষ্ট সাইজ অনুযায়ী পরিবর্তন করতে চাইবেন। দারুণ ব্যপার, তাহলে চলুন এটা লিপিবদ্ধ করি। কিন্তু এমনও হতে পারে যখন আপনাকে শত শত ইমেজ পুনঃনির্ধারণ করতে হবে এবং প্রতি ইমেজের জন্য একটি ভিন্ন অনুপাত থাকবে - পোর্ট্রেইট ইমেজগুলোর কথা ভাবুন। একই সাইজে এগুলোর আকার পরিবর্তন অনেক সময় বিকৃতি ঘটাতে পারে। আমরা যদি আমাদের অপশন সমুহের দিকে তাকাই তাহলে বিকৃতি প্রতিরোধ করতে পারি:

  1. ইমেজের অনুপাত ঠিক রেখে নতুন ইমেজ মাত্রার যতটা কাছাকাছি সম্ভব, সে অনুযায়ী আকার পরিবর্তন করতে হবে।
  2. নতুন ইমেজ মাত্রা অনুযায়ী যতটা পারা যায় ইমেজ রিসাইজ করা এবং বাকিটা ছাঁটাই করা।

আপনার প্রয়োজনের উপর ভিত্তি করে উভয় অপশন কার্যকর হবে।

হ্যাঁ। আমরা উপরের সবগুলো একে একে পরীক্ষা করতে যাচ্ছি। সংক্ষিপ্তভাবে, আমরা যে অপশনগুলো প্রদান করতে যাচ্ছি:

  1. সঠিক প্রস্থ / উচ্চতা দ্বারা পুনরায় আকার প্রদান। (সঠিকভাবে)
  2. প্রস্থ দ্বারা পুনরায় আকার প্রদান - সঠিক প্রস্থ বসানো হবে, উচ্চতা সে অনুপাত অনুযায়ী সমন্বয় করা হবে। (ল্যান্ডস্কেপের ক্ষেত্রে)
  3. উচ্চতা দ্বারা পুনরায় আকার প্রদান - প্রস্থ দ্বারা পুনরায় আকার প্রদানের মত, কিন্তু উচ্চতা বসানো হবে এবং প্রস্থ ডাইনামিকভাবে সমন্বয় করা হবে। ( পোরট্রেইটের ক্ষেত্রে)
  4. ২ এবং ৩ থেকে স্বয়ংক্রিয় নির্ধারণ। আপনি যদি একটি ফোল্ডারের বিভিন্ন ইমেজের মধ্যে লুপ তৈরি করেন তাহলে স্ক্রিপ্টটিকে এগুলো কীভাবে চালিত করবে, তার সুযোগ দিতে পারেন। (স্বয়ংক্রিয়)
  5. আকার পরিবর্তন করা, তারপর ছাঁটাই করা। এটা আমার প্রিয়। বিকৃতি ছাড়াই, সঠিক আকৃতি। (ছাঁটাই)

ধাপ ৭ঃ রিসাইজিং। চলুন করা যাক!

রিসাইজ মেথডের দুটি অংশ আছে। প্রথমটি হচ্ছে কিছু কাস্টম পদ্ধতি তৈরির মাধ্যমে একটি ইমেজের সর্বোত্তম প্রস্থ ও উচ্চতা পাওয়া - এবং তা অবশ্যই উপরে বর্ণিত রিসাইজ অপশনের মাধ্যমে। প্রস্থ এবং উচ্চতা একটি অ্যারে হিসাবে ফিরে আসবে এবং তাদের নিজস্ব ভেরিয়েবল অনুযায়ী বসানো হবে। রেফারেন্সের মত করে পাস করতে চেষ্টা করুন - কিন্তু আমি এটা খুব একটা পছন্দ করি না।

দ্বিতীয় অংশটি হচ্ছে যা, প্রকৃত রিসাইজটি সঞ্চালিত করে। এই টিউটোরিয়ালের আকার ছোট রাখতে, আমি আপনাকে নিম্নলিখিত GD ফাংশনগুলি পড়ে দেখতে বলবো:

আমরা imagecreatetruecolor পদ্ধতির আউটপুট (একটি নতুন অবিকল রংসহ চিত্র) একটি ক্লাস ভেরিয়েবল হিসাবেও সংরক্ষণ করেছি। আপনার অন্যান্য ক্লাস ভেরিয়েবলের সাথে 'private $imageResized;' ভেরিয়েবলটিও যোগ করুন।

জিডি লাইব্রেরী নামে পরিচিত পিএইচপি মডিউলের মাধ্যমে পুনরায় আকার দেওয়া হয়। আমরা যেসব পদ্ধতি ব্যবহার করছি তার অনেকগুলোই এই লাইব্রেরী থেকে সরবরাহ করা হয়।


ধাপ ৮ঃ ডিসিশন ট্রি

আপনি এখন যত বেশি কাজ করবেন, ইমেজের আকার পরিবর্তনের সময় আপনাকে তত কম কাজ করতে হবে। এই পদ্ধতিটি আপনার রিসাইজ অপশনের উপর ভিত্তি করে পুনয়ায় প্রস্থ ও উচ্চতার আকার পরিবর্তনের লক্ষ্য অর্জনের জন্য সেরা পথটিই বেছে নেয়। আমরা পরবর্তী ধাপে যা তৈরি করতে যাচ্ছি, তা উপযুক্ত পদ্ধতিটিকেই কল করবে।


ধাপ ৯ঃ অনুকূল মাত্রা

আমরা ইতিমধ্যেই আলোচনা করেছি যে এই চারটি পদ্ধতি কি করতে পারে। এগুলো হচ্ছে মৌলিক গনিত, এবং এই গণনা আসলেই আমাদের জন্য উপযুক্ত।


ধাপ ১০ঃ ছাঁটাই

আপনি যদি ছাঁটাই করতে পছন্দ করেন - অর্থাৎ আপনি যদি ক্রপ অপশন ব্যবহার করতে চান, তাহলে আপনাকে আরও একটি ছোট্ট ধাপ পার হতে হবে। আমরা ইমেজটিকে মাঝখান থেকে ছাঁটাই
করতে চাচ্ছি। ছাঁটাই করা, আকার পরিবর্তনের মতই একটি প্রক্রিয়া কিন্তু এটাকে আরও বেশ কিছু সাইজিং প্যারামিটারের ভিতর দিয়ে যেতে হয়।


ধাপ ১১ঃ ইমেজ সংরক্ষন

আমরা প্রায় শেষের পথে। এখন ইমেজ সংরক্ষন করার সময়। আমরা যেই পথ অতিক্রম করে এসেছি, তাতে ইমেজের মান হবে ০-১০০ পর্যন্ত, ১০০ ই সেরা, এবং অবস্থা বুঝে সঠিক পদ্ধতি কল করবে। ইমেজের মান সম্পর্কে বেশ কিছু জিনিস লক্ষ্যনীয়: JPG ০-১০০ এর একটি মাপকাঠি ব্যবহার করে, ১০০ হচ্ছে সবথেকে সেরা।  GIF ইমেজের জন্য কোনও ইমেজ মান নিয়ন্ত্রক নেই। PNG এর আছে, কিন্তু এগুলো ০-৯ মাপকাঠি ব্যবহার করে, ০ হচ্ছে সবচেয়ে সেরা। যদি আমাদের প্রতিটা ইমেজ সেভ করার সময় এগুলো মনে করতে ও ঠিক করতে হয়, তবে এটা কোনভাবেই কাম্য নয়। তাই আমরা এইসব কিছুর ক্ষেত্রে একটি নির্দিষ্ট মান নির্ধারণ করে দিতে পারি।

আমাদের ডিস্কটিকে কিছু স্মৃতি থেকে মুক্ত করতে এখন ইমেজ রিসোর্সটি ধ্বংস করার সবচেয়ে ভালো সময়। আপনি যদি উৎপন্ন স্ক্রিপ্টটি ব্যবহার করতে চান, তাহলে সংরক্ষিত ইমেজগুলোর ফলাফল দেখে নেয়া একটি ভাল ধারণা। 


পরিশিষ্ট

হ্যাঁ বন্ধুরা, এ পর্যন্তই। এই টিউটরিয়ালটি অনুসরণ করার জন্য আপনাকে ধন্যবাদ, আমি আশা করি এটি আপনার কাজে লাগবে। নীচের মন্তব্যের মাধ্যমে আপনার প্রতিক্রিয়া জানতে পারলে খুশি হবো।

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.