Bountiesimage-decode-png.wit image-decode-png.cases.json
image / image-decode-pngBuilt by daveRuns on Liberas
Decode PNG
Decodes any valid PNG (every color type and bit depth, interlaced or not) to RGBA8. Palettes are expanded, tRNS transparency applied, grayscale replicated into R, G and B, and 16-bit samples keep their high byte. Gamma, ICC and other color chunks are ignored. Alpha is 255 where the file has none. Truncated or corrupt data is an error. At most 16,777,216 pixels; larger images are an error.
package root:component;
world root {
import liberas:image/types@0.1.0;
export liberas:image/decode@0.1.0;
}
package liberas:image@0.1.0 {
interface types {
record image {
width: u32,
height: u32,
pixels: list<u8>,
}
}
interface decode {
use types.{image};
decode: func(data: list<u8>) -> result<image, string>;
}
}
[
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAIAAAAJCAAAAAA9GqI7AAAAHklEQVR42mNg4GdU5mdREmBRFmBR5mcUF2BR5ocgABV7AbAPb6LJAAAAAElFTkSuQmCC"
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAYAAAADCAAAAACVaiEnAAAAHUlEQVR42mNk4BcQEBBgVOYX4BcQYFES4BcQEAAADBoBOGWBIsAAAAAASUVORK5CYII="
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAQAAAAnZu5uAAAAOUlEQVR42iXGMRGAMBBFwZeZ6/9TQMHJwEiMxBNGMIKRULDVDsgWkdE7SHDV+Wd6VyO5fKSaHL4SPsiWB0Y6dA9ZAAAAAElFTkSuQmCC"
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAMFBMVEXX1iKDyxEw1Bw0oC3PjCB8fRIqhSApayrjUyWWTxTCJB2BGA8/SBQeNic4FhUcBBUwrXteAAAAM0lEQVR42gEoANf/Af/sz/ME3e3e7wSa3+//BO287wID8fj4LgHuzO41BN7f788D/9XY1RhMGkZnc93RAAAAAElFTkSuQmCC"
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mNgYGAAAAAEAAHI6uv5AAAAAElFTkSuQmCC"
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAIAAAAUMWhjAAAA0UlEQVR42tWVUWvCQBAGE2IZSihSpEgRkSJDKUWklEVE/P9/y6dSkZjkkpNauKfluDnm270ri6KQUip5EORRanmSqTzLTF5kLq+ykKWs5E3WorzLh3zKRrbyJd8SspO9HOQ4qaOqKWuqG62bASId4LVitO1sBth6qRyK4j4ysEexAWDvszoTztFFkUtRDJR2CTCGud5kDHn115MciYBBA7xrBjgu4R6K4j5eU1OKv4AMA9zkYGgXRS5FI1LxHND5b/ysZarJf/QnRyKgTUUkdO0JBptQo8XnbZgAAAAASUVORK5CYII="
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAcAAAAFCAIAAAAG+GGPAAAALElEQVR42mNkYGBQZWdUZWdWZWdVZWdXZedUZedm4TZl5mZn5GZnRkaUiwIAAW4EOsAGp5AAAAAASUVORK5CYII="
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAEEAIAAACZwb5UAAAAg0lEQVR42mNgAAO1rwLMDM2+rxTYGNlK7htwMnbOvuLAw8TDwGjOwJ7ar6EjwJUm5K+owJs2tUzMQCBdYi63g3D6bAamPAa+03KayQKCpxcGRCiInFEp9zUQP7N8npOD1FktBualDKIGa7VmCUgYGgT2K0gbbq5oMZAzMptf6aBotBMAMG4g5d3dq8MAAAAASUVORK5CYII="
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA9ElEQVR42r2SIU5DURRE78sUJs2kIYQQ0jRgmtkBT2HYAg7DAjB1GBaAqathARgchgVgcGyhpo4tYD6i/ycvj5ZWUMQV9+bcESeTIiLM1JgIcy9MhtmfmZqYgzAPwjwM82hsHs/NkzCHYY7CPH3tKaMRU4jo5k7EtNhDxL6Ir+r2KOK2p4woAq5FPFfg54rnexEPIqIMuBDxXoEfIs6r242IJ7d7F3AmYlGBLyauqtuliDcRsfxbBiQxNRU4EzHpoHbGIuYVt0OJ/kWi/0KitpGodRILNyslOrcS+VOi/03iTprobSR6k8TcNnGtxFw0kZub+A211FRQtBRYZAAAAABJRU5ErkJggg=="
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAANklEQVR42k3IsREAIQwDwfMIRoHqcAlENELDXxefsuEWQLtuW7QnI0s3LmIRi5Elnjhv7FjfD7+vBXE37TepAAAAAElFTkSuQmCC"
}
},
{
"args": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAHCAYAAADam2dgAAAAfUlEQVR42o3OsQ3CUBADUJ+cyEIWYgO62yCpmIKOKdIxBV2moGOKdExBlyk+BfrS168orrD0ZF8AQCpKikiNSAmpw5rykjoidcLgmcUKWKx3t/hoMgbPRINuFp8tsLi36GJx68Db4lTR2eKnA68Ur3UurCgdWC0uvwL+9/gXF+cVXtFZz/wAAAAASUVORK5CYII="
}
},
{
"args": {
"data": "bm90IGFuIGltYWdlIGF0IGFsbA=="
}
},
{
"args": {
"data": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//wgALCAAIABABAREA/8QAFAABAAAAAAAAAAAAAAAAAAAABP/aAAgBAQAAAAE6P//EABcQAQEBAQAAAAAAAAAAAAAAAAECAxP/2gAIAQEAAQUCiczMHn//xAAaEAACAgMAAAAAAAAAAAAAAAAAAQIRAyJh/9oACAEBAAY/AnpIpYlb6f/EABcQAQEBAQAAAAAAAAAAAAAAAAERAEH/2gAIAQEAAT8hRBmQEDAAidrf/9oACAEBAAAAEH//xAAaEAEAAgMBAAAAAAAAAAAAAAABESEAMbFB/9oACAEBAAE/EEoWABWty8wSSAWEFtAd9z//2Q=="
}
}
]Verification
- Outputs must match the private reference implementation bit for bit.
- Cases are the spec's 13 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 4,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%.