加密:
FILE *p; FILE *q; int n; int m; int *a; char *name;
p = fopen("D://projects//facefuse//roufu//mask.png","rb");
n = _filelength(_fileno(p));//得到图像长度
//n = int(double(n)/4 + 0.5) * 4;
n = (n +3)/4 * 4;//字节对齐
a = (int*)malloc(n+1);
fread(a, sizeof(int), n/4,p);
m = 128;
for(int i=0; i< n/4;i++)
a[i] = a[i] - m;
name = "D://projects//facefuse//roufu//a.a"; // 可以生成任意的二进制流文件
q = fopen(name, "wb");
fwrite(a, sizeof(int),n/4,q);
fclose(p);
fclose(q);
---------------------------------
解密:
FILE *p = fopen(src, "rb");//src就是上面的a.a
int n = _filelength(_fileno(p));
n = (n +3)/4 * 4;
int *a = (int*)malloc(n+1);
fread(a,sizeof(int),n/4,p);
int m = 128;
/**/for (int i=0;i<n/4;i++)
{
a[i] = a[i] + m;
}
FILE *q;
char * name = "a.png";
q = fopen(name, "wb");
fwrite(a, sizeof(int), n/4,q);
fclose(p);
fclose(q);
IplImage* result = cvLoadImage(name); //保存为图像类型,继续处理
remove(name);
是从网上找到的简单对图像加密方法。
把图像文件当做一个二进制流进行处理,加密时对每个字节都减掉同一个值,解密时再加回来,就成了原图像。
值得注意的是,因为有个n/4的操作,所以要求对长度进行4字节对齐,否则在解密时得到的result是空值。
PS:
代码在windows上运行良好,但在iOS上有N多不一致,移植很困难。