C++ 仅计算“的QCryptographicshash”;核心;QImage数据(不包括元数据)

C++ 仅计算“的QCryptographicshash”;核心;QImage数据(不包括元数据),c++,qt,qt5,qimage,C++,Qt,Qt5,Qimage,我有一堆“JPG”文件,它们只对EXIF数据不同 我想做一个快速检查(使用Qt框架),尝试计算“核心”图像数据的散列(而不是文件本身,它将包含元数据)。 到目前为止还不错 这是我加载图像并计算散列的方式: QImage img(R“(D:\Picture.jpg)”; 自动数据=QByteArray::fromRawData(重新解释强制转换(img.constBits()),int(img.sizeInBytes()); QCryptographicshash散列(QCryptographic

我有一堆“JPG”文件,它们只对EXIF数据不同

我想做一个快速检查(使用Qt框架),尝试计算“核心”图像数据的散列(而不是文件本身,它将包含元数据)。 到目前为止还不错

这是我加载图像并计算散列的方式:

QImage img(R“(D:\Picture.jpg)”;
自动数据=QByteArray::fromRawData(重新解释强制转换(img.constBits()),int(img.sizeInBytes());
QCryptographicshash散列(QCryptographicshash::Sha256);
hash.addData(数据);
qDebug()前言:

<>我考虑

data1.append(reinterpret_cast<const char *>(img1.constBits()));
我使用OP提供的样本数据测试了该程序:

并得到以下输出:

Qt版本:5.13.0
第0行字节60差异:1
图像不平等!
我必须承认,该代码的第一个版本刚刚报告了不合格

然后,我尝试制作我自己的计数器样本,并在GIMP中将
Picture.bmp
转换为
Picture.bmp.jpg
(使用100%质量设置,我认为这是损失较小的)。这导致
行0字节0中出现差异。哎呀

然后,我变得好奇,修改了代码,看看这些图像有多大的不同

像素的红色、绿色或蓝色值相差1并不多。我怀疑这对普通人来说是显而易见的

因此,我修改了代码(到公开版本中)以容忍某种差异

eps的<代码>为3:

if (equalImgData(img1, img2, 3)) {
这些图像被认为是相等的。

前言:

<>我考虑

data1.append(reinterpret_cast<const char *>(img1.constBits()));
我使用OP提供的样本数据测试了该程序:

并得到以下输出:

Qt版本:5.13.0
第0行字节60差异:1
图像不平等!
我必须承认,该代码的第一个版本刚刚报告了不合格

然后,我尝试制作我自己的计数器样本,并在GIMP中将
Picture.bmp
转换为
Picture.bmp.jpg
(使用100%质量设置,我认为这是损失较小的)。这导致
行0字节0中出现差异。哎呀

然后,我变得好奇,修改了代码,看看这些图像有多大的不同

像素的红色、绿色或蓝色值相差1并不多。我怀疑这对普通人来说是显而易见的

因此,我修改了代码(到公开版本中)以容忍某种差异

eps的<代码>为3:

if (equalImgData(img1, img2, 3)) {

这些图像被认为是平等的。

评论不用于进一步讨论;此对话已被取消。请尝试检查QPixmap数据,而不是将注释用于扩展讨论;此对话已结束。请尝试检查QPixmap数据,而不是QImage
if (equalImgData(img1, img2, 3)) {