Skip to content
This repository has been archived by the owner on Nov 1, 2020. It is now read-only.

Exif description #426

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,12 @@
'url' => '/preview/{fileId}',
'verb' => 'GET'
],
// exif of picture
[
'name' => 'files#exif',
'url' => '/files/exif/{fileId}',
'verb' => 'GET'
],
/**
* Public services
*/
Expand Down Expand Up @@ -125,6 +131,12 @@
'url' => '/preview.public/{fileId}',
'verb' => 'GET'
],
// exif of picture
[
'name' => 'files_public#exif',
'url' => '/files.public/exif/{fileId}',
'verb' => 'GET'
],
/**
* API
*/
Expand Down
7 changes: 6 additions & 1 deletion css/slideshow.css
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,14 @@
bottom: 18px;
z-index: 1099;
width: 100%;
height: 75px;
}

#slideshow > .name .title {
padding: 0 50px 3px;
position: absolute;
bottom: 0;
width: 100%;
padding: 0 1% 3px;
text-align: center;
color: #fff;
text-shadow: 1px 1px 4px #333, 1px -1px 4px #333, -1px 1px 4px #333, -1px -1px 4px #333;
Expand All @@ -146,6 +150,7 @@
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
filter: alpha(opacity=75);
opacity: .75;
}

Expand Down
2 changes: 1 addition & 1 deletion js/gallery.js
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@
return {
name: name,
path: image.path,
file: image.fileId,
fileId: image.fileId,
mimeType: image.mimeType,
permissions: image.permissions,
url: previewUrl,
Expand Down
36 changes: 36 additions & 0 deletions js/slideshow.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,42 @@

// check if we moved along while we were loading
if (currentImageId === index) {
if (this.images[index].mimeType === 'image/jpeg' || this.images[index].mimeType === 'image/tiff') {
// check if not in cache
if (this.images[index].desc===undefined) {
if (window.galleryFileAction) {
var url = window.galleryFileAction.buildGalleryUrl('files', '/exif/'+this.images[index].fileId,{});
} else {
var url = window.Gallery.utility.buildGalleryUrl('files', '/exif/'+this.images[index].fileId,{});
}
$.getJSON(url).then(function(data) {
var desc;
if (data) {
// IPTC:Description (Picasa, Photoshop, Lightroom)
if (data['iptc']&&data['iptc']['APP13']&&data['iptc']['APP13']['2#120']) {
desc=data['iptc']['APP13']['2#120'][0];
}
// EXIF:Description (old camera model)
if (!desc) {
if (data['exif']&&data['exif']['ImageDescription'])
desc=data['exif']['ImageDescription'];
}
if (desc) {
this.images[index].desc=desc;
this.controls.show(currentImageId);
this._initControlsAutoFader();
this.container.removeClass('inactive');
} else {
this.images[index].desc='';
}
}
}.bind(this));
} else if (this.images[index].desc) {
this.controls.show(currentImageId);
this._initControlsAutoFader();
this.container.removeClass('inactive');
}
}
var image = this.images[index];
var transparent = this._isTransparent(image.mimeType);
this.controls.showActionButtons(transparent, Gallery.token, image.permissions);
Expand Down
7 changes: 6 additions & 1 deletion js/slideshowcontrols.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,12 @@
if (this.playing) {
this._setTimeout();
}
this._setName(currentImage.name);
// check exif descr
if (currentImage.desc) {
this._setName(currentImage.desc);
} else {
this._setName(currentImage.name);
}
},

/**
Expand Down
27 changes: 27 additions & 0 deletions lib/Controller/Files.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,33 @@ trait Files {
/** @var ILogger */
private $logger;

/**
* @NoAdminRequired
*
* Returns a exif of picture
*
* @param string $location a path picture
* @return array
*/
public function exif($fileId) {
$file = $this->downloadService->getFile($fileId);
$path=$file->getInternalPath();
$storage=$file->getStorage();
$filename=$storage->getLocalFile($path);
$exif = false;
$iptc = false;
if (is_callable('exif_read_data')) {
$exif=@exif_read_data($filename);
}
getimagesize($filename,$blocks);
if (is_array($blocks)) {
foreach($blocks as $key => $block) {
$iptc[$key]=iptcparse($block);
}
}
return ['exif'=>$exif,'iptc'=>$iptc];
}

/**
* @NoAdminRequired
*
Expand Down
12 changes: 12 additions & 0 deletions lib/Controller/FilesPublicController.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@
*/
class FilesPublicController extends FilesController {

/**
* @PublicPage
*
* Returns a exif of picture
*
* @param string $location a path picture
* @return array
*/
public function exif($fileId) {
return parent::exif($fileId);
}

/**
* @PublicPage
*
Expand Down