图片验证码生成器
mkdir build
cd build
cmake ..
maketime ./test生成base64编码的验证码图片
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
./test 1.30s user 0.01s system 94% cpu 1.376 total#include "captcha.h"
#include "base64.h"
int main(int argc, char **argv) {
captcha_context ctx;
ctx.config.width = 200;
ctx.config.height = 50;
ctx.config.code_size = 6;
ctx.config.charset = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
ctx.config.charset_size = 32;
ctx.config.font_path = "/home/hello/code/cpp/captcha/fonts/Tagesschrift-Regular.ttf";
ctx.config.noise_points.count = 100;
ctx.config.noise_points.thickness = 3;
ctx.config.noise_lines.count = 5;
ctx.config.noise_lines.thickness = 2;
init_captcah_context(&ctx);
unsigned char *data;
int size = 0;
for (int i = 0; i < 1000; i++) {
gen_captcha_random(&ctx, &data, &size);
size_t base64_size = 0;
char* base64 = base64_encode(data, size, &base64_size);
if (i == 999) {
printf("%s\n", base64);
}
// printf("%s\n", base64);
free(data);
free(base64);
}
// 自行指定code
// const char *code = "ABCDEF";
// gen_captcha(&ctx, code, 6, &data, &size);
// size_t base64_size = 0;
// char* base64 = base64_encode(data, size, &base64_size);
// printf("%s\n", base64);
// free(data);
// free(base64);
destroy_captcha_context(&ctx);
return 0;
}