Rumah > hujung hadapan web > tutorial css > Bagaimana untuk Mensimulasikan CSS `saiz latar belakang: penutup` dalam Kanvas?

Bagaimana untuk Mensimulasikan CSS `saiz latar belakang: penutup` dalam Kanvas?

Barbara Streisand
Lepaskan: 2024-12-14 20:35:16
asal
236 orang telah melayarinya

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

Mensimulasikan Saiz Latar Belakang CSS: Penutup dalam Kanvas

Lukisan kanvas melibatkan pemaparan imej pada konteks 2D. Walau bagaimanapun, apabila melukis imej menggunakan kaedah drawImage(), anda mungkin menghadapi masalah dengan regangan atau herotan imej. Ini boleh diatasi dengan mensimulasikan saiz latar belakang sifat CSS: penutup, yang menskalakan imej sambil mengekalkan nisbah aspeknya agar muat dalam dimensi yang diingini.

Satu kaedah untuk mencapai gelagat ini dalam kanvas adalah melalui fungsi berikut :

function drawImageProp(ctx, img, x, y, w, h, offsetX, offsetY) {

    // Default arguments and validation
    if (arguments.length === 2) {
        x = y = 0;
        w = ctx.canvas.width;
        h = ctx.canvas.height;
    }
    offsetX = typeof offsetX === "number" ? offsetX : 0.5;
    offsetY = typeof offsetY === "number" ? offsetY : 0.5;

    // Image dimensions and aspect ratio
    var iw = img.width,
        ih = img.height,
        r = Math.min(w / iw, h / ih),
        nw = iw * r,   // New proposed width
        nh = ih * r,   // New proposed height
        cx, cy, cw, ch, ar = 1;

    // Determine image scaling factor
    if (nw < w) ar = w / nw;                             
    if (Math.abs(ar - 1) < 1e-14 && nh < h) ar = h / nh;  // Updated

    nw *= ar;
    nh *= ar;

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

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

    // Validate source rectangle
    if (cx < 0) cx = 0;
    if (cy < 0) cy = 0;
    if (cw > iw) cw = iw;
    if (ch > ih) ch = ih;

    // Draw the image to the destination rectangle
    ctx.drawImage(img, cx, cy, cw, ch,  x, y, w, h);
}
Salin selepas log masuk

Fungsi ini boleh digunakan seperti berikut:

drawImageProp(ctx, image, 0, 0, width, height);
Salin selepas log masuk

Ini akan menskalakan imej berkadar untuk muat dalam dimensi lebar dan ketinggian yang disediakan. Parameter offsetX dan offsetY pilihan membenarkan pengimbangan imej dalam segi empat tepat destinasi.

Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan CSS `saiz latar belakang: penutup` dalam Kanvas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan