| Attached Files | scribus-trunk-override-compression.diff [^] (17,777 bytes) 09-Dec-20 20:05 [Show Content] [Hide Content]diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pageitem.cpp scribus-trunk/scribus/pageitem.cpp
--- scribus-trunk-orig/scribus/pageitem.cpp 2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/pageitem.cpp 2009-12-20 14:31:07.000000000 +0100
@@ -123,6 +123,10 @@
UseEmbedded(other.UseEmbedded),
EmProfile(other.EmProfile),
IRender(other.IRender),
+ OverrideCompressionMethod(other.OverrideCompressionMethod),
+ CompressionMethodIndex(other.CompressionMethodIndex),
+ OverrideCompressionQuality(other.OverrideCompressionQuality),
+ CompressionQualityIndex(other.CompressionQualityIndex),
PictureIsAvailable(other.PictureIsAvailable),
OrigW(other.OrigW),
@@ -322,6 +326,10 @@
// Initialize superclass(es)
: QObject(pa), SingleObservable<PageItem>(pa->itemsChanged()),
// Initialize member variables
+ OverrideCompressionMethod(false),
+ CompressionMethodIndex(0),
+ OverrideCompressionQuality(false),
+ CompressionQualityIndex(0),
itemText(pa),
undoManager(UndoManager::instance()),
lineShadeVal(100),
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pageitem.h scribus-trunk/scribus/pageitem.h
--- scribus-trunk-orig/scribus/pageitem.h 2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/pageitem.h 2009-12-20 14:31:07.000000000 +0100
@@ -442,6 +442,11 @@
QString cmsProfile() const { return IProfile; }
void setCmsProfile(QString val) { IProfile = val; }
+ bool OverrideCompressionMethod;
+ int CompressionMethodIndex;
+ bool OverrideCompressionQuality;
+ int CompressionQualityIndex;
+
/*! Flag to hiold image file availability */
bool PictureIsAvailable;
int OrigW;
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pdflib_core.cpp scribus-trunk/scribus/pdflib_core.cpp
--- scribus-trunk-orig/scribus/pdflib_core.cpp 2009-12-20 14:27:36.000000000 +0100
+++ scribus-trunk/scribus/pdflib_core.cpp 2009-12-20 14:31:07.000000000 +0100
@@ -501,7 +501,7 @@
return (succeed ? bytesWritten : 0);
}
-int PDFLibCore::WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, bool cmyk,
+int PDFLibCore::WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, int quality, bool cmyk,
bool gray, bool sameFile, bool precal)
{
bool succeed = true;
@@ -516,7 +516,7 @@
tmpFile = QDir::convertSeparators(ScPaths::getTempFileDir() + "sc.jpg");
if ((gray) && (!precal))
image.convertToGray();
- if (image.Convert2JPG(tmpFile, Options.Quality, cmyk, gray))
+ if (image.Convert2JPG(tmpFile, quality, cmyk, gray))
jpgFileName = tmpFile;
}
if (jpgFileName.isEmpty())
@@ -8918,6 +8918,7 @@
PutDoc("/ColorSpace /DeviceCMYK\n");
}
}
+ enum PDFOptions::PDFCompression compress_method = Options.CompressMethod;
enum PDFOptions::PDFCompression cm = Options.CompressMethod;
bool exportToCMYK = false, exportToGrayscale = false, jpegUseOriginal = false;
if (!Options.UseRGB && !(doc.HasCMS && Options.UseProfiles2 && !realCMYK))
@@ -8928,6 +8929,8 @@
else
exportToCMYK = !Options.UseRGB;
}
+ if (c->OverrideCompressionMethod)
+ compress_method = cm = (enum PDFOptions::PDFCompression) c->CompressionMethodIndex;
if (extensionIndicatesJPEG(ext) && (cm != PDFOptions::Compression_None))
{
if (((Options.UseRGB || Options.UseProfiles2) && (cm == PDFOptions::Compression_Auto) && (c->effectsInUse.count() == 0) && (img.imgInfo.colorspace == ColorSpaceRGB)) && (!img.imgInfo.progressive) && (!((Options.RecalcPic) && (Options.PicRes < (qMax(72.0 / c->imageXScale(), 72.0 / c->imageYScale()))))))
@@ -8946,7 +8949,7 @@
}*/
else
{
- if (Options.CompressMethod == PDFOptions::Compression_JPEG)
+ if (compress_method == PDFOptions::Compression_JPEG)
{
if (realCMYK || !((Options.UseRGB) || (Options.UseProfiles2)))
{
@@ -8964,7 +8967,7 @@
}
else
{
- if ((Options.CompressMethod == PDFOptions::Compression_JPEG) || (Options.CompressMethod == PDFOptions::Compression_Auto))
+ if ((compress_method == PDFOptions::Compression_JPEG) || (compress_method == PDFOptions::Compression_Auto))
{
if (realCMYK || !((Options.UseRGB) || (Options.UseProfiles2)))
{
@@ -8975,7 +8978,7 @@
exportToCMYK = !Options.UseRGB;
}
cm = PDFOptions::Compression_JPEG;
- /*if (Options.CompressMethod == PDFOptions::Compression_Auto)
+ /*if (compress_method == PDFOptions::Compression_Auto)
{
QFileInfo fi(tmpFile);
if (fi.size() < im.size())
@@ -9011,7 +9014,12 @@
if ((hasGrayProfile) && (doc.HasCMS) && (Options.UseProfiles2) && (!hasColorEffect))
exportToGrayscale = true;
if (cm == PDFOptions::Compression_JPEG)
- bytesWritten = WriteJPEGImageToStream(img, fn, imageObj, exportToCMYK, exportToGrayscale, jpegUseOriginal, (!hasColorEffect && hasGrayProfile));
+ {
+ int quality = c->OverrideCompressionQuality ? c->CompressionQualityIndex : Options.Quality;
+ if (c->OverrideCompressionQuality)
+ jpegUseOriginal = false;
+ bytesWritten = WriteJPEGImageToStream(img, fn, imageObj, quality, exportToCMYK, exportToGrayscale, jpegUseOriginal, (!hasColorEffect && hasGrayProfile));
+ }
else if (cm == PDFOptions::Compression_ZIP)
bytesWritten = WriteFlateImageToStream(img, imageObj, exportToCMYK, exportToGrayscale, (!hasColorEffect && hasGrayProfile));
else
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/pdflib_core.h scribus-trunk/scribus/pdflib_core.h
--- scribus-trunk-orig/scribus/pdflib_core.h 2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/pdflib_core.h 2009-12-20 14:31:07.000000000 +0100
@@ -105,7 +105,7 @@
bool EncodeArrayToStream(const QByteArray& in, int ObjNum);
int WriteImageToStream(ScImage& image, int ObjNum, bool cmyk, bool gray, bool precal);
- int WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, bool cmyk, bool gray, bool sameFile, bool precal);
+ int WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, int quality, bool cmyk, bool gray, bool sameFile, bool precal);
int WriteFlateImageToStream(ScImage& image, int ObjNum, bool cmyk, bool gray, bool precal);
void CalcOwnerKey(const QString & Owner, const QString & User);
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format.cpp scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
--- scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format.cpp 2009-12-20 14:27:36.000000000 +0100
+++ scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format.cpp 2009-12-20 14:31:07.000000000 +0100
@@ -2348,6 +2348,10 @@
currItem->UseEmbedded = attrs.valueAsInt("EMBEDDED", 1);
currItem->pixm.imgInfo.lowResType = attrs.valueAsInt("ImageRes", 1);
currItem->pixm.imgInfo.actualPageNumber = attrs.valueAsInt("Pagenumber", 0);
+ if ((currItem->OverrideCompressionMethod = attrs.hasAttribute("COMPRESSIONMETHOD")))
+ currItem->CompressionMethodIndex = attrs.valueAsInt("COMPRESSIONMETHOD");
+ if ((currItem->OverrideCompressionQuality = attrs.hasAttribute("COMPRESSIONQUALITY")))
+ currItem->CompressionQualityIndex = attrs.valueAsInt("COMPRESSIONQUALITY");
if (currItem->asLatexFrame())
{
currItem->setImageXYOffset(attrs.valueAsDouble("LOCALX") * scx, attrs.valueAsDouble("LOCALY") * scy);
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp
--- scribus-trunk-orig/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp 2009-12-20 02:34:29.000000000 +0100
+++ scribus-trunk/scribus/plugins/fileloader/scribus150format/scribus150format_save.cpp 2009-12-20 14:31:07.000000000 +0100
@@ -1662,6 +1662,13 @@
docu.writeAttribute("EPROF", item->EmProfile);
docu.writeAttribute("IRENDER",item->IRender);
docu.writeAttribute("EMBEDDED", item->UseEmbedded ? 1 : 0);
+ if (item->asImageFrame())
+ {
+ if (item->OverrideCompressionMethod)
+ docu.writeAttribute("COMPRESSIONMETHOD", item->CompressionMethodIndex);
+ if (item->OverrideCompressionQuality)
+ docu.writeAttribute("COMPRESSIONQUALITY", item->CompressionQualityIndex);
+ }
docu.writeAttribute("LOCK", item->locked() ? 1 : 0);
docu.writeAttribute("LOCKR", item->sizeLocked() ? 1 : 0);
docu.writeAttribute("REVERS", item->reversed() ? 1 : 0);
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/scribusdoc.cpp scribus-trunk/scribus/scribusdoc.cpp
--- scribus-trunk-orig/scribus/scribusdoc.cpp 2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/scribusdoc.cpp 2009-12-20 14:31:07.000000000 +0100
@@ -11449,6 +11449,48 @@
changed();
}
+void ScribusDoc::itemSelection_SetCompressionMethod(int cmIndex, Selection * customSelection)
+{
+ Selection* itemSelection = (customSelection!=0) ? customSelection : m_Selection;
+ assert(itemSelection!=0);
+ uint selectedItemCount=itemSelection->count();
+ if (selectedItemCount == 0)
+ return;
+ //TODO Add Undo
+ for (uint i = 0; i < selectedItemCount; ++i)
+ {
+ PageItem *currItem = itemSelection->itemAt(i);
+ if (currItem && currItem->itemType() == PageItem::ImageFrame)
+ {
+ if ((currItem->OverrideCompressionMethod = cmIndex >= 0))
+ {
+ currItem->CompressionMethodIndex = cmIndex;
+ }
+ }
+ }
+}
+
+void ScribusDoc::itemSelection_SetCompressionQuality(int cqIndex, Selection * customSelection)
+{
+ Selection* itemSelection = (customSelection!=0) ? customSelection : m_Selection;
+ assert(itemSelection!=0);
+ uint selectedItemCount=itemSelection->count();
+ if (selectedItemCount == 0)
+ return;
+ //TODO Add Undo
+ for (uint i = 0; i < selectedItemCount; ++i)
+ {
+ PageItem *currItem = itemSelection->itemAt(i);
+ if (currItem && currItem->itemType() == PageItem::ImageFrame)
+ {
+ if ((currItem->OverrideCompressionQuality = cqIndex >= 0))
+ {
+ currItem->CompressionQualityIndex = cqIndex;
+ }
+ }
+ }
+}
+
QMap<PageItem*, QString> ScribusDoc::getDocItemNames(PageItem::ItemType itemType)
{
QMap<PageItem*, QString> namesMap;
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/scribusdoc.h scribus-trunk/scribus/scribusdoc.h
--- scribus-trunk-orig/scribus/scribusdoc.h 2009-12-20 02:34:27.000000000 +0100
+++ scribus-trunk/scribus/scribusdoc.h 2009-12-20 14:31:07.000000000 +0100
@@ -843,6 +843,8 @@
void itemSelection_resetOpticalMargins(Selection* customSelection=0);
void itemSelection_SetColorProfile(const QString& profileName, Selection* customSelection=0);
void itemSelection_SetRenderIntent(int intentIndex, Selection* customSelection=0);
+ void itemSelection_SetCompressionMethod(int cmIndex, Selection* customSelection=0);
+ void itemSelection_SetCompressionQuality(int cqIndex, Selection* customSelection=0);
// void chAbStyle(PageItem *currItem, int s);
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/ui/propertiespalette.cpp scribus-trunk/scribus/ui/propertiespalette.cpp
--- scribus-trunk-orig/scribus/ui/propertiespalette.cpp 2009-12-20 02:34:24.000000000 +0100
+++ scribus-trunk/scribus/ui/propertiespalette.cpp 2009-12-20 14:31:07.000000000 +0100
@@ -1381,6 +1381,23 @@
GroupBoxCMLayout->addWidget(MonitorI);
pageLayout_4->addWidget(GroupBoxCM);
+ GroupBoxCompression = new QFrame( page_4 );
+ GroupBoxCompression->setFrameShape( QFrame::NoFrame );
+ GroupBoxCompression->setFrameShadow( QFrame::Plain );
+ GroupBoxCompressionLayout = new QVBoxLayout( GroupBoxCompression );
+ GroupBoxCompressionLayout->setSpacing( 2 );
+ GroupBoxCompressionLayout->setMargin( 5 );
+ GroupBoxCompressionLayout->setAlignment( Qt::AlignTop );
+ TextCompressionMethod = new QLabel( GroupBoxCompression );
+ GroupBoxCompressionLayout->addWidget( TextCompressionMethod );
+ CompressionMethod = new ScComboBox( GroupBoxCompression );
+ GroupBoxCompressionLayout->addWidget(CompressionMethod);
+ TextCompressionQuality = new QLabel( GroupBoxCompression );
+ GroupBoxCompressionLayout->addWidget( TextCompressionQuality );
+ CompressionQuality = new ScComboBox( GroupBoxCompression );
+ GroupBoxCompressionLayout->addWidget( CompressionQuality );
+ pageLayout_4->addWidget( GroupBoxCompression );
+
QSpacerItem* spacer9 = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding );
pageLayout_4->addItem( spacer9 );
idImageItem=TabStack->addItem( page_4, "&Image" );
@@ -1578,6 +1595,8 @@
connect(LineW, SIGNAL(valueChanged(double)), this, SLOT(handlePathOffs()));
connect(InputP, SIGNAL(activated(const QString&)), this, SLOT(ChangeProfile(const QString&)));
connect(MonitorI, SIGNAL(activated(int)), this, SLOT(ChangeIntent()));
+ connect(CompressionMethod, SIGNAL(activated(int)), this, SLOT(ChangeCompressionMethod()));
+ connect(CompressionQuality, SIGNAL(activated(int)), this, SLOT(ChangeCompressionQuality()));
connect(NameEdit, SIGNAL(Leaved()), this, SLOT(NewName()));
// connect(langCombo, SIGNAL(activated(int)), this, SLOT(NewLanguage()));
connect( TabsButton, SIGNAL( clicked() ), this, SLOT( ManageTabs() ) );
@@ -2165,6 +2184,8 @@
imagePageNumber->setMaximum(CurItem->pixm.imgInfo.numberOfPages);
imagePageNumber->setValue(CurItem->pixm.imgInfo.actualPageNumber);
connect(imagePageNumber, SIGNAL(valueChanged(int)), this, SLOT(NewPage()));
+ CompressionMethod->setCurrentIndex(CurItem->OverrideCompressionMethod ? CurItem->CompressionMethodIndex + 1 : 0);
+ CompressionQuality->setCurrentIndex(CurItem->OverrideCompressionQuality ? CurItem->CompressionQualityIndex + 1 : 0);
}
Revert->setChecked(CurItem->reversed());
setTextFlowMode(CurItem->textFlowMode());
@@ -4951,6 +4972,20 @@
doc->itemSelection_SetRenderIntent(MonitorI->currentIndex());
}
+void PropertiesPalette::ChangeCompressionMethod()
+{
+ if (!HaveDoc || !HaveItem || !m_ScMW || m_ScMW->ScriptRunning)
+ return;
+ doc->itemSelection_SetCompressionMethod(CompressionMethod->currentIndex() - 1);
+}
+
+void PropertiesPalette::ChangeCompressionQuality()
+{
+ if (!HaveDoc || !HaveItem || !m_ScMW || m_ScMW->ScriptRunning)
+ return;
+ doc->itemSelection_SetCompressionQuality(CompressionQuality->currentIndex() - 1);
+}
+
void PropertiesPalette::ShowCMS()
{
if (!m_ScMW || m_ScMW->ScriptRunning)
@@ -5429,6 +5464,8 @@
EditPSDProps->setText( tr("Extended Image Properties"));
TextCms1->setText( tr("Input Profile:"));
TextCms2->setText( tr("Rendering Intent:"));
+ TextCompressionMethod->setText( tr("PDF Compression Method:"));
+ TextCompressionQuality->setText( tr("PDF Compression Quality:"));
// QList<QAction*> actList = lineSpacingPop->actions();
// actList[0]->setText( tr("Fixed Linespacing"));
// actList[1]->setText( tr("Automatic Linespacing"));
@@ -5446,6 +5483,23 @@
MonitorI->addItem( tr("Saturation"));
MonitorI->addItem( tr("Absolute Colorimetric"));
MonitorI->setCurrentIndex(oldMonitorI);
+ int oldCompressionMethod=CompressionMethod->currentIndex();
+ CompressionMethod->clear();
+ CompressionMethod->addItem( tr( "Global" ) );
+ CompressionMethod->addItem( tr( "Automatic" ) );
+ CompressionMethod->addItem( tr( "Lossy - JPEG" ) );
+ CompressionMethod->addItem( tr( "Lossless - Zip" ) );
+ CompressionMethod->addItem( tr( "None" ) );
+ CompressionMethod->setCurrentIndex(oldCompressionMethod);
+ int oldCompressionQuality=CompressionQuality->currentIndex();
+ CompressionQuality->clear();
+ CompressionQuality->addItem( tr( "Global" ) );
+ CompressionQuality->addItem( tr( "Maximum" ) );
+ CompressionQuality->addItem( tr( "High" ) );
+ CompressionQuality->addItem( tr( "Medium" ) );
+ CompressionQuality->addItem( tr( "Low" ) );
+ CompressionQuality->addItem( tr( "Minimum" ) );
+ CompressionQuality->setCurrentIndex(oldCompressionQuality);
int oldLineStyle = LStyle->currentIndex();
LStyle->clear();
LStyle->updateList();
@@ -5732,6 +5786,8 @@
Aspect->setToolTip( tr("Use image proportions rather than those of the frame"));
InputP->setToolTip( tr("Source profile of the image"));
MonitorI->setToolTip( tr("Rendering intent for the image"));
+ CompressionMethod->setToolTip( tr("Compression method used in PDF export for the image"));
+ CompressionQuality->setToolTip( tr("Compression quality used in PDF export for the image"));
}
diff -ruN --exclude='.*.swp' scribus-trunk-orig/scribus/ui/propertiespalette.h scribus-trunk/scribus/ui/propertiespalette.h
--- scribus-trunk-orig/scribus/ui/propertiespalette.h 2009-12-20 02:34:24.000000000 +0100
+++ scribus-trunk/scribus/ui/propertiespalette.h 2009-12-20 14:31:07.000000000 +0100
@@ -315,6 +315,8 @@
void handleOverprint(int);
void ChangeProfile(const QString& prn);
void ChangeIntent();
+ void ChangeCompressionMethod();
+ void ChangeCompressionQuality();
void NewName();
void NewLanguage();
void HandleTLines();
@@ -384,6 +386,7 @@
QVBoxLayout* DistanceLayout3;
QGridLayout* GroupBox3aLayout;
QVBoxLayout* GroupBoxCMLayout;
+ QVBoxLayout* GroupBoxCompressionLayout;
QVBoxLayout* textFlowOptionsLayout;
QVBoxLayout* textFlowOptionsLayout2;
QHBoxLayout* layout23;
@@ -450,6 +453,8 @@
QLabel* LineModeT;
QLabel* TextCms1;
QLabel* TextCms2;
+ QLabel* TextCompressionMethod;
+ QLabel* TextCompressionQuality;
QLabel* edgesLabel;
QLabel* ChBaseTxt;
QLabel* ScaleTxt;
@@ -511,6 +516,7 @@
QGroupBox* GeoGroup;
QGroupBox* LayerGroup;
QFrame* GroupBoxCM;
+ QFrame* GroupBoxCompression;
QGroupBox* TLines;
QGroupBox* GroupBox3a;
QGroupBox* TransGroup;
@@ -537,6 +543,8 @@
QComboBox* langCombo;
QComboBox* InputP;
QComboBox* MonitorI;
+ QComboBox* CompressionMethod;
+ QComboBox* CompressionQuality;
QComboBox* LineMode;
QComboBox* lineSpacingModeCombo;
ColorCombo* TxStroke;
|