Krita Source Code Documentation
Loading...
Searching...
No Matches
KisJPEGExport Class Reference

#include <kis_jpeg_export.h>

+ Inheritance diagram for KisJPEGExport:

Public Member Functions

KisImportExportErrorCode convert (KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration=0) override
 
KisConfigWidgetcreateConfigurationWidget (QWidget *parent, const QByteArray &from="", const QByteArray &to="") const override
 createConfigurationWidget creates a widget that can be used to define the settings for a given import/export filter
 
KisPropertiesConfigurationSP defaultConfiguration (const QByteArray &from="", const QByteArray &to="") const override
 defaultConfiguration defines the default settings for the given import export filter
 
void initializeCapabilities () override
 
 KisJPEGExport (QObject *parent, const QVariantList &)
 
 ~KisJPEGExport () override
 
- Public Member Functions inherited from KisImportExportFilter
virtual QMap< QString, KisExportCheckBase * > exportChecks ()
 generate and return the list of capabilities of this export filter. The list
 
virtual bool exportSupportsGuides () const
 exportSupportsGuides Because guides are in the document and not the image, checking for guides cannot be made an exportCheck.
 
KisPropertiesConfigurationSP lastSavedConfiguration (const QByteArray &from="", const QByteArray &to="") const
 lastSavedConfiguration return the last saved configuration for this filter
 
 Private ()
 
void setBatchMode (bool batchmode)
 
void setFilename (const QString &filename)
 
void setImportUserFeedBackInterface (KisImportUserFeedbackInterface *interface)
 
void setMimeType (const QString &mime)
 
void setRealFilename (const QString &filename)
 
void setUpdater (QPointer< KoUpdater > updater)
 
virtual bool supportsIO () const
 Override and return false for the filters that use a library that cannot handle file handles, only file names.
 
QPointer< KoUpdaterupdater ()
 
virtual QString verify (const QString &fileName) const
 Verify whether the given file is correct and readable.
 
 ~KisImportExportFilter () override
 
 ~Private ()
 

Additional Inherited Members

- Public Attributes inherited from KisImportExportFilter
bool batchmode
 
QMap< QString, KisExportCheckBase * > capabilities
 
QString filename
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface {nullptr}
 
QByteArray mime
 
QString realFilename
 
QPointer< KoUpdaterupdater
 
- Static Public Attributes inherited from KisImportExportFilter
static const QString CICPPrimariesTag = "CICPCompatiblePrimaries"
 
static const QString CICPTransferCharacteristicsTag = "CICPCompatibleTransferFunction"
 
static const QString ColorDepthIDTag = "ColorDepthID"
 
static const QString ColorModelIDTag = "ColorModelID"
 
static const QString HDRTag = "HDRSupported"
 
static const QString ImageContainsTransparencyTag = "ImageContainsTransparency"
 
static const QString sRGBTag = "sRGB"
 
- Protected Member Functions inherited from KisImportExportFilter
void addCapability (KisExportCheckBase *capability)
 
void addSupportedColorModels (QList< QPair< KoID, KoID > > supportedColorModels, const QString &name, KisExportCheckBase::Level level=KisExportCheckBase::PARTIALLY)
 
bool batchMode () const
 
QString filename () const
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface () const
 
 KisImportExportFilter (QObject *parent=0)
 
QByteArray mimeType () const
 
QString realFilename () const
 
void setProgress (int value)
 
QString verifyZiPBasedFiles (const QString &fileName, const QStringList &filesToCheck) const
 

Detailed Description

Definition at line 32 of file kis_jpeg_export.h.

Constructor & Destructor Documentation

◆ KisJPEGExport()

KisJPEGExport::KisJPEGExport ( QObject * parent,
const QVariantList &  )

Definition at line 49 of file kis_jpeg_export.cc.

49 : KisImportExportFilter(parent)
50{
51}
KisImportExportFilter(QObject *parent=0)

