View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0015956 | Scribus | Scripter | public | 2019-11-18 14:39 | 2019-11-28 17:08 |
| Reporter | ale | Assigned To | |||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | new | Resolution | open | ||
| Product Version | 1.5.6.svn | ||||
| Summary | 0015956: Letting the scripter access more / all EXIF fields of an image | ||||
| Description | Scribus does read the EXIF fields of images. But it only reads a few selected fields. This is ok for the "more info" command, but a user is asking filling the caption of an image with the content of "other" EXIF fields. | ||||
| Tags | No tags attached. | ||||
| Attached Files | |||||
| Patch | No | ||||
|
|
Now, that this would be easy to add if Scribus would read all EXIF field. Is there good reason why Scribus does not read the whole EXIF information? |
|
|
for my future self: - exif.cpp contains the code that reads the EXIF information. with an (out-commented) list of all possible EXIF fields - in order to find where the data is stored / read, one can start from "context menu > image > more info" - i attach the diff that adds the getimageexiffield() scripter command - i also attach an image that can be used to check the extended fields scripter-getexif.diff (4,353 bytes)
diff --git a/scribus/plugins/scriptplugin/cmdgetprop.cpp b/scribus/plugins/scriptplugin/cmdgetprop.cpp
index a2040f196..aa7483c92 100644
--- a/scribus/plugins/scriptplugin/cmdgetprop.cpp
+++ b/scribus/plugins/scriptplugin/cmdgetprop.cpp
@@ -255,6 +255,28 @@ PyObject *scribus_getimgscale(PyObject* /* self */, PyObject* args)
return Py_BuildValue("(ff)", item->imageXScale() / 72.0 * item->pixm.imgInfo.xres, item->imageYScale() / 72.0 * item->pixm.imgInfo.yres);
}
+PyObject *scribus_getimageexiffield(PyObject* /* self */, PyObject* args)
+{
+ char *Name = const_cast<char*>("");
+ char *Field;
+ if (!PyArg_ParseTuple(args, "es|es", &Field, "utf-8", &Name))
+ return nullptr;
+ if (!checkHaveDocument())
+ return nullptr;
+ PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
+ if (item == nullptr)
+ return nullptr;
+ if (item->itemType() != PageItem::ImageFrame)
+ return nullptr;
+
+ // ImageInfoDialog *dia = new ImageInfoDialog(this, &pageItem->pixm.imgInfo);
+ // timeInfo = new QLabel( info->exifInfo.dateTime, GenGroup);
+ ExifValues exif = item->pixm.imgInfo.exifInfo;
+
+ // return PyUnicode_FromString(item->Pfile.toUtf8());
+ return PyUnicode_FromString("abcd");
+}
+
PyObject *scribus_getimagefile(PyObject* /* self */, PyObject* args)
{
char *Name = const_cast<char*>("");
@@ -460,6 +482,7 @@ void cmdgetpropdocwarnings()
<< scribus_getlineshade__doc__ << scribus_getlinejoin__doc__
<< scribus_getlinecap__doc__ << scribus_getlinestyle__doc__
<< scribus_getfillshade__doc__ << scribus_getcornerrad__doc__
+ << scribus_getimageexiffield__doc__
<< scribus_getimgscale__doc__ << scribus_getimagefile__doc__
<< scribus_getposi__doc__ << scribus_getsize__doc__
<< scribus_getrotation__doc__ << scribus_getallobj__doc__
diff --git a/scribus/plugins/scriptplugin/cmdgetprop.h b/scribus/plugins/scriptplugin/cmdgetprop.h
index e2260a3d0..39d8f52e9 100644
--- a/scribus/plugins/scriptplugin/cmdgetprop.h
+++ b/scribus/plugins/scriptplugin/cmdgetprop.h
@@ -176,6 +176,16 @@ If \"name\" is not given the currently selected item is used.\n\
"));
PyObject *scribus_getimagecolorspace(PyObject * /*self*/, PyObject* args);
+/*! docstring */
+PyDoc_STRVAR(scribus_getimageexiffield__doc__,
+QT_TR_NOOP("getImageExifField(fiel, [\"name\"]) -> string\n\
+\n\
+Returns the exif field for the image in the image frame. If \"name\" is not\n\
+given the currently selected item is used.\n\
+"));
+/*! Returns image name of the object */
+PyObject *scribus_getimageexiffield(PyObject * /*self*/, PyObject* args);
+
/*! docstring */
PyDoc_STRVAR(scribus_getimagefile__doc__,
QT_TR_NOOP("getImageFile([\"name\"]) -> string\n\
diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp
index d76ccba7b..5a798934d 100644
--- a/scribus/plugins/scriptplugin/scriptplugin.cpp
+++ b/scribus/plugins/scriptplugin/scriptplugin.cpp
@@ -363,6 +363,7 @@ PyMethodDef scribus_methods[] = {
{const_cast<char*>("getHGuides"), (PyCFunction)scribus_getHguides, METH_NOARGS, tr(scribus_getHguides__doc__)},
{const_cast<char*>("getImageColorSpace"), scribus_getimagecolorspace, METH_VARARGS, tr(scribus_getimagecolorspace__doc__) },
{const_cast<char*>("getImageFile"), scribus_getimagefile, METH_VARARGS, tr(scribus_getimagefile__doc__)},
+ {const_cast<char*>("getImageExifField"), scribus_getimageexiffield, METH_VARARGS, tr(scribus_getimageexiffield__doc__)},
{const_cast<char*>("getImageOffset"), scribus_getimgoffset, METH_VARARGS, tr(scribus_getimgoffset__doc__)},
{const_cast<char*>("getImageScale"), scribus_getimgscale, METH_VARARGS, tr(scribus_getimgscale__doc__)},
{const_cast<char*>("getLayers"), (PyCFunction)scribus_getlayers, METH_NOARGS, tr(scribus_getlayers__doc__)},
@@ -980,5 +981,5 @@ PV */
void scriptplugindocwarnings()
{
QStringList s;
- s <<printer__doc__<<pdffile__doc__<<imgexp__doc__<<imgexp_dpi__doc__<<imgexp_scale__doc__ <<imgexp_quality__doc__<<imgexp_filename__doc__<<imgexp_type__doc__<<imgexp_alltypes__doc__ << imgexp_save__doc__ << imgexp_saveas__doc__;
+ s <<printer__doc__<<pdffile__doc__<<imgexp__doc__<<imgexp_dpi__doc__<<imgexp_scale__doc__ << imgexp_transparentBkgnd__doc__ <<imgexp_quality__doc__<<imgexp_filename__doc__<<imgexp_type__doc__<<imgexp_alltypes__doc__ << imgexp_save__doc__ << imgexp_saveas__doc__;
}
|
|
|
Patch applied in r23378 |
|
|
@cbradney, have you noticed that the new scripter function currently only returns dummy data? |
|
|
yep, the patch was just for me so that i did not lose the previous work... i shortly talked with jean about this and it's not clear why only part of the info is read... probably because it's that part that scribus uses. adding a "real" libexif would add a bigger dependency (at least for windows and macos), so i can have a look at exif.cpp and see if i can use it to return the other fields too... |
|
|
i will propose a "new" ExifData class. for the review, here are the main changes: - rename "ConvertAnyFormat" to "anyAsDouble - fixed most spacing around the parenthesis - use a QMap<QVariant> instead of the long list of specific fields - introduce a getField(QString name) for the scripter (it can also be used by imagedataloaders/scimgdataloader_jpeg.cpp (so that we can remove the many specific functions) - use floats instead of doubles to be checked: - is a QMap<QVariant> fast enough? tbc |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2019-11-18 14:39 | ale | New Issue | |
| 2019-11-18 14:40 | ale | Note Added: 0047101 | |
| 2019-11-18 14:46 | ale | File Added: scripter-getexif.diff | |
| 2019-11-18 14:46 | ale | File Added: hiker-playmobil.jpg | |
| 2019-11-18 14:46 | ale | Note Added: 0047102 | |
| 2019-11-25 21:15 | cbradney | Note Added: 0047137 | |
| 2019-11-26 01:13 | jghali | Note Added: 0047139 | |
| 2019-11-26 13:07 | ale | Note Added: 0047142 | |
| 2019-11-28 13:59 | ale | Note Added: 0047158 | |
| 2019-11-28 17:08 | ale | Note Edited: 0047158 |