File indexing completed on 2025-03-09 03:50:15
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2008-11-28 0007 * Description : PNG image Converter batch tool. 0008 * 0009 * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * 0011 * SPDX-License-Identifier: GPL-2.0-or-later 0012 * 0013 * ============================================================ */ 0014 0015 #include "converttopng.h" 0016 0017 // Qt includes 0018 0019 #include <QFileInfo> 0020 #include <QWidget> 0021 #include <QLabel> 0022 #include <QVBoxLayout> 0023 0024 // KDE includes 0025 0026 #include <kconfiggroup.h> 0027 #include <ksharedconfig.h> 0028 #include <klocalizedstring.h> 0029 0030 // Local includes 0031 0032 #include "dimg.h" 0033 #include "dimgloader.h" 0034 #include "dpluginloader.h" 0035 0036 namespace DigikamBqmConvertToPngPlugin 0037 { 0038 0039 ConvertToPNG::ConvertToPNG(QObject* const parent) 0040 : BatchTool(QLatin1String("ConvertToPNG"), ConvertTool, parent), 0041 m_changeSettings(true) 0042 { 0043 } 0044 0045 ConvertToPNG::~ConvertToPNG() 0046 { 0047 } 0048 0049 BatchTool* ConvertToPNG::clone(QObject* const parent) const 0050 { 0051 return new ConvertToPNG(parent); 0052 } 0053 0054 void ConvertToPNG::registerSettingsWidget() 0055 { 0056 QWidget* const box = new QWidget(); 0057 QVBoxLayout* const vlay = new QVBoxLayout(box); 0058 DImgLoaderSettings* const PNGBox = DPluginLoader::instance()->exportWidget(QLatin1String("PNG")); 0059 QLabel* const note = new QLabel(i18n("<b>If conversion to PNG fails, this may be due to the " 0060 "color profile check. Simply insert the tool for " 0061 "color profile conversion before this tool and " 0062 "select the desired color profile.</b>")); 0063 note->setWordWrap(true); 0064 note->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); 0065 0066 vlay->addWidget(PNGBox); 0067 vlay->addWidget(note); 0068 vlay->addStretch(10); 0069 0070 connect(PNGBox, SIGNAL(signalSettingsChanged()), 0071 this, SLOT(slotSettingsChanged())); 0072 0073 m_settingsWidget = box; 0074 0075 BatchTool::registerSettingsWidget(); 0076 } 0077 0078 BatchToolSettings ConvertToPNG::defaultSettings() 0079 { 0080 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 0081 KConfigGroup group = config->group(QLatin1String("ImageViewer Settings")); 0082 int compression = group.readEntry(QLatin1String("PNGCompression"), 9); 0083 BatchToolSettings settings; 0084 settings.insert(QLatin1String("quality"), compression); 0085 0086 return settings; 0087 } 0088 0089 void ConvertToPNG::slotAssignSettings2Widget() 0090 { 0091 m_changeSettings = false; 0092 0093 DImgLoaderSettings* const PNGBox = dynamic_cast<DImgLoaderSettings*>(m_settingsWidget); 0094 0095 if (PNGBox) 0096 { 0097 DImgLoaderPrms set; 0098 set.insert(QLatin1String("quality"), settings()[QLatin1String("quality")].toInt()); 0099 PNGBox->setSettings(set); 0100 } 0101 0102 m_changeSettings = true; 0103 } 0104 0105 void ConvertToPNG::slotSettingsChanged() 0106 { 0107 if (m_changeSettings) 0108 { 0109 DImgLoaderSettings* const PNGBox = dynamic_cast<DImgLoaderSettings*>(m_settingsWidget); 0110 0111 if (PNGBox) 0112 { 0113 BatchToolSettings settings; 0114 settings.insert(QLatin1String("quality"), PNGBox->settings()[QLatin1String("quality")].toInt()); 0115 BatchTool::slotSettingsChanged(settings); 0116 } 0117 } 0118 } 0119 0120 QString ConvertToPNG::outputSuffix() const 0121 { 0122 return QLatin1String("png"); 0123 } 0124 0125 bool ConvertToPNG::toolOperations() 0126 { 0127 if (!loadToDImg()) 0128 { 0129 return false; 0130 } 0131 0132 int PNGCompression = DImgLoader::convertCompressionForLibPng(settings()[QLatin1String("quality")].toInt()); 0133 image().setAttribute(QLatin1String("quality"), PNGCompression); 0134 0135 return (savefromDImg()); 0136 } 0137 0138 } // namespace DigikamBqmConvertToPngPlugin 0139 0140 #include "moc_converttopng.cpp"