View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0015455 | Scribus | Scripter | public | 2018-10-11 09:15 | 2019-06-04 20:56 |
| Reporter | Gibbz | Assigned To | jghali | ||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | closed | Resolution | fixed | ||
| Product Version | 1.5.4 | ||||
| Fixed in Version | 1.5.5.svn | ||||
| Summary | 0015455: Add transparency to image exporter in scripter | ||||
| Description | I have added a patch to support transparency setting in images. Also included a sample script which uses the new command img.transparency = True | ||||
| Tags | No tags attached. | ||||
| Attached Files | transparency.patch (4,607 bytes)
diff --git a/scribus/plugins/scriptplugin/objimageexport.cpp b/scribus/plugins/scriptplugin/objimageexport.cpp
index 0c1bad200..1dd0eedc0 100644
--- a/scribus/plugins/scriptplugin/objimageexport.cpp
+++ b/scribus/plugins/scriptplugin/objimageexport.cpp
@@ -26,6 +26,7 @@ typedef struct
int dpi; // DPI of the bitmap
int scale; // how is bitmap scaled 100 = 100%
int quality; // quality/compression <1; 100>
+ bool transparency;
} ImageExport;
static void ImageExport_dealloc(ImageExport* self)
@@ -50,6 +51,7 @@ static PyObject * ImageExport_new(PyTypeObject *type, PyObject * /*args*/, PyObj
self->dpi = 72;
self->scale = 100;
self->quality = 100;
+ self->transparency = false;
}
return (PyObject *) self;
}
@@ -63,6 +65,7 @@ static PyMemberDef ImageExport_members[] = {
{const_cast<char*>("dpi"), T_INT, offsetof(ImageExport, dpi), 0, imgexp_dpi__doc__},
{const_cast<char*>("scale"), T_INT, offsetof(ImageExport, scale), 0, imgexp_scale__doc__},
{const_cast<char*>("quality"), T_INT, offsetof(ImageExport, quality), 0, imgexp_quality__doc__},
+ {const_cast<char*>("transparency"), T_INT, offsetof(ImageExport, transparency), 0, imgexp_transparency__doc__},
{nullptr, 0, 0, 0, nullptr} // sentinel
};
@@ -89,6 +92,28 @@ static int ImageExport_setName(ImageExport *self, PyObject *value, void * /*clos
return 0;
}
+static bool ImageExport_getTransparency(ImageExport *self, void * /*closure*/)
+{
+ Py_INCREF(self->transparency);
+ return self->transparency;
+}
+
+static bool ImageExport_setTransparency(ImageExport *self, PyObject *value, void * /*closure*/)
+{
+ if (value == nullptr) {
+ PyErr_SetString(PyExc_TypeError, QObject::tr("Cannot delete image type settings.", "python error").toLocal8Bit().constData());
+ return -1;
+ }
+ if (!PyString_Check(value)) {
+ PyErr_SetString(PyExc_TypeError, QObject::tr("The image type must be a string.", "python error").toLocal8Bit().constData());
+ return -1;
+ }
+ Py_DECREF(self->transparency);
+ Py_INCREF(value);
+ self->transparency = value;
+ return 0;
+}
+
static PyObject *ImageExport_getType(ImageExport *self, void * /*closure*/)
{
Py_INCREF(self->type);
@@ -150,7 +175,10 @@ static PyObject *ImageExport_save(ImageExport *self)
* portrait and user defined sizes.
*/
double pixmapSize = (doc->pageHeight() > doc->pageWidth()) ? doc->pageHeight() : doc->pageWidth();
- QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), Pixmap_DrawBackground);
+ PageToPixmapFlag flags = Pixmap_DrawBackground;
+ if (self->transparency)
+ flags = Pixmap_NoFlags;
+ QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), flags);
int dpi = qRound(100.0 / 2.54 * self->dpi);
im.setDotsPerMeterY(dpi);
im.setDotsPerMeterX(dpi);
@@ -181,7 +209,10 @@ static PyObject *ImageExport_saveAs(ImageExport *self, PyObject *args)
* portrait and user defined sizes.
*/
double pixmapSize = (doc->pageHeight() > doc->pageWidth()) ? doc->pageHeight() : doc->pageWidth();
- QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), Pixmap_DrawBackground);
+ PageToPixmapFlag flags = Pixmap_DrawBackground;
+ if (self->transparency)
+ flags = Pixmap_NoFlags;
+ QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), flags);
int dpi = qRound(100.0 / 2.54 * self->dpi);
im.setDotsPerMeterY(dpi);
im.setDotsPerMeterX(dpi);
diff --git a/scribus/plugins/scriptplugin/objimageexport.h b/scribus/plugins/scriptplugin/objimageexport.h
index b05652000..aa99ee000 100644
--- a/scribus/plugins/scriptplugin/objimageexport.h
+++ b/scribus/plugins/scriptplugin/objimageexport.h
@@ -34,6 +34,7 @@ PyDoc_STRVAR(imgexp_quality__doc__, "Quality/compression: minimum 1 (poor), maxi
PyDoc_STRVAR(imgexp_filename__doc__, "Filename of the image. With or without path. Read/write string.");
PyDoc_STRVAR(imgexp_type__doc__, "Bitmap type. See allTypes list for more info. Read/write string.");
PyDoc_STRVAR(imgexp_alltypes__doc__, "Available types. Read only list of strings.");
+PyDoc_STRVAR(imgexp_transparency__doc__, "Enable or disable transparency.");
PyDoc_STRVAR(imgexp_save__doc__, "save() -> boolean\n\nSaves image under previously set 'name'.");
PyDoc_STRVAR(imgexp_saveas__doc__, "saveAs('filename') -> boolean\n\nSaves image as 'filename'.");
png_transparent.py (314 bytes)
import scribus
img = scribus.ImageExport()
document_name = scribus.getDocName()
img.name = document_name.replace(".sla",".png")
img.type = 'PNG'
img.scale = 100
img.quality = 20 # 1-100, 100 = high
img.dpi = 96
# need access to the "no-background" option here for transparency!
img.transparency = True
img.save()
| ||||
| Patch | Yes | ||||
|
|
the same patch, with tabs transparency-2.patch (4,511 bytes)
diff --git a/scribus/plugins/scriptplugin/objimageexport.cpp b/scribus/plugins/scriptplugin/objimageexport.cpp
index 0c1bad200..1dd0eedc0 100644
--- a/scribus/plugins/scriptplugin/objimageexport.cpp
+++ b/scribus/plugins/scriptplugin/objimageexport.cpp
@@ -26,6 +26,7 @@ typedef struct
int dpi; // DPI of the bitmap
int scale; // how is bitmap scaled 100 = 100%
int quality; // quality/compression <1; 100>
+ bool transparency;
} ImageExport;
static void ImageExport_dealloc(ImageExport* self)
@@ -50,6 +51,7 @@ static PyObject * ImageExport_new(PyTypeObject *type, PyObject * /*args*/, PyObj
self->dpi = 72;
self->scale = 100;
self->quality = 100;
+ self->transparency = false;
}
return (PyObject *) self;
}
@@ -63,6 +65,7 @@ static PyMemberDef ImageExport_members[] = {
{const_cast<char*>("dpi"), T_INT, offsetof(ImageExport, dpi), 0, imgexp_dpi__doc__},
{const_cast<char*>("scale"), T_INT, offsetof(ImageExport, scale), 0, imgexp_scale__doc__},
{const_cast<char*>("quality"), T_INT, offsetof(ImageExport, quality), 0, imgexp_quality__doc__},
+ {const_cast<char*>("transparency"), T_INT, offsetof(ImageExport, transparency), 0, imgexp_transparency__doc__},
{nullptr, 0, 0, 0, nullptr} // sentinel
};
@@ -89,6 +92,28 @@ static int ImageExport_setName(ImageExport *self, PyObject *value, void * /*clos
return 0;
}
+static bool ImageExport_getTransparency(ImageExport *self, void * /*closure*/)
+{
+ Py_INCREF(self->transparency);
+ return self->transparency;
+}
+
+static bool ImageExport_setTransparency(ImageExport *self, PyObject *value, void * /*closure*/)
+{
+ if (value == nullptr) {
+ PyErr_SetString(PyExc_TypeError, QObject::tr("Cannot delete image type settings.", "python error").toLocal8Bit().constData());
+ return -1;
+ }
+ if (!PyString_Check(value)) {
+ PyErr_SetString(PyExc_TypeError, QObject::tr("The image type must be a string.", "python error").toLocal8Bit().constData());
+ return -1;
+ }
+ Py_DECREF(self->transparency);
+ Py_INCREF(value);
+ self->transparency = value;
+ return 0;
+}
+
static PyObject *ImageExport_getType(ImageExport *self, void * /*closure*/)
{
Py_INCREF(self->type);
@@ -150,7 +175,10 @@ static PyObject *ImageExport_save(ImageExport *self)
* portrait and user defined sizes.
*/
double pixmapSize = (doc->pageHeight() > doc->pageWidth()) ? doc->pageHeight() : doc->pageWidth();
- QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), Pixmap_DrawBackground);
+ PageToPixmapFlag flags = Pixmap_DrawBackground;
+ if (self->transparency)
+ flags = Pixmap_NoFlags;
+ QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), flags);
int dpi = qRound(100.0 / 2.54 * self->dpi);
im.setDotsPerMeterY(dpi);
im.setDotsPerMeterX(dpi);
@@ -181,7 +209,10 @@ static PyObject *ImageExport_saveAs(ImageExport *self, PyObject *args)
* portrait and user defined sizes.
*/
double pixmapSize = (doc->pageHeight() > doc->pageWidth()) ? doc->pageHeight() : doc->pageWidth();
- QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), Pixmap_DrawBackground);
+ PageToPixmapFlag flags = Pixmap_DrawBackground;
+ if (self->transparency)
+ flags = Pixmap_NoFlags;
+ QImage im = view->PageToPixmap(doc->currentPage()->pageNr(), qRound(pixmapSize * self->scale * (self->dpi / 72.0) / 100.0), flags);
int dpi = qRound(100.0 / 2.54 * self->dpi);
im.setDotsPerMeterY(dpi);
im.setDotsPerMeterX(dpi);
diff --git a/scribus/plugins/scriptplugin/objimageexport.h b/scribus/plugins/scriptplugin/objimageexport.h
index b05652000..aa99ee000 100644
--- a/scribus/plugins/scriptplugin/objimageexport.h
+++ b/scribus/plugins/scriptplugin/objimageexport.h
@@ -34,6 +34,7 @@ PyDoc_STRVAR(imgexp_quality__doc__, "Quality/compression: minimum 1 (poor), maxi
PyDoc_STRVAR(imgexp_filename__doc__, "Filename of the image. With or without path. Read/write string.");
PyDoc_STRVAR(imgexp_type__doc__, "Bitmap type. See allTypes list for more info. Read/write string.");
PyDoc_STRVAR(imgexp_alltypes__doc__, "Available types. Read only list of strings.");
+PyDoc_STRVAR(imgexp_transparency__doc__, "Enable or disable transparency.");
PyDoc_STRVAR(imgexp_save__doc__, "save() -> boolean\n\nSaves image under previously set 'name'.");
PyDoc_STRVAR(imgexp_saveas__doc__, "saveAs('filename') -> boolean\n\nSaves image as 'filename'.");
|
|
|
It took some time but now it's applied! I've made a few modifications to the patch tho, removed a few unnecessary function and most noticeably renamed the new "transparency" attribute to a more explicit "transparentBkgnd". Thanks! |
|
|
Bkgnd? mmm j'achète trois vocales... |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2018-10-11 09:15 | Gibbz | New Issue | |
| 2018-10-11 09:15 | Gibbz | File Added: transparency.patch | |
| 2018-10-11 09:15 | Gibbz | File Added: png_transparent.py | |
| 2018-10-11 12:42 | ale | File Added: transparency-2.patch | |
| 2018-10-11 12:42 | ale | Note Added: 0045511 | |
| 2018-10-31 23:29 | jghali | Summary | [patch] Add transparency to image exporter in scripter => Add transparency to image exporter in scripter |
| 2018-10-31 23:36 | jghali | Assigned To | => jghali |
| 2018-10-31 23:36 | jghali | Status | new => resolved |
| 2018-10-31 23:36 | jghali | Resolution | open => fixed |
| 2018-10-31 23:36 | jghali | Fixed in Version | => 1.5.5.svn |
| 2018-10-31 23:36 | jghali | Note Added: 0045556 | |
| 2018-11-01 08:19 | ale | Note Added: 0045557 | |
| 2019-06-04 20:56 | cbradney | Status | resolved => closed |