Skip to content

Image Optimization

क्वेरी पैरामीटर का उपयोग करके IPFS से सर्व की गई छवियों को ऑन-द-फ्लाई रूपांतरित और अनुकूलित करें। यह एक सार्वजनिक endpoint है जिसके लिए प्रमाणीकरण की आवश्यकता नहीं है।

Optimize Image

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

दिए गए CID पर छवि को प्रदान किए गए क्वेरी पैरामीटर के अनुसार रूपांतरित करके लौटाता है। यदि कोई रूपांतरण पैरामीटर प्रदान नहीं किया जाता है, तो अनुरोध IPFS गेटवे पर मूल छवि के लिए 302-रीडायरेक्ट करता है।

Path parameters

ParameterTypeRequiredDescription
cidstringहाँछवि का IPFS कंटेंट आइडेंटिफायर।

Query parameters

ParameterTypeDefaultDescription
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 modes

ModeBehavior
coverदोनों आयामों को कवर करने के लिए क्रॉप करें (डिफ़ॉल्ट)।
containआस्पेक्ट रेशियो बनाए रखते हुए दोनों आयामों के भीतर फिट करें। खाली स्थान छोड़ सकता है (फॉर्मेट के आधार पर पारदर्शी या काला)।
fillदोनों आयामों को बिल्कुल भरने के लिए खींचें। छवि को विकृत कर सकता है।
insidecontain की तरह, लेकिन केवल छोटा करता है, कभी बड़ा नहीं।
outsidecover की तरह, लेकिन केवल छोटा करता है, कभी बड़ा नहीं।

अपस्केलिंग

ट्रांसफॉर्मर कभी भी छवि को उसके स्रोत आयामों से बड़ा नहीं करता। यदि आप 1200px-चौड़े स्रोत के लिए w=2000 का अनुरोध करते हैं, तो आउटपुट 1200px चौड़ा होगा। यह सभी fit मोड पर लागू होता है।

Response

StatusWhenBody
200इस अनुरोध पर रूपांतरण उत्पन्न हुआ।बाइनरी छवि बाइट्स। Content-Type अनुरोधित फॉर्मेट से मेल खाता है।
302कोई रूपांतरण पैरामीटर प्रदान नहीं किया गया, या पहले से रूपांतरित परिणाम पहले से कैश किया हुआ है।Location हेडर मूल छवि या https://ipfs.ninja/image-cache/... पर कैश किए गए परिणाम की ओर इंगित करता है।
400cid पथ पैरामीटर गुम है।{ "error": "cid required" }
404गेटवे पर CID नहीं मिला।{ "error": "CID not found" }
500अप्रत्याशित त्रुटि (दूषित छवि, रूपांतरण विफलता, आदि)।{ "error": "<message>" }

सभी 200 और 302-कैश प्रतिक्रियाएँ Cache-Control: public, max-age=31536000, immutable के साथ सर्व की जाती हैं। नीचे Caching देखें।

उदाहरण अनुरोध

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}
/>;

Caching

प्रतिक्रियाएँ Cache-Control: public, max-age=31536000, immutable के साथ सर्व की जाती हैं। चूँकि IPFS कंटेंट कंटेंट-एड्रेस्ड है, समान पैरामीटर के साथ समान CID हमेशा समान आउटपुट उत्पन्न करता है, इसलिए ब्राउज़र और CDN प्रतिक्रियाओं को अनिश्चित काल तक कैश कर सकते हैं।

कैश किए गए रूपांतरण पूर्ण पैरामीटर सेट (cid, w, h, format, quality, fit) द्वारा कुंजीबद्ध करके S3 में संग्रहीत किए जाते हैं। समान पैरामीटर के साथ बाद के अनुरोध रूपांतरण को फिर से चलाने के बजाय CloudFront-फ्रंटेड कैश (https://ipfs.ninja/image-cache/...) पर 302 रीडायरेक्ट लौटाते हैं। विभिन्न पैरामीटर संयोजन विभिन्न कैश प्रविष्टियाँ उत्पन्न करते हैं।

Availability

छवि अनुकूलन सभी प्लान्स पर उपलब्ध है, जिसमें मुफ्त Dharma प्लान भी शामिल है।