Compare commits

..

1 Commits

Author SHA1 Message Date
b89c2d1b70 Deal with different offsets in kra and ora
Because of a change in zip library, the location of the mimetype
is different for different versions of krita.
2022-01-05 15:51:16 +01:00
6 changed files with 20 additions and 21 deletions

View File

@ -5,4 +5,3 @@ include:
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml

View File

@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.16)
project(KImageFormats)
include(FeatureSummary)
find_package(ECM 5.91.0 NO_MODULE)
find_package(ECM 5.90.0 NO_MODULE)
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)

View File

@ -12,8 +12,6 @@
#include <QVariant>
#include <QtEndian>
#include <cstring>
namespace
{
struct ChunkHeader {
@ -421,7 +419,7 @@ bool ANIHandler::ensureScanned() const
}
// FIXME encoding
const QString stringValue = QString::fromLocal8Bit(value.constData(), std::strlen(value.constData()));
const QString stringValue = QString::fromLocal8Bit(value);
if (chunkId == "INAM") {
mutableThis->m_name = stringValue;
} else if (chunkId == "IART") {

View File

@ -15,7 +15,6 @@
#include <QPainter>
#include <QPrinter>
#include <QProcess>
#include <QStandardPaths>
#include <QTemporaryFile>
// logging category for this framework, default: log stuff >= warning
@ -177,12 +176,6 @@ bool EPSHandler::read(QImage *image)
// create GS command line
const QString gsExec = QStandardPaths::findExecutable(QStringLiteral("gs"));
if (gsExec.isEmpty()) {
qCWarning(EPSPLUGIN) << "Couldn't find gs exectuable (from GhostScript) in PATH.";
return false;
}
QStringList gsArgs;
gsArgs << QLatin1String("-sOutputFile=") + tmpFile.fileName() << QStringLiteral("-q") << QStringLiteral("-g%1x%2").arg(wantedWidth).arg(wantedHeight)
<< QStringLiteral("-dSAFER") << QStringLiteral("-dPARANOIDSAFER") << QStringLiteral("-dNOPAUSE") << QStringLiteral("-sDEVICE=ppm")
@ -199,7 +192,7 @@ bool EPSHandler::read(QImage *image)
QProcess converter;
converter.setProcessChannelMode(QProcess::ForwardedErrorChannel);
converter.start(gsExec, gsArgs);
converter.start(QStringLiteral("gs"), gsArgs);
if (!converter.waitForStarted(3000)) {
qCWarning(EPSPLUGIN) << "Reading EPS files requires gs (from GhostScript)";
return false;

View File

@ -18,6 +18,11 @@
static constexpr char s_magic[] = "application/x-krita";
static constexpr int s_magic_size = sizeof(s_magic) - 1; // -1 to remove the last \0
static constexpr int s_krita3_offset = 0x26;
static constexpr int s_krita4_offset = 0x2B;
static constexpr int s_krita4_64_offset = 0x40;
static constexpr int s_krita5_offset = 0x26;
static constexpr int s_krita5_64_offset = 0x3A;
KraHandler::KraHandler()
{
@ -58,10 +63,8 @@ bool KraHandler::canRead(QIODevice *device)
return false;
}
char buff[57];
if (device->peek(buff, sizeof(buff)) == sizeof(buff)) {
return memcmp(buff + 0x26, s_magic, s_magic_size) == 0;
}
ByteArray ba = device->peek(43 + s_magic_size);
return (ba.contains(s_magic));
return false;
}

View File

@ -17,6 +17,11 @@
static constexpr char s_magic[] = "image/openraster";
static constexpr int s_magic_size = sizeof(s_magic) - 1; // -1 to remove the last \0
static constexpr int s_krita3_offset = 0x26;
static constexpr int s_krita4_offset = 0x2B;
static constexpr int s_krita4_64_offset = 0x40;
static constexpr int s_krita5_offset = 0x26;
static constexpr int s_krita5_64_offset = 0x3A;
OraHandler::OraHandler()
{
@ -57,10 +62,11 @@ bool OraHandler::canRead(QIODevice *device)
return false;
}
char buff[54];
if (device->peek(buff, sizeof(buff)) == sizeof(buff)) {
return memcmp(buff + 0x26, s_magic, s_magic_size) == 0;
}
if (device->peek(s_krita3_offset + s_magic_size).contains(s_magic)) return true;
if (device->peek(s_krita4_offset + s_magic_size).contains(s_magic)) return true;
if (device->peek(s_krita4_64_offset + s_magic_size).contains(s_magic)) return true;
if (device->peek(s_krita5_offset + s_magic_size).contains(s_magic)) return true;
if (device->peek(s_krita5_64_offset + s_magic_size).contains(s_magic)) return true;
return false;
}