Skip to content

ইমেজ অপ্টিমাইজেশন

কোয়েরি প্যারামিটার ব্যবহার করে IPFS থেকে সার্ভ করা ইমেজ on-the-fly-তে ট্রান্সফর্ম এবং অপ্টিমাইজ করুন। এটি একটি পাবলিক endpoint যার প্রমাণীকরণ প্রয়োজন নেই। প্রথমে ফাইল আপলোড দিয়ে ইমেজ IPFS-এ যোগ করুন, তারপর এখানে বর্ণিত ট্রান্সফর্ম প্যারামিটার দিয়ে এটি সার্ভ করুন — CID কীভাবে কন্টেন্ট শনাক্ত করে তা জানতে কন্টেন্ট অ্যাড্রেসিং দেখুন।

CID দিয়ে ইমেজ রিসাইজ, কনভার্ট ও ক্রপ করুন (GET /image/:cid)

GET https://api.ipfs.ninja/image/:cid

প্রদত্ত CID-তে থাকা ইমেজটি প্রদত্ত কোয়েরি প্যারামিটার অনুযায়ী ট্রান্সফর্ম করে রিটার্ন করে। যদি কোনো ট্রান্সফর্ম প্যারামিটার সরবরাহ না করা হয়, তাহলে অনুরোধটি IPFS গেটওয়েতে মূল ইমেজে 302-রিডাইরেক্ট হয়।

Path প্যারামিটার

প্যারামিটারধরনপ্রয়োজনীয়বর্ণনা
cidstringহ্যাঁইমেজের IPFS কন্টেন্ট আইডেন্টিফায়ার।

কোয়েরি প্যারামিটার

প্যারামিটারধরনডিফল্টবর্ণনা
wintegerআউটপুট প্রস্থ পিক্সেলে। পরিসীমা: 1–4096। ≤ 0 বা সংখ্যা নয় এমন মান উপেক্ষা করা হয়।
hintegerআউটপুট উচ্চতা পিক্সেলে। পরিসীমা: 1–4096। ≤ 0 বা সংখ্যা নয় এমন মান উপেক্ষা করা হয়।
formatstringআউটপুট ফরম্যাট: webp, jpeg, png বা avif। কেস-সংবেদনশীল (lowercase)। অজানা মান উপেক্ষা করা হয়।
qualityinteger80কম্প্রেশন কোয়ালিটি, 1–100। শুধু webp, jpeg এবং avif-এর জন্য প্রযোজ্য। png ক্ষতিহীন এবং এটি উপেক্ষা করে।
fitstringcoverইমেজ কিভাবে ডাইমেনশনের সাথে ফিট হবে: cover, contain, fill, inside বা outside

নোট: প্যারামিটারটি quality, q নয়। সাধারণ সংক্ষিপ্ত উপনাম (q, width, height, fmt) স্বীকৃত নয়।

যে অনুরোধে w, h বা format-এর কোনোটিই সরবরাহ করা হয় না সেটি no-op হিসেবে গণ্য হয় এবং মূল ইমেজে 302-রিডাইরেক্ট হয়। শুধু quality এবং fit ট্রান্সফর্ম ট্রিগার করে না।

Fit মোড

ModeBehavior
coverউভয় ডাইমেনশন কভার করতে ক্রপ করুন (ডিফল্ট)।
containঅ্যাসপেক্ট রেশিও সংরক্ষণ করে উভয় ডাইমেনশনের মধ্যে ফিট করুন। খালি জায়গা থাকতে পারে (ফরম্যাট অনুযায়ী স্বচ্ছ বা কালো)।
fillউভয় ডাইমেনশন ঠিক ঠাক ভরাট করতে প্রসারিত করুন। ইমেজ বিকৃত করতে পারে।
insidecontain-এর মতো, কিন্তু শুধু ছোট করে, কখনো বড় করে না।
outsidecover-এর মতো, কিন্তু শুধু ছোট করে, কখনো বড় করে না।

আপস্কেলিং

ট্রান্সফর্মার কখনো ইমেজকে তার সোর্স ডাইমেনশনের বাইরে বড় করে না। যদি আপনি 1200px-প্রস্থের সোর্সের জন্য w=2000 অনুরোধ করেন, আউটপুট 1200px প্রস্থের হবে। এটি সমস্ত fit মোডে প্রযোজ্য।

রেসপন্স

StatusWhenBody
200এই অনুরোধে ট্রান্সফর্ম তৈরি হয়েছে।বাইনারি ইমেজ বাইট। Content-Type অনুরোধকৃত ফরম্যাটের সাথে মেলে।
302কোনো ট্রান্সফর্ম প্যারাম সরবরাহ করা হয়নি, অথবা পূর্বে ট্রান্সফর্ম করা ফলাফল ইতিমধ্যে ক্যাশ করা আছে।Location হেডার মূল ইমেজ বা https://ipfs.ninja/image-cache/...-এ থাকা ক্যাশকৃত ফলাফলের দিকে নির্দেশ করে।
400cid path প্যারামিটার অনুপস্থিত।{ "error": "cid required" }
404গেটওয়েতে CID পাওয়া যায়নি।{ "error": "CID not found" }
500অপ্রত্যাশিত ত্রুটি (দূষিত ইমেজ, ট্রান্সফর্ম ব্যর্থতা ইত্যাদি)।{ "error": "<message>" }

