বাংলা
বাংলা
Appearance
বাংলা
বাংলা
Appearance
কোয়েরি প্যারামিটার ব্যবহার করে IPFS থেকে সার্ভ করা ইমেজ on-the-fly-তে ট্রান্সফর্ম এবং অপ্টিমাইজ করুন। এটি একটি পাবলিক endpoint যার প্রমাণীকরণ প্রয়োজন নেই। প্রথমে ফাইল আপলোড দিয়ে ইমেজ IPFS-এ যোগ করুন, তারপর এখানে বর্ণিত ট্রান্সফর্ম প্যারামিটার দিয়ে এটি সার্ভ করুন — CID কীভাবে কন্টেন্ট শনাক্ত করে তা জানতে কন্টেন্ট অ্যাড্রেসিং দেখুন।
GET https://api.ipfs.ninja/image/:cid
প্রদত্ত CID-তে থাকা ইমেজটি প্রদত্ত কোয়েরি প্যারামিটার অনুযায়ী ট্রান্সফর্ম করে রিটার্ন করে। যদি কোনো ট্রান্সফর্ম প্যারামিটার সরবরাহ না করা হয়, তাহলে অনুরোধটি IPFS গেটওয়েতে মূল ইমেজে 302-রিডাইরেক্ট হয়।
| প্যারামিটার | ধরন | প্রয়োজনীয় | বর্ণনা |
|---|---|---|---|
cid | string | হ্যাঁ | ইমেজের IPFS কন্টেন্ট আইডেন্টিফায়ার। |
| প্যারামিটার | ধরন | ডিফল্ট | বর্ণনা |
|---|---|---|---|
w | integer | — | আউটপুট প্রস্থ পিক্সেলে। পরিসীমা: 1–4096। ≤ 0 বা সংখ্যা নয় এমন মান উপেক্ষা করা হয়। |
h | integer | — | আউটপুট উচ্চতা পিক্সেলে। পরিসীমা: 1–4096। ≤ 0 বা সংখ্যা নয় এমন মান উপেক্ষা করা হয়। |
format | string | — | আউটপুট ফরম্যাট: webp, jpeg, png বা avif। কেস-সংবেদনশীল (lowercase)। অজানা মান উপেক্ষা করা হয়। |
quality | integer | 80 | কম্প্রেশন কোয়ালিটি, 1–100। শুধু webp, jpeg এবং avif-এর জন্য প্রযোজ্য। png ক্ষতিহীন এবং এটি উপেক্ষা করে। |
fit | string | cover | ইমেজ কিভাবে ডাইমেনশনের সাথে ফিট হবে: cover, contain, fill, inside বা outside। |
নোট: প্যারামিটারটি
quality,qনয়। সাধারণ সংক্ষিপ্ত উপনাম (q,width,height,fmt) স্বীকৃত নয়।
যে অনুরোধে w, h বা format-এর কোনোটিই সরবরাহ করা হয় না সেটি no-op হিসেবে গণ্য হয় এবং মূল ইমেজে 302-রিডাইরেক্ট হয়। শুধু quality এবং fit ট্রান্সফর্ম ট্রিগার করে না।
| Mode | Behavior |
|---|---|
cover | উভয় ডাইমেনশন কভার করতে ক্রপ করুন (ডিফল্ট)। |
contain | অ্যাসপেক্ট রেশিও সংরক্ষণ করে উভয় ডাইমেনশনের মধ্যে ফিট করুন। খালি জায়গা থাকতে পারে (ফরম্যাট অনুযায়ী স্বচ্ছ বা কালো)। |
fill | উভয় ডাইমেনশন ঠিক ঠাক ভরাট করতে প্রসারিত করুন। ইমেজ বিকৃত করতে পারে। |
inside | contain-এর মতো, কিন্তু শুধু ছোট করে, কখনো বড় করে না। |
outside | cover-এর মতো, কিন্তু শুধু ছোট করে, কখনো বড় করে না। |
ট্রান্সফর্মার কখনো ইমেজকে তার সোর্স ডাইমেনশনের বাইরে বড় করে না। যদি আপনি 1200px-প্রস্থের সোর্সের জন্য w=2000 অনুরোধ করেন, আউটপুট 1200px প্রস্থের হবে। এটি সমস্ত fit মোডে প্রযোজ্য।
| Status | When | Body |
|---|---|---|
200 | এই অনুরোধে ট্রান্সফর্ম তৈরি হয়েছে। | বাইনারি ইমেজ বাইট। Content-Type অনুরোধকৃত ফরম্যাটের সাথে মেলে। |
302 | কোনো ট্রান্সফর্ম প্যারাম সরবরাহ করা হয়নি, অথবা পূর্বে ট্রান্সফর্ম করা ফলাফল ইতিমধ্যে ক্যাশ করা আছে। | Location হেডার মূল ইমেজ বা https://ipfs.ninja/image-cache/...-এ থাকা ক্যাশকৃত ফলাফলের দিকে নির্দেশ করে। |
400 | cid path প্যারামিটার অনুপস্থিত। | { "error": "cid required" } |
404 | গেটওয়েতে CID পাওয়া যায়নি। | { "error": "CID not found" } |
500 | অপ্রত্যাশিত ত্রুটি (দূষিত ইমেজ, ট্রান্সফর্ম ব্যর্থতা ইত্যাদি)। | { "error": "<message>" } |
সমস্ত 200 এবং 302-ক্যাশ রেসপন্স Cache-Control: public, max-age=31536000, immutable সহ সার্ভ করা হয়। নিচের ক্যাশিং দেখুন।
400px প্রস্থে রিসাইজ করুন, WebP-তে রূপান্তর করুন:
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=400&format=webp"60% কোয়ালিটিতে JPEG হিসেবে 200×200 থাম্বনেইলে রিসাইজ এবং ক্রপ করুন:
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=200&h=200&format=jpeg&quality=60&fit=cover"ক্রপিংয়ের পরিবর্তে লেটারবক্সিং সহ স্কয়ার থাম্বনেইল:
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=200&h=200&format=png&fit=contain"শুধু ফরম্যাট রূপান্তর, রিসাইজ ছাড়া (লিগ্যাসি JPEG-এর AVIF/WebP সংস্করণ সার্ভ করার জন্য উপযোগী):
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?format=avif&quality=70"উচ্চতা বাধ্যতামূলক না করে সর্বাধিক প্রস্থ ক্যাপ করুন (অ্যাসপেক্ট রেশিও সংরক্ষণ করে):
curl "https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=1200&format=webp"img ট্যাগে সরাসরি অপ্টিমাইজ করা ইমেজ রেফারেন্স করুন:
<img
src="https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=800&format=webp&quality=75"
alt="Optimized IPFS image"
/>srcset দিয়ে বিভিন্ন আকার সার্ভ করুন:
<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 ফলব্যাক):
<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:
.hero {
background-image: url("https://api.ipfs.ninja/image/QmXmCX9S6ANV...?w=1600&format=webp&quality=70");
}next/image-এর জন্য কাস্টম লোডার হিসেবে:
// loaders/ipfs.js
export default function ipfsLoader({ src, width, quality }) {
return `https://api.ipfs.ninja/image/${src}?w=${width}&format=webp&quality=${quality || 75}`;
}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 প্ল্যান সহ সব প্ল্যানে উপলব্ধ।