Skip to content

Vaizdo optimizavimas

Transformuokite ir optimizuokite iš IPFS pateikiamus vaizdus skrydyje, naudodami užklausos parametrus. Tai yra viešas endpoint, kuriam nereikia autentifikavimo.

Optimera bild

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

Grąžina vaizdą nurodytame CID, transformuotą pagal pateiktus užklausos parametrus. Jei jokių transformavimo parametrų nepateikiama, užklausa 302-nukreipiama į originalų vaizdą IPFS šliuze.

Path parameters

ParameterTypeRequiredDescription
cidstringTaipVaizdo IPFS turinio identifikatorius.

Query parameters

ParameterTypeDefaultDescription
wintegerIšvesties plotis pikseliais. Diapazonas: 1–4096. Reikšmės ≤ 0 arba neskaitinės yra ignoruojamos.
hintegerIšvesties aukštis pikseliais. Diapazonas: 1–4096. Reikšmės ≤ 0 arba neskaitinės yra ignoruojamos.
formatstringIšvesties formatas: webp, jpeg, png arba avif. Atsižvelgiama į raidžių dydį (lowercase). Nežinomos reikšmės ignoruojamos.
qualityinteger80Suspaudimo kokybė, 1–100. Taikoma tik webp, jpeg ir avif. png yra be nuostolių ir tai ignoruoja.
fitstringcoverKaip vaizdas turi tilpti į matmenis: cover, contain, fill, inside arba outside.

Pastaba: parametras yra quality, ne q. Įprasti trumpiniai (q, width, height, fmt) nėra atpažįstami.

Užklausa, kurioje nepateikiama nė vieno iš w, h ar format, traktuojama kaip no-op ir 302-nukreipiama į originalų vaizdą. Vien quality ir fit neaktyvuoja transformavimo.

Fit modes

ModeBehavior
coverApkirpti, kad apimtų abu matmenis (numatytasis).
containTilpti į abu matmenis, išlaikant kraštinių santykį. Gali likti tuščios vietos (skaidri arba juoda priklausomai nuo formato).
fillTempti, kad tiksliai užpildytų abu matmenis. Gali iškreipti vaizdą.
insideKaip contain, bet tik mažina, niekada nedidina.
outsideKaip cover, bet tik mažina, niekada nedidina.

Didinimas

Transformatorius niekada nedidina vaizdo daugiau nei jo šaltinio matmenys. Jei užklausiate w=2000 1200px-pločio šaltiniui, išvestis bus 1200px pločio. Tai taikoma visiems fit režimams.

Response

StatusWhenBody
200Šioje užklausoje sukurta transformacija.Dvejetainiai vaizdo baitai. Content-Type atitinka prašomą formatą.
302Nepateikta transformavimo parametrų arba anksčiau transformuotas rezultatas jau yra talpykloje.Location antraštė nurodo į originalų vaizdą arba talpykloje saugomą rezultatą https://ipfs.ninja/image-cache/....
400Trūksta cid kelio parametro.{ "error": "cid required" }
404CID nerastas šliuze.{ "error": "CID not found" }
500Netikėta klaida (sugadintas vaizdas, transformavimo nesėkmė ir pan.).{ "error": "<message>" }

Visi 200 ir 302-talpyklos atsakymai pateikiami su Cache-Control: public, max-age=31536000, immutable. Žr. Caching žemiau.

Užklausų pavyzdžiai

Pakeisti dydį į 400px plotį, konvertuoti į WebP:

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

Pakeisti dydį ir apkirpti į 200×200 miniatiūrą kaip JPEG su 60% kokybe:

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

Kvadratinė miniatiūra su rėmeliais vietoj apkirpimo:

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

Tik formato konvertavimas, be dydžio keitimo (naudinga senų JPEG AVIF/WebP versijoms pateikti):

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

Apriboti maksimalų plotį be priverstinio aukščio (išlaiko kraštinių santykį):

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

Naudojimas HTML

Naudoti optimizuotus vaizdus tiesiogiai img žymose:

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

Pateikti skirtingus dydžius su 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"
/>

Modernus formato derinimas su <picture> (AVIF → WebP → JPEG atsarginis):

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");
}

Naudojimas su Next.js

Kaip pasirinktinis krautuvas 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}
/>;

Cachning

Atsakymai pateikiami su Cache-Control: public, max-age=31536000, immutable. Kadangi IPFS turinys yra adresuojamas pagal turinį, tas pats CID su tais pačiais parametrais visada pateikia tą pačią išvestį, todėl naršyklės ir CDN gali atsakymus talpinti neribotam laikui.

Talpyklos transformacijos saugomos S3, naudojant pilną parametrų rinkinį (cid, w, h, format, quality, fit) kaip raktą. Vėlesnės užklausos su tais pačiais parametrais grąžina 302 nukreipimą į CloudFront pridengtą talpyklą (https://ipfs.ninja/image-cache/...), užuot iš naujo paleidus transformaciją. Skirtingi parametrų deriniai sukuria skirtingus talpyklos įrašus.

Tillganglighet

Vaizdo optimizavimas prieinamas visuose planuose, įskaitant nemokamą Dharma planą.