◆ ~KisJPEGExport()

KisJPEGExport::~KisJPEGExport ( )
override

Definition at line 53 of file kis_jpeg_export.cc.

54{
55}

Member Function Documentation

◆ convert()

KisImportExportErrorCode KisJPEGExport::convert ( KisDocument * document,
QIODevice * io,
KisPropertiesConfigurationSP configuration = 0 )
overridevirtual

The filter chain calls this method to perform the actual conversion. The passed mimetypes should be a pair of those you specified in your .desktop file. You have to implement this method to make the filter work.

Returns
The error status, see the #ConversionStatus enum. KisImportExportFilter::OK means that everything is alright.

Implements KisImportExportFilter.

Definition at line 57 of file kis_jpeg_export.cc.

58{
59 KisImageSP image = document->savingImage();
60 Q_CHECK_PTR(image);
61
62 // An extra option to pass to the config widget to set the state correctly, this isn't saved
63 const KoColorSpace* cs = image->projection()->colorSpace();
64 bool sRGB = cs->profile()->name().contains(QLatin1String("srgb"), Qt::CaseInsensitive);
65 configuration->setProperty("is_sRGB", sRGB);
66
67 KisJPEGOptions options;
68 options.progressive = configuration->getBool("progressive", false);
69 options.quality = configuration->getInt("quality", 80);
70 options.forceSRGB = configuration->getBool("forceSRGB", false);
71 options.saveProfile = configuration->getBool("saveProfile", true);
72 options.optimize = configuration->getBool("optimize", true);
73 options.smooth = configuration->getInt("smoothing", 0);
74 options.baseLineJPEG = configuration->getBool("baseline", true);
75 options.subsampling = configuration->getInt("subsampling", 0);
76 options.exif = configuration->getBool("exif", true);
77 options.iptc = configuration->getBool("iptc", true);
78 options.xmp = configuration->getBool("xmp", true);
80 c.fromQColor(Qt::white);
81 options.transparencyFillColor = configuration->getColor("transparencyFillcolor", c).toQColor();
83 m.setEnabledFilters(configuration->getString("filters").split(","));
84 options.filters = m.enabledFilters();
85 options.storeAuthor = configuration->getBool("storeAuthor", false);
86 options.storeDocumentMetaData = configuration->getBool("storeMetaData", false);
87
88 KisPaintDeviceSP pd = new KisPaintDevice(*image->projection());
89
90 KisJPEGConverter kpc(document, batchMode());
91 KisPaintLayerSP l = new KisPaintLayer(image, "projection", OPACITY_OPAQUE_U8, pd);
92
93 KisExifInfoVisitor exivInfoVisitor;
94 exivInfoVisitor.visit(image->rootLayer().data());
95
96 QScopedPointer<KisMetaData::Store> metaDataStore;
97 if (exivInfoVisitor.metaDataCount() == 1) {
98 metaDataStore.reset(new KisMetaData::Store(*exivInfoVisitor.exifInfo()));
99 }
100 else {
101 metaDataStore.reset(new KisMetaData::Store());
102 }
103
104 //add extra meta-data here
106 Q_ASSERT(dcSchema);
107 if (options.storeDocumentMetaData) {
108 QString title = document->documentInfo()->aboutInfo("title");
109 if (!title.isEmpty()) {
110 if (metaDataStore->containsEntry("title")) {
111 metaDataStore->removeEntry("title");
112 }
113 metaDataStore->addEntry(KisMetaData::Entry(dcSchema, "title", KisMetaData::Value(QVariant(title))));
114 }
115 QString description = document->documentInfo()->aboutInfo("subject");
116 if (description.isEmpty()) {
117 description = document->documentInfo()->aboutInfo("abstract");
118 }
119 if (!description.isEmpty()) {
120 QString keywords = document->documentInfo()->aboutInfo("keyword");
121 if (!keywords.isEmpty()) {
122 description = description + " keywords: " + keywords;
123 }
124 if (metaDataStore->containsEntry("description")) {
125 metaDataStore->removeEntry("description");
126 }
127 metaDataStore->addEntry(KisMetaData::Entry(dcSchema, "description", KisMetaData::Value(QVariant(description))));
128 }
129 QString license = document->documentInfo()->aboutInfo("license");
130 if (!license.isEmpty()) {
131 if (metaDataStore->containsEntry("rights")) {
132 metaDataStore->removeEntry("rights");
133 }
134 metaDataStore->addEntry(KisMetaData::Entry(dcSchema, "rights", KisMetaData::Value(QVariant(license))));
135 }
136 QString date = document->documentInfo()->aboutInfo("date");
137 if (!date.isEmpty() && !metaDataStore->containsEntry("rights")) {
138 metaDataStore->addEntry(KisMetaData::Entry(dcSchema, "date", KisMetaData::Value(QVariant(date))));
139 }
140 }
141 if (options.storeAuthor) {
142 QString author = document->documentInfo()->authorInfo("creator");
143 if (!author.isEmpty()) {
144 if (!document->documentInfo()->authorContactInfo().isEmpty()) {
145 QString contact = document->documentInfo()->authorContactInfo().at(0);
146 if (!contact.isEmpty()) {
147 author = author+"("+contact+")";
148 }
149 }
150 if (metaDataStore->containsEntry("creator")) {
151 metaDataStore->removeEntry("creator");
152 }
153 metaDataStore->addEntry(KisMetaData::Entry(dcSchema, "creator", KisMetaData::Value(QVariant(author))));
154 }
155 }
156
157 KisImportExportErrorCode res = kpc.buildFile(io, l, options, metaDataStore.data());
158 return res;
159}
const quint8 OPACITY_OPAQUE_U8
The KisExifInfoVisitor class looks for a layer with metadata.
KisMetaData::Store * exifInfo()
bool visit(KisNode *) override
KisGroupLayerSP rootLayer() const
KisPaintDeviceSP projection() const
virtual void setEnabledFilters(const QStringList &enabledFilters)
enable the filters in the given list; others will be disabled.
static KisMetaData::SchemaRegistry * instance()
const Schema * schemaFromUri(const QString &uri) const
static const QString DublinCoreSchemaUri
const KoColorSpace * colorSpace() const
virtual const KoColorProfile * profile() const =0
QList< const KisMetaData::Filter * > filters
static KoColorSpaceRegistry * instance()

