Heim > Web-Frontend > CSS-Tutorial > Wie simuliere ich CSSs „background-size: cover' in Canvas?

Wie simuliere ich CSSs „background-size: cover' in Canvas?

Linda Hamilton
Freigeben: 2024-12-15 08:57:11
Original
529 Leute haben es durchsucht

How to Simulate CSS's `background-size: cover` in Canvas?

Simulieren von CSSs „background-size: cover“ in Canvas

Beim Zeichnen von Bildern auf einer Leinwand kann es zu Problemen mit der Darstellung von Bildern kommen gestreckt. Um die gewünschte „Cover“-Funktionalität zu erreichen, die Bilder proportional skaliert, um in einen bestimmten Container zu passen, ist ein komplexerer Ansatz erforderlich.

Eine Lösung ist die folgende JavaScript-Funktion:

/**
 * By Ken Fyrstenberg Nilsen
 *
 * drawImageProp(context, image [, x, y, width, height [,offsetX, offsetY]])
 *
 * If image and context are only arguments rectangle will equal canvas
 */
function drawImageProp(ctx, img, x, y, w, h, offsetX, offsetY) {

    if (arguments.length === 2) {
        x = y = 0;
        w = ctx.canvas.width;
        h = ctx.canvas.height;
    }

    // default offset is center
    offsetX = typeof offsetX === "number" ? offsetX : 0.5;
    offsetY = typeof offsetY === "number" ? offsetY : 0.5;

    // keep bounds [0.0, 1.0]
    if (offsetX < 0) offsetX = 0;
    if (offsetY < 0) offsetY = 0;
    if (offsetX > 1) offsetX = 1;
    if (offsetY > 1) offsetY = 1;

    var iw = img.width,
        ih = img.height,
        r = Math.min(w / iw, h / ih),
        nw = iw * r,   // new prop. width
        nh = ih * r,   // new prop. height
        cx, cy, cw, ch, ar = 1;

    // decide which gap to fill
    if (nw < w) ar = w / nw;
    if (Math.abs(ar - 1) < 1e-14 &amp;&amp; nh < h) ar = h / nh;  // updated
    nw *= ar;
    nh *= ar;

    // calc source rectangle
    cw = iw / (nw / w);
    ch = ih / (nh / h);

    cx = (iw - cw) * offsetX;
    cy = (ih - ch) * offsetY;

    // make sure source rectangle is valid
    if (cx < 0) cx = 0;
    if (cy < 0) cy = 0;
    if (cw > iw) cw = iw;
    if (ch > ih) ch = ih;

    // fill image in dest. rectangle
    ctx.drawImage(img, cx, cy, cw, ch,  x, y, w, h);
}
Nach dem Login kopieren

Um diese Funktion zu verwenden:

  1. Call drawImageProp(ctx, image, 0, 0, width, height); um das Bild proportional zu skalieren, damit es in den Container passt.
  2. Um das Bild zu versetzen, verwenden Sie die letzten beiden Parameter: drawImageProp(ctx, image, 0, 0, width, height, offsetX, offsetY);. Die Offsets reichen von 0,0 (links/oben) bis 1,0 (rechts/unten).

Das obige ist der detaillierte Inhalt vonWie simuliere ich CSSs „background-size: cover' in Canvas?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage