mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-05-28 00:30:23 -04:00
Qt 6.8 will introduce native support for the CMYK (8-bit) format. With this patch you will finally be able to correctly see the colors of CMYK images with ICC profile. The testing part has been updated with the addition of an (optional) json file for each image to test. Inside you enter which image to use depending on the Qt version. In short: - Added native CMYK suport to PSD reader - CMYK with alpha is converted using QColorSpace in a RGBA image - Read tests changed to use the correct comparison image based on the Qt version - Fixed also XCF tests: now works with all Qt version (see also [QTBUG-120614](https://bugreports.qt.io/browse/QTBUG-120614)) - Work around for CCBUG: 468288
99 lines
2.3 KiB
C++
99 lines
2.3 KiB
C++
/*
|
|
SPDX-FileCopyrightText: 2024 Mirco Miranda <mircomir@outlook.com>
|
|
|
|
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
|
*/
|
|
|
|
#include "templateimage.h"
|
|
|
|
#include <QFile>
|
|
#include <QJsonArray>
|
|
#include <QJsonDocument>
|
|
#include <QJsonObject>
|
|
#include <QVersionNumber>
|
|
|
|
TemplateImage::TemplateImage(const QFileInfo &fi) :
|
|
m_fi(fi)
|
|
{
|
|
|
|
}
|
|
|
|
bool TemplateImage::isTemplate() const
|
|
{
|
|
auto list = suffixes();
|
|
for (auto&& suffix : list) {
|
|
if (!m_fi.suffix().compare(suffix, Qt::CaseInsensitive))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
QFileInfo TemplateImage::compareImage() const
|
|
{
|
|
auto fi = jsonImage();
|
|
if (fi.exists()) {
|
|
return fi;
|
|
}
|
|
return legacyImage();
|
|
}
|
|
|
|
|
|
QStringList TemplateImage::suffixes()
|
|
{
|
|
return QStringList({"png", "tif", "tiff", "json"});
|
|
}
|
|
|
|
QFileInfo TemplateImage::legacyImage() const
|
|
{
|
|
auto list = suffixes();
|
|
for (auto&& suffix : list) {
|
|
auto fi = QFileInfo(QStringLiteral("%1/%2.%3").arg(m_fi.path(), m_fi.completeBaseName(), suffix));
|
|
if (fi.exists()) {
|
|
return fi;
|
|
}
|
|
}
|
|
return {};
|
|
}
|
|
|
|
QFileInfo TemplateImage::jsonImage() const
|
|
{
|
|
auto fi = QFileInfo(QStringLiteral("%1.json").arg(m_fi.filePath()));
|
|
if (!fi.exists()) {
|
|
return {};
|
|
}
|
|
|
|
QFile f(fi.filePath());
|
|
if (!f.open(QFile::ReadOnly)) {
|
|
return {};
|
|
}
|
|
|
|
QJsonParseError err;
|
|
auto doc = QJsonDocument::fromJson(f.readAll(), &err);
|
|
if (err.error != QJsonParseError::NoError || !doc.isArray()) {
|
|
return {};
|
|
}
|
|
|
|
auto currentQt = QVersionNumber::fromString(qVersion());
|
|
auto arr = doc.array();
|
|
for (auto val : arr) {
|
|
if (!val.isObject())
|
|
continue;
|
|
auto obj = val.toObject();
|
|
auto minQt = QVersionNumber::fromString(obj.value("minQtVersion").toString());
|
|
auto maxQt = QVersionNumber::fromString(obj.value("maxQtVersion").toString());
|
|
auto name = obj.value("fileName").toString();
|
|
|
|
// filter
|
|
if (name.isEmpty())
|
|
continue;
|
|
if (!minQt.isNull() && currentQt < minQt)
|
|
continue;
|
|
if (!maxQt.isNull() && currentQt > maxQt)
|
|
continue;
|
|
return QFileInfo(QStringLiteral("%1/%2").arg(fi.path(), name));
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|