References KisJPEGOptions::baseLineJPEG, KisImportExportFilter::batchMode(), KisJPEGConverter::buildFile(), KisPaintDevice::colorSpace(), KisSharedPtr< T >::data(), KisMetaData::Schema::DublinCoreSchemaUri, KisMetaData::FilterRegistryModel::enabledFilters(), KisJPEGOptions::exif, KisExifInfoVisitor::exifInfo(), KisJPEGOptions::filters, KisJPEGOptions::forceSRGB, KoColor::fromQColor(), KisMetaData::SchemaRegistry::instance(), KoColorSpaceRegistry::instance(), KisJPEGOptions::iptc, KisExifInfoVisitor::metaDataCount(), KoColorProfile::name, OPACITY_OPAQUE_U8, KisJPEGOptions::optimize, KoColorSpace::profile(), KisJPEGOptions::progressive, KisImage::projection(), KisJPEGOptions::quality, KisImage::rootLayer(), KisJPEGOptions::saveProfile, KisMetaData::SchemaRegistry::schemaFromUri(), KisMetaData::FilterRegistryModel::setEnabledFilters(), KisJPEGOptions::smooth, KisJPEGOptions::storeAuthor, KisJPEGOptions::storeDocumentMetaData, KisJPEGOptions::subsampling, KisJPEGOptions::transparencyFillColor, KisExifInfoVisitor::visit(), and KisJPEGOptions::xmp.

◆ createConfigurationWidget()

