BountiesStoreLedgerDocs
Bounties
image / image-resizeBuilt by daveRuns on Liberas

Resize

Resamples an RGBA8 image to width × height. nearest: destination pixel (x, y) copies source pixel ((2x + 1) · sw / (2w), (2y + 1) · sh / (2h)) in integer arithmetic. bilinear: with cx = (x + 0.5) · sw / w − 0.5 clamped to [0, sw − 1] (cy alike), x0 = floor(cx), x1 = min(x0 + 1, sw − 1), fx = cx − x0, each channel is ((p00 · (1 − fx) + p10 · fx) · (1 − fy) + (p01 · (1 − fx) + p11 · fx) · fy) computed in f64 in that order and rounded half up (floor(v + 0.5)). Width and height must be at least 1. An input whose pixels are not width × height × 4 bytes is an error. At most 16,777,216 pixels; larger images are an error.

image-resize.wit
package root:component;

world root {
  import liberas:image/types@0.1.0;

  export liberas:image/resize@0.1.0;
}
package liberas:image@0.1.0 {
  interface types {
    record image {
      width: u32,
      height: u32,
      pixels: list<u8>,
    }
  }
  interface resize {
    use types.{image};

    enum filter {
      nearest,
      bilinear,
    }

    resize: func(input: image, width: u32, height: u32, filter: filter) -> result<image, string>;
  }
}
image-resize.cases.json
[
  {
    "args": {
      "input": {
        "width": 4,
        "height": 4,
        "pixels": "LycDA1QuBP95NQf/njwM/zpcBv9fYwf/hGoK/6lxD/9FkQn/apgK/4+fDf+0phJaUMYM/3XNDf+a1BA9v9sV/w=="
      },
      "width": 8,
      "filter": "nearest",
      "height": 8
    }
  },
  {
    "args": {
      "input": {
        "width": 4,
        "height": 4,
        "pixels": "LycDA1QuBP95NQf/njwM/zpcBv9fYwf/hGoK/6lxD/9FkQn/apgK/4+fDf+0phJaUMYM/3XNDf+a1BA9v9sV/w=="
      },
      "width": 2,
      "filter": "bilinear",
      "height": 2
    }
  },
  {
    "args": {
      "input": {
        "width": 7,
        "height": 5,
        "pixels": "lDQEBLk7Bf/eQgj/A0kN/yhQFP9NVx2Vcl4o/59pB//EcAj/6XcL/w5+EP8zhRd4WIwg/32TK/+qngr/z6UL//SsDv8ZsxNbProa/2PBI/+IyC7/tdMN/9raDv//4RE+JOgW/0nvHf9u9ib/k/0x/8AIEP/lDxEhChYU/y8dGf9UJCD/eSsp/54yNLI="
      },
      "width": 3,
      "filter": "nearest",
      "height": 9
    }
  },
  {
    "args": {
      "input": {
        "width": 7,
        "height": 5,
        "pixels": "lDQEBLk7Bf/eQgj/A0kN/yhQFP9NVx2Vcl4o/59pB//EcAj/6XcL/w5+EP8zhRd4WIwg/32TK/+qngr/z6UL//SsDv8ZsxNbProa/2PBI/+IyC7/tdMN/9raDv//4RE+JOgW/0nvHf9u9ib/k/0x/8AIEP/lDxEhChYU/y8dGf9UJCD/eSsp/54yNLI="
      },
      "width": 14,
      "filter": "bilinear",
      "height": 10
    }
  },
  {
    "args": {
      "input": {
        "width": 16,
        "height": 16,
        "pixels": "+UEFBR5IBv9DTwn/aFYO/41dFf+yZB6W12sp//xyNv8heUX/RoBW/2uHaSeQjn7/tZWV/9qcrv//o8n/JKrmuAR2CP8pfQn/ToQM/3OLEf+Ykhh5vZkh/+KgLP8Hpzn/LK5I/1G1WQp2vGz/m8OB/8DKmP/l0bH/CtjMmy/f6f8Pqwv/NLIM/1m5D/9+wBRco8cb/8jOJP/t1S//Etw8/zfjS+1c6lz/gfFv/6b4hP/L/5v/8Aa0fhUNz/86FOz/GuAO/z/nD/9k7hI/ifUX/678Hv/TAyf/+Aoy/x0RP9BCGE7/Zx9f/4wmcv+xLYf/1jSeYfs7t/8gQtL/RUnv/yUVEf9KHBIibyMV/5QqGv+5MSH/3jgq/wM/NbMoRkL/TU1R/3JUYv+XW3X/vGKKROFpof8GcLr/K3fV/1B+8v8wShQFVVEV/3pYGP+fXx3/xGYk/+ltLZYOdDj/M3tF/1iCVP99iWX/opB4J8eXjf/snqT/EaW9/zas2P9bs/W4O38X/2CGGP+FjRv/qpQg/8+bJ3n0ojD/Gak7/z6wSP9jt1f/iL5oCq3Fe//SzJD/99On/xzawP9B4dubZuj4/0a0Gv9ruxv/kMIe/7XJI1za0Cr//9cz/yTePv9J5Uv/buxa7ZPza/+4+n7/3QGT/wIIqv8nD8N+TBbe/3Ed+/9R6R3/dvAe/5v3IT/A/ib/5QUt/woMNv8vE0H/VBpO0HkhXf+eKG7/wy+B/+g2lv8NPa1hMkTG/1dL4f98Uv7/XB4g/4ElISKmLCT/yzMp//A6MP8VQTn/OkhEs19PUf+EVmD/qV1x/85khP/za5lEGHKw/z15yf9igOT/h4cB/2dTIwWMWiT/sWEn/9ZoLP/7bzP/IHY8lkV9R/9qhFT/j4tj/7SSdP/ZmYcn/qCc/yOns/9Irsz/bbXn/5K8BLhyiCb/l48n/7yWKv/hnS//BqQ2eSurP/9Qskr/dblX/5rAZv+/x3cK5M6K/wnVn/8u3Lb/U+PP/3jq6pud8Qf/fb0p/6LEKv/Hyy3/7NIyXBHZOf824EL/W+dN/4DuWv+l9Wntyvx6/+8Djf8UCqL/ORG5/14Y0n6DH+3/qCYK/4jyLP+t+S3/0gAwP/cHNf8cDjz/QRVF/2YcUP+LI13QsCps/9Uxff/6OJD/Hz+l/0RGvGFpTdX/jlTw/7NbDf+TJy//uC4wIt01M/8CPDj/J0M//0xKSP9xUVOzllhg/7tfb//gZoD/BW2T/yp0qERPe7//dILY/5mJ8/++kBD/nlwyBcNjM//oajb/DXE7/zJ4Qv9Xf0uWfIZW/6GNY//GlHL/65uD/xCilic1qav/WrDC/3+32/+kvvb/ycUTuA=="
      },
      "width": 1,
      "filter": "nearest",
      "height": 1
    }
  },
  {
    "args": {
      "input": {
        "width": 16,
        "height": 16,
        "pixels": "+UEFBR5IBv9DTwn/aFYO/41dFf+yZB6W12sp//xyNv8heUX/RoBW/2uHaSeQjn7/tZWV/9qcrv//o8n/JKrmuAR2CP8pfQn/ToQM/3OLEf+Ykhh5vZkh/+KgLP8Hpzn/LK5I/1G1WQp2vGz/m8OB/8DKmP/l0bH/CtjMmy/f6f8Pqwv/NLIM/1m5D/9+wBRco8cb/8jOJP/t1S//Etw8/zfjS+1c6lz/gfFv/6b4hP/L/5v/8Aa0fhUNz/86FOz/GuAO/z/nD/9k7hI/ifUX/678Hv/TAyf/+Aoy/x0RP9BCGE7/Zx9f/4wmcv+xLYf/1jSeYfs7t/8gQtL/RUnv/yUVEf9KHBIibyMV/5QqGv+5MSH/3jgq/wM/NbMoRkL/TU1R/3JUYv+XW3X/vGKKROFpof8GcLr/K3fV/1B+8v8wShQFVVEV/3pYGP+fXx3/xGYk/+ltLZYOdDj/M3tF/1iCVP99iWX/opB4J8eXjf/snqT/EaW9/zas2P9bs/W4O38X/2CGGP+FjRv/qpQg/8+bJ3n0ojD/Gak7/z6wSP9jt1f/iL5oCq3Fe//SzJD/99On/xzawP9B4dubZuj4/0a0Gv9ruxv/kMIe/7XJI1za0Cr//9cz/yTePv9J5Uv/buxa7ZPza/+4+n7/3QGT/wIIqv8nD8N+TBbe/3Ed+/9R6R3/dvAe/5v3IT/A/ib/5QUt/woMNv8vE0H/VBpO0HkhXf+eKG7/wy+B/+g2lv8NPa1hMkTG/1dL4f98Uv7/XB4g/4ElISKmLCT/yzMp//A6MP8VQTn/OkhEs19PUf+EVmD/qV1x/85khP/za5lEGHKw/z15yf9igOT/h4cB/2dTIwWMWiT/sWEn/9ZoLP/7bzP/IHY8lkV9R/9qhFT/j4tj/7SSdP/ZmYcn/qCc/yOns/9Irsz/bbXn/5K8BLhyiCb/l48n/7yWKv/hnS//BqQ2eSurP/9Qskr/dblX/5rAZv+/x3cK5M6K/wnVn/8u3Lb/U+PP/3jq6pud8Qf/fb0p/6LEKv/Hyy3/7NIyXBHZOf824EL/W+dN/4DuWv+l9Wntyvx6/+8Djf8UCqL/ORG5/14Y0n6DH+3/qCYK/4jyLP+t+S3/0gAwP/cHNf8cDjz/QRVF/2YcUP+LI13QsCps/9Uxff/6OJD/Hz+l/0RGvGFpTdX/jlTw/7NbDf+TJy//uC4wIt01M/8CPDj/J0M//0xKSP9xUVOzllhg/7tfb//gZoD/BW2T/yp0qERPe7//dILY/5mJ8/++kBD/nlwyBcNjM//oajb/DXE7/zJ4Qv9Xf0uWfIZW/6GNY//GlHL/65uD/xCilic1qav/WrDC/3+32/+kvvb/ycUTuA=="
      },
      "width": 1,
      "filter": "bilinear",
      "height": 1
    }
  },
  {
    "args": {
      "input": {
        "width": 1,
        "height": 1,
        "pixels": "ZQ0BAQ=="
      },
      "width": 5,
      "filter": "bilinear",
      "height": 5
    }
  },
  {
    "args": {
      "input": {
        "width": 32,
        "height": 24,
        "pixels": "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"
      },
      "width": 16,
      "filter": "bilinear",
      "height": 12
    }
  },
  {
    "args": {
      "input": {
        "width": 32,
        "height": 24,
        "pixels": "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"
      },
      "width": 17,
      "filter": "nearest",
      "height": 11
    }
  },
  {
    "args": {
      "input": {
        "width": 9,
        "height": 7,
        "pixels": "w1sHB+hiCP8NaQv/MnAQ/1d3F/98fiCYoYUr/8aMOP/rk0f/zpAK//OXC/8Yng7/PaUT/2KsGnuHsyP/rLou/9HBO//2yEr/2cUN//7MDv8j0xH/SNoWXm3hHf+S6Cb/t+8x/9z2Pv8B/U3v5PoQ/wkBEf8uCBRBUw8Z/3gWIP+dHSn/wiQ0/+crQdIMMlD/7y8T/xQ2FCQ5PRf/XkQc/4NLI/+oUiz/zVk3tfJgRP8XZ1P/+mQWBx9rF/9Echr/aXkf/46AJv+zhy+Y2I46//2VR/8inFb/BZkZ/yqgGv9Ppx3/dK4i/5m1KXu+vDL/48M9/wjKSv8t0Vn/"
      },
      "width": 9,
      "filter": "nearest",
      "height": 7
    }
  },
  {
    "args": {
      "input": {
        "width": 9,
        "height": 7,
        "pixels": "w1sHB+hiCP8NaQv/MnAQ/1d3F/98fiCYoYUr/8aMOP/rk0f/zpAK//OXC/8Yng7/PaUT/2KsGnuHsyP/rLou/9HBO//2yEr/2cUN//7MDv8j0xH/SNoWXm3hHf+S6Cb/t+8x/9z2Pv8B/U3v5PoQ/wkBEf8uCBRBUw8Z/3gWIP+dHSn/wiQ0/+crQdIMMlD/7y8T/xQ2FCQ5PRf/XkQc/4NLI/+oUiz/zVk3tfJgRP8XZ1P/+mQWBx9rF/9Echr/aXkf/46AJv+zhy+Y2I46//2VR/8inFb/BZkZ/yqgGv9Ppx3/dK4i/5m1KXu+vDL/48M9/wjKSv8t0Vn/"
      },
      "width": 20,
      "filter": "bilinear",
      "height": 3
    }
  },
  {
    "args": {
      "input": {
        "width": 3,
        "height": 3,
        "pixels": "KGgICE1vCf9ydgz/M50L/1ikDP99qw//PtIO/2PZD/+I4BL/"
      },
      "width": 0,
      "filter": "nearest",
      "height": 3
    }
  },
  {
    "args": {
      "input": {
        "width": 3,
        "height": 3,
        "pixels": "KGgICE1vCf9ydgz/M50L/1ikDP99qw//PtIO/2PZD/+I4BL/"
      },
      "width": 100000,
      "filter": "bilinear",
      "height": 100000
    }
  },
  {
    "args": {
      "input": {
        "width": 2,
        "height": 2,
        "pixels": "AQID"
      },
      "width": 2,
      "filter": "nearest",
      "height": 2
    }
  }
]

Verification

  • Outputs must match the private reference implementation bit for bit.
  • Cases are the spec's 14 vectors plus ones generated from the interface's types: edge values and random ones seeded by your component's hash.
  • Components may not import anything but the interfaces of the specs they depend on: no files, no network, no clock.
  • Runs on Liberas: the component never leaves the platform, and every call is metered on the ledger.
  • A remote call may execute up to 1,000,000,000 instructions.
  • Already built: a component that passes and uses at most 0.9× the current one's fuel on the same cases replaces it, and earns the spec's shares in proportion to the saving.
  • Found an input where the current component disagrees with the spec? Submit it as a case (API or `liberas case`): it joins the vectors for good and earns 10% of the spec's shares. A component that then passes replaces the broken one for 25%.