读取本地图片后,保存为jpg格式,图片大小失真,每张本地图片4M,16张图片拼接后只有2M大小,后找到原因,图片保存格式改为bmp格式即可;
找个大半天的原因,原来在此,特此记录!
附:
BMP是Windows操作系统中的标准图像文件格式,它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此BMP文件所占用的空间很大。
JPEG是最常用的图像文件格式,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。
简单来说二者的区别有以下几点:
1、图像文件大小不同
BMP不采用其他任何压缩,因此BMP文件所占用的空间很大;JPEG具有调节图像质量的功能,允许用不同的压缩比例对这种文件压缩。
2、图像文件格式不同、后缀名不同
BMP是Bitmap的缩写,后缀名是BMP;JPG又称为JPEG,文件后辍名为".jpg"或".jpeg"。
3、应用广度不同
BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
相比BMP,JPG应用也非常广泛,目前各类浏览器均支JPG这种图像格式,因此jpg是最受欢迎的图像格式。
链接:https://www.zhihu.com/question/584484660/answer/2902451754
//照片旋转并拼接-传本地图片文件夹路径
void MainWindow::image_rotationAndsplicing(QString fullpath)
{
QString strDirpath = QString(QStringLiteral("F:/work"));
QDir dir(strDirpath);
QFileInfoList Info_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
QListIterator<QFileInfo> Iterator(Info_list);
QStringList iamgeNameList;
QFileInfo Info;
while (Iterator.hasNext())
{
Info = Iterator.next();
if (Info.isFile())
{
iamgeNameList << QDir(Info.absoluteFilePath()).dirName();
qDebug()<<QDir(Info.absoluteFilePath()).dirName();
}
}
//按照图片名称后数字排序
std::sort(iamgeNameList.begin(), iamgeNameList.end(), [](const QString& s1, const QString& s2){
return s1.split(".")[0].split(QStringLiteral("到"))[1].toInt() < s2.split(".")[0].split(QStringLiteral("到"))[1].toInt();
});
QImage baseImage(strDirpath+"/"+iamgeNameList[0]);
QImage imageWithOverlay = QImage(baseImage.size().width(),
baseImage.size().height()*iamgeNameList.size(), //输出的图片按照第一张图片的i倍高
QImage::Format_ARGB32);
QPainter painter(&imageWithOverlay);
// painter.setCompositionMode(QPainter::CompositionMode_Source);
// painter.fillRect(imageWithOverlay.rect(), Qt::transparent);
int temp = 999;
for (int i = 0; i < iamgeNameList.size(); ++i) {
temp = iamgeNameList[i].split(".")[0].split(QStringLiteral("到"))[1].toInt();
qDebug()<<"temp:"<<temp;
QImage baseImage2(strDirpath+"/"+iamgeNameList[i]);
baseImage2 = baseImage2.scaled(baseImage2.width(),baseImage2.height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
// painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
// painter.drawImage(0, baseImage.size().height()*i, baseImage2);
painter.drawImage(0,baseImage.size().height()*i,baseImage2);
}
painter.end();
QMatrix matrix;
matrix.rotate(-90.0);//逆时针旋转90°
imageWithOverlay = imageWithOverlay.transformed(matrix, Qt::SmoothTransformation);
QDir pinjiedir(strDirpath+"/pinjie");
if (!pinjiedir.exists()) pinjiedir.mkpath(strDirpath+"/pinjie");
imageWithOverlay.save(strDirpath+"/pinjie/pinjie4.bmp");
}