700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Qt 图片压缩 指定文件大小和尺寸

Qt 图片压缩 指定文件大小和尺寸

时间:2021-12-01 00:01:52

相关推荐

Qt 图片压缩 指定文件大小和尺寸

#include <QApplication>#include <QDebug>#include <QImage>#include <QPixmap>#include <QFile>#include <QBuffer>#include <QElapsedTimer>/*!* \brief compressImage* \param srcImg 源图像文件* \param imgSize 压缩指定的图像尺寸 如果需要保持原尺寸不变则传入srcImg.size()* \param fileSize 压缩指定的文件大小* \return*/QImage compressImage(const QImage &srcImg,QSize imgSize = QSize(1024,768),int fileSize = 180*1024){QPixmap pixmap;pixmap = pixmap.fromImage(srcImg.scaled(imgSize,Qt::IgnoreAspectRatio,Qt::FastTransformation));QBuffer buff;int quality = 100;pixmap.save(&buff, "jpeg",quality);QImage outImage = QImage::fromData(buff.buffer());//根据文件大小qint64 fsz = buff.size();while (fsz > fileSize){quality = quality - 2;if (quality <= 0) break;QBuffer tempBuff;bool isOk = pixmap.save(&tempBuff, "jpeg",quality);if(isOk){outImage = QImage::fromData(tempBuff.buffer());}fsz = tempBuff.size();}return outImage;}int main( int argc, char *argv[] ){QApplication app( argc, argv );QString inImg = "image_in.jpg";QString outImg = "image_out.jpg";if(QFile::exists(inImg)){QElapsedTimer elpTime;elpTime.start();QImage img = compressImage(QImage(inImg));bool isOk = img.save(outImg);qDebug("save new file to %s %s,elapsedTime:%lld ms",outImg.toLocal8Bit().data(),isOk?"success":"fail",elpTime.elapsed());} else {qWarning("%s:file does not exist",inImg.toLocal8Bit().data());}return app.exec();}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。