KisConfigWidget * KisJPEGExport::createConfigurationWidget ( QWidget * parent,
const QByteArray & from = "",
const QByteArray & to = "" ) const
overridevirtual

createConfigurationWidget creates a widget that can be used to define the settings for a given import/export filter

Parameters
parentthe owner of the widget; the caller is responsible for deleting
fromThe mimetype of the source file/document
toThe mimetype of the destination file/document
Returns
the widget

Reimplemented from KisImportExportFilter.

Definition at line 190 of file kis_jpeg_export.cc.

191{
192 return new KisWdgOptionsJPEG(parent);
193}

◆ defaultConfiguration()

KisPropertiesConfigurationSP KisJPEGExport::defaultConfiguration ( const QByteArray & from = "",
const QByteArray & to = "" ) const
overridevirtual

defaultConfiguration defines the default settings for the given import export filter

Parameters
fromThe mimetype of the source file/document
toThe mimetype of the destination file/document
Returns
a serializable KisPropertiesConfiguration object

Reimplemented from KisImportExportFilter.

Definition at line 161 of file kis_jpeg_export.cc.

162{
164 cfg->setProperty("progressive", false);
165 cfg->setProperty("quality", 80);
166 cfg->setProperty("forceSRGB", false);
167 cfg->setProperty("saveProfile", true);
168 cfg->setProperty("optimize", true);
169 cfg->setProperty("smoothing", 0);
170 cfg->setProperty("baseline", true);
171 cfg->setProperty("subsampling", 0);
172 cfg->setProperty("exif", true);
173 cfg->setProperty("iptc", true);
174 cfg->setProperty("xmp", true);
175 cfg->setProperty("storeAuthor", false);
176 cfg->setProperty("storeMetaData", false);
177
178 KoColor fill_color(KoColorSpaceRegistry::instance()->rgb8());
179 fill_color = KoColor();
180 fill_color.fromQColor(Qt::white);
181 QVariant v;
182 v.setValue(fill_color);
183
184 cfg->setProperty("transparencyFillcolor", v);
185 cfg->setProperty("filters", "");
186
187 return cfg;
188}
qreal v

References KoColor::fromQColor(), KoColorSpaceRegistry::instance(), and v.

◆ initializeCapabilities()

void KisJPEGExport::initializeCapabilities ( )
overridevirtual

Reimplemented from KisImportExportFilter.

Definition at line 195 of file kis_jpeg_export.cc.

196{
199
200 QList<QPair<KoID, KoID> > supportedColorModels;
201 supportedColorModels << QPair<KoID, KoID>()
202 << QPair<KoID, KoID>(RGBAColorModelID, Integer8BitsColorDepthID)
203 << QPair<KoID, KoID>(GrayAColorModelID, Integer8BitsColorDepthID)
204 << QPair<KoID, KoID>(CMYKAColorModelID, Integer8BitsColorDepthID);
205 addSupportedColorModels(supportedColorModels, "JPEG");
206}
VertexDescriptor get(PredecessorMap const &m, VertexDescriptor v)
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
const KoID CMYKAColorModelID("CMYKA", ki18n("CMYK/Alpha"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
static KisExportCheckRegistry * instance()
void addSupportedColorModels(QList< QPair< KoID, KoID > > supportedColorModels, const QString &name, KisExportCheckBase::Level level=KisExportCheckBase::PARTIALLY)
void addCapability(KisExportCheckBase *capability)
QPainterPath create(const char32_t codepoint, double height)
Creates a tofu missing glyph indicator representing the provided Unicode codepoint.

References KisImportExportFilter::addCapability(), KisImportExportFilter::addSupportedColorModels(), CMYKAColorModelID, get(), GrayAColorModelID, KisExportCheckRegistry::instance(), Integer8BitsColorDepthID, RGBAColorModelID, and KisExportCheckBase::SUPPORTED.


The documentation for this class was generated from the following files: