JSFiddle - React, Tailwind, and code Playground

HTML

<canvas id="cc"></canvas>
<br />
Resized in: <span id="timer">-</span> s
<br />
<a href="https://i.imgur.com/8VsK7gS.png">Original image</a>

CSS

canvas{
    border:1px solid grey;
}
#timer{
  font-weight:bold;
}

JavaScript

var canvas = document.getElementById("cc");
var ctx = canvas.getContext("2d");

var img = new Image();
img.crossOrigin = "Anonymous"; //cors support
img.onload = function(){
    var W = img.width;
    var H = img.height;
    canvas.width = W;
    canvas.height = H;
    ctx.drawImage(img, 0, 0); //draw image
    var time1 = Date.now();	
    
    //resize
    resample_single(canvas, 439, 222, true);
    
    document.getElementById('timer').innerHTML = Math.round(Date.now() - time1)/1000;
}
img.src = 'https://i.imgur.com/8VsK7gS.png';

/**
 * Hermite resize - fast image resize/resample using Hermite filter. 1 cpu version!
 * 
 * @param {HtmlElement} canvas
 * @param {int} width
 * @param {int} height
 * @param {boolean} resize_canvas if true, canvas will be resized. Optional.
 */
function resample_single(canvas, width, height, resize_canvas) {
  var width_source = canvas.width;
  var height_source = canvas.height;
  width = Math.round(width);
  height = Math.round(height);

  var ratio_w = width_source / width;
  var ratio_h = height_source / height;
  var ratio_w_half = Math.ceil(ratio_w / 2);
  var ratio_h_half = Math.ceil(ratio_h / 2);

  var ctx = canvas.getContext("2d");
  var img = ctx.getImageData(0, 0, width_source, height_source);
  var img2 = ctx.createImageData(width, height);
  var data = img.data;
  var data2 = img2.data;

  for (var j = 0; j < height; j++) {
    for (var i = 0; i < width; i++) {
      var x2 = (i + j * width) * 4;
      var weight = 0;
      var weights = 0;
      var weights_alpha = 0;
      var gx_r = 0;
      var gx_g = 0;
      var gx_b = 0;
      var gx_a = 0;
      var center_y = (j + 0.5) * ratio_h;
      var yy_start = Math.floor(j * ratio_h);
      var yy_stop = Math.ceil((j + 1) * ratio_h);
      for (var yy = yy_start; yy < yy_stop; yy++) {
        var dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half;
        var center_x = (i + 0.5) * ratio_w;
        var w0 = dy * dy; //pre-calc part of w
        var xx_start =...