背景:将分辨率为1280*720的jpg图片变小为成640*480的图片
方法一:裁剪原始图片中间部分,变小后的图片是原始图片的一部分
QString rawfile="***"; //原始图片
QString dstfile; //裁剪后的图片
QImage rawimg;
if(!rawimg.load(rawfile))
{
qDebug()<<"image load fail:"<<rawfile;
return -1;
}
QImage cutimg=rawimg.copy(QRect((rawimg.width()-640)/2,(rawimg.height()-480)/2,640,480));
if(!cutimg.save(dstfile))
{
qDebug()<<"image save fail:"<<rawfile<<dstfile;
return -1;
}
方法二:缩放图片,变小后的图片是原始图片按比例的缩小版
QString rawfile="***"; //原始图片
QString dstfile; //裁剪后的图片
QImageReader reader(rawfile); // 设置图片名
QSize imageSize(640,480); // 缩放图片尺寸以适应
reader.setScaledSize(imageSize);
QImage img = reader.read();
qDebug()<<"image byteCount: "<<img.byteCount();
if(!img.save(dstfile))
{
qDebug()<<"image save fail:"<<rawfile<<dstfile;
return -1;
}
两种方法都可以达到图片变小的目的,但是方法二比方法一占用内存要小一些。
QImage读取图片时,在load时候就会占用内存,图片一个像素占用4个字节,如果load的jpg图片分辨率为1280*720,占用的内存字节数为1280*720*4字节,这个值可以通过QImage.byteCount()获取到。
QImageReader在read的时候才会实际占用内存,可以通过setScaledSize来设置要读取的字节大小,所以在这个时候只占用640*480*4字节,内存占用大大减少了