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);
});