PicApport Plug-in Guide
Allgemeines
Versionen
- Plug-ins wurden in Version 4.0.0 eingeführt. Alles was man benötigt ist picapport.jar oder picapport.exe mit Version 4.0 oder höher.
- Seit Version 6.2 kann das Zielverzeichnis der Stellvertreterdateien (Shadow-Files) eingestellt werden:
plugin.shadow.path (Pfad zu den Schattendateien/Substitutdateien(Shadow-Files) (*.$.jpg Dateien))
Wenn gesetzt, werden beim nächsten Serverstart vorhandene S.jpg Dateien dort hin verschoben und Neue direkt dort angelegt.
Beispiel: plugin.shadow.path=E\:\\picaport\\shadow
Verfügbare Plug-ins
Aktuell (Feb 2015) sind folgende Plug-ins verfügbar. Aktualisierte Infos siehe: http://picapport.de/plugins.php
Download Dateiname | Unterstützte Dateitypen | Anmerkungen | Wie wird installiert: | ||
PicApportDc RawPlugin.zip http://picapport.de/plugins.php Basierend auf Dave Coffin’s dcraw https://www.cybercom.net/~dcoffin/dcraw/ sowie Mozillas mozjpeg https://github.com/mozilla/mozjpeg unterstützt dieses Plug-in nahezu alle wichtigen RAW-Formate. Folgende Metadaten werden unterstützt: title (set to original filename) creation date Camera ISO speed Shutter Aperture Focal length | .3fr Hasselblad RAW .arw Sony RAW .cr2 Canon RAW .crw Canon RAW .dcr Kodak RAW .dng Adobe DNG .erf Epson RAW .kdc Kodak RAW .mef Mamiya RAW .mos Leaf Mosaic RAW .mrw Minolta RAW .nef Nikon RAW .nrw Nikon RAW .orf Olympus RAW .pef Pentax RAW .raf Fuji RAW .raw Panasonic RAW .rw2 Panasonic RAW .sr2 Sony RAW .srf Sony RAW .srw Samsung RAW .x3f Sigma RAW | Für Linux Anwender: Die Pakete für dcraw und cjpeg (libjpeg) müssen manuell installiert werden: Beispiel für Debian: apt-get install dcraw apt-get install libjpeg-progs Für OS X Anwender (1) Homebrew installieren: /usr/bin/ruby -e „$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)„ | |||
Es werden Command line tools von X-Code herunter geladen und installiert.Webseite für Homebrew: https://brew.sh (2) dcraw installieren brew install dcraw | Die OS X Doku wurde freundlicherweise von http://itmotions.de zur Verfügung gestellt. Als Option im Windows-Installer oder Zip-Datei des Plug-ins in das Plug-in-Verzeichnis kopieren PicApport neu starten | ||||
PicApportJavaImage Plugin-1.0.zip http://picapport.de/plugins.php Einfaches Plug-in basierend auf Java imageIO und TwelveMonkeys. Unterstützte Metadaten: title (enthält original Dateiname) | .bmp .gif .png .psd .tif .tiff | Aktuelle Version 1.1 Stand Dezember 2019 | Als Option im Windows-Installer oder Zip-Datei des Plug-ins in das Plug-in-Verzeichnis kopieren PicApport neu starten | ||
PicApportOpenCv VideoPluginWindows.zip PicApportOpenCv VideoPluginLinux.zip http://picapport.de/plugins.php Dieses Plugin gibt es zur Zeit nur in der Windows-Variante. (Linux-Variante in Planung) Das Plug-in basiert auf JavaCV ( https://github.com/bytedeco/javacv) welches wiederum OpenCV (http://opencv.org/) benutzt. Das Plug-in erzeugt eine Stellvertreter .jpg Datei anhand eines Frames aus dem Video. Unterstützte Metadaten: title (enthält original Dateiname) | .mp4, video/mp4 .ts, video/MP2T .3gp, video/3gpp .3g2, video/3gpp2 .flv, video/x-flv .ogv, video/ogg .avi, video/x-msvideo .webm, video/webm .mpg, video/mpeg .mpeg, video/mpeg .m2v, video/mpeg .wmv, video/x-ms-wmv .mov, video/quicktime .divx,video/divx .mkv, video/x-matroska | Dieses Plugin wurde im Oktober 2017 durch PicApportVideoThumbnailPlugin.zip ersetzt welchen nu auch unter Linux läuft. | Zip-Datei des Plug-ins abhängig vom Betriebssystem in das Plug-in-Verzeichnis kopieren PicApport neu starten | ||
PicApportPdfPlugin.zip http://picapport.de/plugins.php Basierend auf Apache’s PDFBox, zeigt dieses Plug-in die 1. Seite eines PDF-Dokumentes angereichert mit folgenden Metadaten: title (set to original filename) creation date creator / author title keywords (tags) description (subject) | Als Option im Windows-Installer oder Zip-Datei des Plug-ins in das Plug-in-Verzeichnis kopieren PicApport neu starten | ||||
PicApportVideoThumbnailPlugin.zip https://www.picapport.de/de/plugins.php Unterstützte Betriebssysteme: Linux (Debian, Raspberry, etc..) Windows Das Plug-in basiert auf JavaCV ( https://github.com/bytedeco/javacv) welches wiederum OpenCV (http://opencv.org/) benutzt. Das Plug-in erzeugt eine Stellvertreter .jpg Datei anhand eines Frames aus dem Video. Unterstützte Metadaten: title (enthält original Dateiname) | .mp4, video/mp4 .ts, video/MP2T .3gp, video/3gpp .3g2, video/3gpp2 .flv, video/x-flv .ogv, video/ogg .avi, video/x-msvideo .webm, video/webm .mpg, video/mpeg .mpeg, video/mpeg .m2v, video/mpeg .wmv, video/x-ms-wmv .mov, video/quicktime .divx,video/divx .mkv, video/x-matroska | Bitte stellen Sie unbedingt sicher das evtl. installierte alte Videoplugin PicApportOpenCvVideoPluginWindows zu löschen. Schritte um das evtl. installierte alte PicApportOpenCvVideoPluginWindows Plugin zu deinstallieren: Den PicApport Server stoppen Verzeichnis entfernen: .picapport/plugins/PicApportOpenCvVideoPluginWindows Zipdatei entfernen: .picapport/plugins/PicApportOpenCvVideoPluginWindows.zip Aktuelle Version 1.4.0 Stand Dezember 2019. Unterstützte Plattformen: linux/arm64 linux/armhf linux/ppc64le linux/x86_64 linux/x86 macOS/x86_64 Raspberry PI 4 windows/x86_64 windows/x86 | Windows-Installer benutzen oder Zip-Datei des Plug-ins in das Plug-in-Verzeichnis kopieren PicApport neu starten |
Installation (manuell ohne Installer)
Bevor ein Plug-in installiert wird, muss bekannt sein, wo das .picapport Verzeichnis des Servers liegt.
Während des Serverstarts wird das Plug-in Verzeichnis etwa wie folgt angezeigt:: MSG @ 14:56:03.268 Search for plugins in C:\Users\username\.picapport\plugins
Die gewünschten Plug-ins einfach in das .picapport/plugins Verzeichnis kopieren und den PicApport Server neu starten. Fertig.
Nachdem der Server neu gestartet wurde kann anhand der aktuellen Logdatei in .picapport/logfiles geprüft werden, ob die Plug-in Installation
erfolgreich war. Abhängig vom Plug-in Typ sollte die Logdatei etwa folgenden Text enthalten:
……..
MSG @ 14:53:18.045 Plugin loaded: PicApport GIF plugin 1.0 (c) 2014 Contecon Software GmbH .gif image/gif (hideSubstitutes=true) implements IOtherFileFormat
MSG @ 14:53:18.045 Plugin loaded: PicApport PNG plugin 1.0 (c) 2014 Contecon Software GmbH .png image/png (hideSubstitutes=true) implements IOtherFileFormat
MSG @ 14:53:18.047 Plugin loaded: PicApport PDF plugin 1.0 (c) 2015 Contecon Software GmbH .pdf application/pdf (hideSubstitutes=true) implements IOtherFileFormat
……
Rot zeigt die Dateierweiterung für die dieses Plug-in registriert ist und grün den mime-type der Originaldatei.
Wie es funktioniert
Dies ist eigentlich nur für Administratoren bzw. Programmierer interessant.
Start von PicApport
- Während des Starts wird das .picapport/plugins Verzeichnis nach .zip Dateien durchsucht.
- Für jede gefundene .zip Datei wird ein verstecktes Verzeichnis mit dem selben Namen erzeugt und der Inhalt
der .zip Datei hineinkopiert. Dieses Verzeichnis wird plugin-directory genannt. Dann wird für jede .jar Datei im plugin-directory die Manifest.mf Datei nach einem gültigen PicApport-Plugin: Eintrag untersucht
- Die init() Methode des Plug-ins wird gerufen (einmalig während des Starts)
Die folgenden Informationen werden an die Init() Methode übergeben::File pluginDirectory
Verzeichnis von wo das Plug-in geladen wurde. Diese Information kann vom Plug-in genutzt werden um z.B. weitere
Konfigurationsdaten zu speichern.
Ein Plug-in sollte nicht auf Daten außerhalb des Plugin-Directorys zugreifen.Properties props
Wenn eine .properties Datei mit dem selben Namen wie das Plug-in existiert, wird diese von PicApport geladen und an die init() Methode
des Plug-ins übergeben. Ein Plug-in Entwickler sollte sicherstellen, dass props an den Konstruktor der OtherFormatsDescriptor Instanzen
übergeben wird, die während init() erzeugt werden.
Das Plug-in kann die Properties nutzen um weitere Konfigurationsdaten zu speichern. Siehe auch PicApportPdfPlugin-src.zip wie dies verwendet werden kann.
Beispiel: PicApportPdfPlugin.properties:# if resolution is not set the default will be 96
pdf.resolution=96
menudownload.text=Show PDF
menudownload.text.en=Show PDF
menudownload.text.de=PDF anzeigen
keywords=$nonjpg
Der Eintrag menudownload.text[.iso language] kann verwendet werden um den Text des „Download-Buttons“ in der PicApport Slideshow anzupassen.
Ist kein Text für die aktuelle Sprache konfiguriert, wird der Eintrag (menudownload.text) benutzt. (Solle immer Englisch sein)IPicApportPlugInLogger logger
Der logger sollte in den privaten Memberdaten der Plug-in Instanz gesichert werden und für Debug Ausgaben verwendet werden.
Die init() Methode muss mindestens eine OtherFormatsDescriptor Instanz erzeugen und in List<OtherFormatsDescriptor> zurückgeben.
Descriptoren erzeugenreturn
Arrays.asList(
new
OtherFormatsDescriptor[] {
new
OtherFormatsDescriptor(
".gif"
,
// One of the file extensions this plugin will be called
"image/gif"
,
// Mime type of the original file
true
,
// If true, substitute files will be hidden
"PicApport GIF plugin"
,
// Name of the plug-in
"(c) 2014 Contecon Software GmbH"
,
// Copyright
"1.0"
,
// Version
props),
// always use props passed to the init() method
new
OtherFormatsDescriptor(
".png"
,
"image/png"
,
true
,
"PicApport PNG plugin"
,
"(c) 2014 Contecon Software GmbH"
,
"1.0"
,
props),
});
Während des Scannens der Foto Verzeichnisse
- Wenn PicApport ein Foto-Verzeichnis scannt, werden alle nicht Jpeg-Dateien geprüft ob dafür ein Plug-in registriert wurde.
- Wurde ein Plug-in registered:
- PicApport prüft ob eine Stellvertreter-Datei (substitute-file) existiert
Die Stellvertreter-Datei ist die jpg Repräsentation der Originaldatei. PicApport fügt .$.jpg an den Namen der Originaldatei an um den Stellvertreter Namen zu erzeugen.
Wenn die Stellvertreter-Datei nicht existiert oder älter ist als die Originaldatei wird die createJpegFile() Methode des Plug-ins gerufen um die Stellvertreter-Datei zu erzeugen.
Die folgenden Informationen werden an die createJpegFile() Methode übergeben:File otherFormatFile
Vollständiger Pfad der OriginaldateiFile jpegFileToCreate
Vollständiger Pfad der zu erzeugenden Stellvertreter-DateiCcXMPMetaData metaDataIn
Optionale Metadaten für die Stellvertreter-Datei. Sind keine Metadaten verfügbar sollte createJpegFile() null zurückgeben.
Sind Metadaten verfügbar, sollten diese in metaDataIn gesetzt werden und metaDataIn sollte anstatt null zurückgegeben werden.
Siehe auch: Javadoc http://picapport.de/plugins/javadoc/ für weitere Details von CcXMPMetaData .
- PicApport prüft ob eine Stellvertreter-Datei (substitute-file) existiert
Programmierung
Plug-ins werden in Java erstellt.
Es muss sichergestellt sein, dass ein picapport.jar mindestens mit Version 4.0.0 im classpath des Compilers eingetragen ist
Ein PicApport Plug-in zu erstellen ist sehr einfach. Einfach eine Java-Klasse erstellen die zwei Methoden implementiert:
public List<OtherFormatsDescriptor> init(File pluginDirectory, Properties props, IPicApportPlugInLogger logger)
public CcXMPMetaData createJpegFile(File otherFormatFile, File jpegFileToCreate, CcXMPMetaData metaDataIn)
Siehe auch: Javadoc http://picapport.de/plugins/javadoc/ für weitere Details.
Beispiel PicApport Plug-in for .gif and .png Unterstützung
package de.contecon.picapport.plugin.javaimage; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Properties; import javax.imageio.ImageIO; import de.contecon.imageutils.CcXMPMetaData; import de.contecon.picapport.plugins.IPicApportPlugInLogger; import de.contecon.picapport.plugins.otherformats.IOtherFileFormat; import de.contecon.picapport.plugins.otherformats.OtherFormatsDescriptor; /** * This is a simple example of a PicApport plugin. * To compile this at least a picapport.jar version 3.3 or newer is required. * This Plugin supports .gif and .png files. * * PicApport plugins for other fileformats must implement de.contecon.picapport.plugins.otherformats.IOtherFileFormat * * Please have in mind that a valid PicApport plugin .jar files MUST have a Manifest.mf file * with a PicApport-Plugin: entry. * * Example Manifest.mf: * <pre> * Manifest-Version: 1.0 * Sealed: true * PicApport-Plugin: de.contecon.picapport.plugin.javaimage.JavaImagePlugin * <pre> * 10.02.2015 * @author Eric */ public class JavaImagePlugin implements IOtherFileFormat { private IPicApportPlugInLogger logger; @Override public List<OtherFormatsDescriptor> init(File pluginDirectory, Properties props, IPicApportPlugInLogger logger) { this .logger = logger; return Arrays.asList( new OtherFormatsDescriptor[] { new OtherFormatsDescriptor( ".gif" , "image/gif" , true , "PicApport GIF plugin" , "(c) 2014 Contecon Software GmbH" , "1.0" , props), new OtherFormatsDescriptor( ".png" , "image/png" , true , "PicApport PNG plugin" , "(c) 2014 Contecon Software GmbH" , "1.0" , props), }); } @Override public CcXMPMetaData createJpegFile(File otherFormatFile, File jpegFileToCreate, CcXMPMetaData metaDataIn) throws Exception { BufferedImage bi = ImageIO.read(otherFormatFile); BufferedImage bufferedImageJpg = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bufferedImageJpg.createGraphics(); g2.drawImage(bi, 0 , 0 , bufferedImageJpg.getWidth(), bufferedImageJpg.getHeight(), Color.WHITE, null ); javax.imageio.ImageIO.write(bufferedImageJpg, "jpeg" , jpegFileToCreate); g2.dispose(); Calendar dateCreated = Calendar.getInstance(); dateCreated.setTime( new Date(otherFormatFile.lastModified())); metaDataIn.setCreationDate(dateCreated); metaDataIn.setTitle(otherFormatFile.getName()); metaDataIn.setDescription( "PicApport JavaImagePlugin" ); return (metaDataIn); } } |
Die Manifest Datei
Ein PicApport Plug-in wird durch eine .jar Datei repräsentiert. Diese .jar Datei MUSS eine Manifest.mf Datei enthalten mit einem PicApport-Plugin: Eintrag in welchem die Klasse deklariert wird, welche de.contecon.picapport.plugins.otherformats.IOtherFileFormat implementiert.
Manifest-Version: 1.0 Sealed: true PicApport-Plugin: de.contecon.picapport.plugin.javaimage.JavaImagePlugin |
Die Plug-in .zip Datei
Als letzter Schritt wird eine .zip Datei für das Plug-in erstellt. Der Dateiname sollte dem Klassennamen des Plug-ins entsprechen.
Die .zip Datei muss mindestens folgende Dateien beinhalten::
- Die .jar Datei des Plug-ins
- Die.properties Datei des Plug-ins
Optionaler Inhalt könnte sein::
- Weitere .jar Dateien die vom Plug-in benötigt werden
- Lizenz Informationen
- Weitere Dateien