সমস্ত 200 এবং 302-ক্যাশ রেসপন্স Cache-Control: public, max-age=31536000, immutable সহ সার্ভ করা হয়। নিচের ক্যাশিং দেখুন।

উদাহরণ অনুরোধ

400px প্রস্থে রিসাইজ করুন, WebP-তে রূপান্তর করুন:

bash
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=400&format=webp"

60% কোয়ালিটিতে JPEG হিসেবে 200×200 থাম্বনেইলে রিসাইজ এবং ক্রপ করুন:

bash
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=200&h=200&format=jpeg&quality=60&fit=cover"

ক্রপিংয়ের পরিবর্তে লেটারবক্সিং সহ স্কয়ার থাম্বনেইল:

bash
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=200&h=200&format=png&fit=contain"

শুধু ফরম্যাট রূপান্তর, রিসাইজ ছাড়া (লিগ্যাসি JPEG-এর AVIF/WebP সংস্করণ সার্ভ করার জন্য উপযোগী):

bash
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?format=avif&quality=70"

উচ্চতা বাধ্যতামূলক না করে সর্বাধিক প্রস্থ ক্যাপ করুন (অ্যাসপেক্ট রেশিও সংরক্ষণ করে):

bash
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=1200&format=webp"

HTML-এ ব্যবহার

img ট্যাগে সরাসরি অপ্টিমাইজ করা ইমেজ রেফারেন্স করুন:

html
<img
  src="https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=800&format=webp&quality=75"
  alt="Optimized IPFS image"
/>

srcset দিয়ে বিভিন্ন আকার সার্ভ করুন:

html
<img
  srcset="
    https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=400&format=webp 400w,
    https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=800&format=webp 800w,
    https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=1200&format=webp 1200w
  "
  sizes="(max-width: 600px) 400px, (max-width: 1000px) 800px, 1200px"
  src="https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=800&format=webp"
  alt="Responsive IPFS image"
/>

<picture> দিয়ে আধুনিক ফরম্যাট নেগোসিয়েশন (AVIF → WebP → JPEG ফলব্যাক):

html
<picture>
  <source
    type="image/avif"
    srcset="https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=800&format=avif&quality=60"
  />
  <source
    type="image/webp"
    srcset="https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=800&format=webp&quality=75"
  />
  <img
    src="https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=800&format=jpeg&quality=80"
    alt="IPFS image with format fallback"
  />
</picture>

CSS background-image:

css
.hero {
  background-image: url("https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=1600&format=webp&quality=70");
}

Next.js-এর সাথে ব্যবহার

next/image-এর জন্য কাস্টম লোডার হিসেবে:

js
// loaders/ipfs.js
export default function ipfsLoader({ src, width, quality }) {
  return `https://api.ipfs.ninja/image/${src}?w=${width}&format=webp&quality=${quality || 75}`;
}
jsx
import Image from "next/image";
import ipfsLoader from "@/loaders/ipfs";

<Image
  loader={ipfsLoader}
  src="QmXmCX9S6ANV..."
  alt="IPFS image"
  width={800}
  height={600}
/>;

ক্যাশিং

রেসপন্সগুলি Cache-Control: public, max-age=31536000, immutable সহ সার্ভ করা হয়। যেহেতু IPFS কন্টেন্ট কন্টেন্ট-অ্যাড্রেসড, একই CID একই প্যারামিটার সহ সর্বদা একই আউটপুট তৈরি করে, তাই ব্রাউজার এবং CDN অনির্দিষ্টকালের জন্য রেসপন্স ক্যাশ করতে পারে।

ক্যাশ করা ট্রান্সফর্মগুলি সম্পূর্ণ প্যারামিটার সেট (cid, w, h, format, quality, fit) দ্বারা কীযুক্ত হয়ে S3-তে সংরক্ষিত হয়। একই প্যারামিটার সহ পরবর্তী অনুরোধগুলি ট্রান্সফর্ম পুনরায় চালানোর পরিবর্তে CloudFront-ফ্রন্টেড ক্যাশে (https://ipfs.ninja/image-cache/...) একটি 302 রিডাইরেক্ট ফেরত দেয়। বিভিন্ন প্যারামিটার সংমিশ্রণ ভিন্ন ক্যাশ এন্ট্রি তৈরি করে।

প্রাপ্যতা

ইমেজ অপ্টিমাইজেশন বিনামূল্যে Dharma প্ল্যান সহ সব প্ল্যানে উপলব্ধ।