QT 前期小白们常遇到的 QImage.save 保存图片失败。已经有解决方法,而且支持中文路径。

一.保存失败的原因。

1.路径不存在:如果保存QImage.save("d:/1/image.png"); 然后你磁盘没有"d:/1"这路径会保存失败。

解决方法:创建一个d:/1"路径然后再QImage.save("d:/1/image.png");

2.路径写错了:小白入行编程前期常犯的问题,包括本人也遇到过这样的错误

解决方法:认真检查一下你的保存路径。路径保存格式有两种写法。

第一种路径格式:C:/Users/Username/Documents/Image.png

第二种路径格式:C:\\Users\\Username\\Documents\\Image.png 

我个人喜欢用第一种,因为可以少些一个字符

3.保存路径有中文:作为一名开发者,大家都会有一个共识,能不用中文路径,尽量不用中文路径。玩游戏的小伙伴可能也遇到过,游戏中文路径会有很多奇奇怪怪的问题。想用中文路径也可以,把字符编码处理一下。

解决方法:不用中文路径。

4.加载的图像有问题:需要保存的那张图像有问题,例如QImage.load(1.png) 加载了一张.png格式的图片,然后保存为QImage.save(2.bmp) 或者 QImage.save(2.jpg)。会保存失败。

解决方法:使用排除法换张图片试试看。

二.自定义保存图像函数

     写了简单的保存图像接口函数,复制拿去用,都加了备注,可以根据你的喜欢去改。

//img 需要保存的图像
//savePath 保存路径
//fileName 保存文件名
void SaveQImage( QImage &img, QString savePath,QString fileName) {


	QString SaveFileName= fileName;   //复制存储路径
	QDir dir(savePath); //加载存储路径
 	bool saveOK = false; //保存合格表示符
	QString imageName; //保存图像绝对路径

	if (dir.exists()) {  //判断路径是否存在,如果存在,则保存图像
		qDebug() << u8"路径" << savePath << u8"存在!";
		 imageName = savePath + "/" + SaveFileName;
		 saveOK = img.save(savePath);
	}
	else { //如果不存在,则创建路径并保存图像

		qDebug() << u8"路径" << savePath << u8"不存在!,创建路径。";
		QDir().mkpath(savePath);
		 imageName = savePath + "/" + SaveFileName;
		 saveOK = img.save(imageName);
	}
	qDebug() << imageName; //打印保存图像的绝对路径
	if (saveOK)//判断是否保存成功
	{
		qDebug() << "save is OK";
		return;
	}
	qDebug() << "save is OK";

};

三.保存图像函数的使用方法

如果需要保存中文路径记得加u8。下面是我使用的例子。

QImage img;
img.load("D:/1.png");
qDebug() << img.height() << img.size();


SaveQImage(img, "D:/1/English", "English.png"); //保存成功
SaveQImage(img, u8"D:/1/中文", u8"中文.png"); //保存成功

SaveQImage(img, "D:\\1\\English2", "English.png"); //保存成功 ,第二种路径写法。

SaveQImage(img, u8"D:\\1\\English2", u8"English.png");  \\保存失败

SaveQImage(img, u8"D:/1/English", u8"English.jpg");  //保存失败
SaveQImage(img, u8"D:/1/中文", u8"中文.jpg"); // 保存失败


SaveQImage(img, u8"D:/1/English", u8"English.bmp");  // 保存失败
SaveQImage(img, u8"D:/1/中文", u8"中文.bmp"); // 保存失败

四.保存效果

1.中文名称

五.图片格式知识科补

JPG(JPEG)格式

  • 全称:JPEG(Joint Photographic Experts Group)
  • 特点
    • 压缩性:采用有损压缩算法,能在保持图像质量的同时减小文件大小。但过高的压缩比例可能导致图像质量降低。
    • 色彩丰富:支持高达1600万种颜色,能够呈现出细腻的图像效果。
    • 广泛兼容性:在各种操作系统和软件中都能打开和编辑,具有良好的兼容性。
    • 可调节性:可以通过调整压缩比例来平衡图像质量和文件大小。
    • 适合存储和传输:由于文件大小较小,适合在网络上存储和传输图像。
  • 应用:广泛用于数字摄影、网页设计、印刷出版等领域。

PNG格式

  • 特点
    • 无损压缩:采用无损压缩算法,能在压缩图像文件的同时保留所有与图像品质有关的信息。
    • 高保真性:形式丰富,兼有GIF和JPG的色彩模式,图像质量高。
    • 透明性:支持透明图像的制作,可以把图像背景设为透明。
    • 显示速度快:只需下载少量图像信息就可以显示出低分辨率的预览图像。
    • 文件体积较小:适合在网络上传输。
  • 应用:广泛应用于网页设计、平面设计等领域。

BMP格式

  • 全称:Bitmap(位图)
  • 特点
    • 无压缩:采用位映射存储格式,不采用任何压缩,因此文件通常较大。
    • 图像深度可选:支持lbit、4bit、8bit及24bit的图像深度。
    • 兼容性好:作为Windows操作系统中的标准图像文件格式,能被多种Windows应用程序所支持。
  • 应用:由于其文件大小较大,通常只在特定场合使用,如某些需要高质量图像输出的场景。

综上所述,JPG、PNG和BMP各有其特点和适用场景。JPG适合需要压缩且对图像质量有一定要求的场景;PNG适合需要保留图像全部信息且支持透明的场景;而BMP则由于其无压缩特性,通常只在需要高质量图像输出的特定场合使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值