Qt:以预期的压缩格式保存图像
Qt: Saving an image in intended compression format
我正在使用 Qt
并从 QML
UI 项目中保存图像文件。以下是我所做的
auto screenshot = quick_item->grabToImage();
screenshot->saveToFile("/somepath/filename.jpeg");
// OR sometimes use like png like
screenshot->saveToFile("/somepath/filename.png");
这在所有平台上都运行得非常好。我打开文件图像按预期保存。
现在我的问题是:
我刚刚提到 .jpeg
作为文件扩展名,同时将文件名作为参数提供给 saveToFile
。这可行,但是,我是否需要使用 QImageWriter
来确保图像实际上以 jpeg
/png
格式压缩?
像jpeg
这样的有损压缩会怎样?
如果我想在 android 中喜欢,如何控制有损压缩我可以做一个 image.compress(CompressFormat.JPEG, 80, stream)
其中 80 是 percentage of quality for Compress ?
您不能直接从 QQuickItemGrabResult
执行此操作,您必须为此使用 QImage::save()
:
auto screenshot = quick_item->grabToImage();
auto image = screenshot->image();
image.save("/somepath/filename.jpeg", nullptr, 80);
save的第二个参数是格式,可以留空然后根据文件扩展名猜测,第三个参数是压缩质量
如果您使用像 png 这样的无损格式,质量因素没有影响。您可以将其设置为 -1
(默认值),省略参数或使用您将用于有损格式的因子。
编辑:正如@Arsenal 所指出的,质量因子映射到无损格式(支持它的格式)的压缩级别。例如,在 PNG 中,质量 0 映射到 PNG 压缩级别 9(最小文件大小),质量 100 映射到 PNG 压缩级别 0(最大文件大小)。 Qt 中 PNG 的默认质量是 50,映射到 PNG 压缩级别 4。
我正在使用 Qt
并从 QML
UI 项目中保存图像文件。以下是我所做的
auto screenshot = quick_item->grabToImage();
screenshot->saveToFile("/somepath/filename.jpeg");
// OR sometimes use like png like
screenshot->saveToFile("/somepath/filename.png");
这在所有平台上都运行得非常好。我打开文件图像按预期保存。
现在我的问题是:
我刚刚提到 .jpeg
作为文件扩展名,同时将文件名作为参数提供给 saveToFile
。这可行,但是,我是否需要使用 QImageWriter
来确保图像实际上以 jpeg
/png
格式压缩?
像jpeg
这样的有损压缩会怎样?
如果我想在 android 中喜欢,如何控制有损压缩我可以做一个 image.compress(CompressFormat.JPEG, 80, stream)
其中 80 是 percentage of quality for Compress ?
您不能直接从 QQuickItemGrabResult
执行此操作,您必须为此使用 QImage::save()
:
auto screenshot = quick_item->grabToImage();
auto image = screenshot->image();
image.save("/somepath/filename.jpeg", nullptr, 80);
save的第二个参数是格式,可以留空然后根据文件扩展名猜测,第三个参数是压缩质量
如果您使用像 png 这样的无损格式,质量因素没有影响。您可以将其设置为 -1
(默认值),省略参数或使用您将用于有损格式的因子。
编辑:正如@Arsenal 所指出的,质量因子映射到无损格式(支持它的格式)的压缩级别。例如,在 PNG 中,质量 0 映射到 PNG 压缩级别 9(最小文件大小),质量 100 映射到 PNG 压缩级别 0(最大文件大小)。 Qt 中 PNG 的默认质量是 50,映射到 PNG 压缩级别 4。