生成纯色图像

时间:2018-10-10 16:00:12

标签: image

Stack面临的挑战,包括1600万个png或jpeg格式的单像素图​​像, 我在JS中有一个可用的版本,但是生成图像需要12个小时,而使用Sharp库则每个图像为42字节。

因此,我将其带给您,请尝试使用您可以使用的更好的语言来使其更好,并使其尽可能多线程化,目的是使文件尽可能小并生成图像。尽可能快,最好达到一些瓶颈,例如磁盘或cpu的使用。

我会说最好的选择是构造原始文件头,但是由于我不知道png或jpeg标准或如何使用任何语言来做到这一点,因此我将其留给您。

如果您能以某种方式修改它生成的像素数量,那么可以得到奖励。 1x2、10x10等,但不是必需的。

这是我的JS版本,它确实很糟糕。
它在0x000000-0xFFFFFF之间运行32个循环,从不同的点开始,到另一个开始的地方结束,虽然速度不快,但它是有效的原型。

const sharp = require('sharp');

const create = hex => sharp({
    create: {
        background: `#${hex}`,
        channels: 3,
        height: 1,
        width: 1,
    },
}).toFile(`images/${hex}.png`);

[
    0x000000, 0x080000,
    0x100000, 0x180000,
    0x200000, 0x280000,
    0x300000, 0x380000,
    0x400000, 0x480000,
    0x500000, 0x580000,
    0x600000, 0x680000,
    0x700000, 0x780000,
    0x800000, 0x880000,
    0x900000, 0x980000,
    0xA00000, 0xA80000,
    0xB00000, 0xB80000,
    0xC00000, 0xC80000,
    0xD00000, 0xD80000,
    0xE00000, 0xE80000,
    0xF00000, 0xF80000,
].forEach(async start => {
    console.log('Starting: ', start);
    for (let i = start; i <= start + 0x080000; i++) await create(i.toString(16).padStart(6, '0'));
    console.log('Ending: ', start);
});

0 个答案:

没有答案