master
Jean-Christian Paul Denis 2021-08-17 22:24:00 +02:00
parent 3cc6e0b8c3
commit 69f3aca75c
6 changed files with 479 additions and 479 deletions

View File

@ -1,4 +1,6 @@
entryPhotoExifWidget 1.0 - 2016-11-04 20210817. entryPhotoExifWidget 1.0.1
=========================================================== - Move to Franck style
* First release
* Find images of an entry and paste their exif on a widget 20161104. entryPhotoExifWidget 1.0
- First release
- Find images of an entry and paste their exif on a widget

View File

@ -20,3 +20,9 @@ First install entryPhotoExifWidget, manualy from a zip package or from
Dotaddict repository. (See Dotclear's documentation to know how do this) Dotaddict repository. (See Dotclear's documentation to know how do this)
Add and configure "Photo Exif Widget" from widgets manager. Add and configure "Photo Exif Widget" from widgets manager.
# MORE
* License : GNU GPL v2
* Source & contribution : [GitHub Page](https://github.com/JcDenis/entryPhotoExifWidget)
* Packages & details: [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/entryPhotoExifWidget)

View File

@ -12,9 +12,8 @@
# #
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')) if (!defined('DC_CONTEXT_ADMIN')) {
{
return null; return null;
} }
require_once dirname(__FILE__).'/_widgets.php'; require_once dirname(__FILE__) . '/_widgets.php';

View File

@ -12,22 +12,20 @@
# #
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) if (!defined('DC_RC_PATH')) {
{ return null;
return null;
} }
$this->registerModule( $this->registerModule(
/* Name */ "Entry Photo Exif Widget", 'Entry Photo Exif Widget', // Name
/* Description*/ "Show images exif of an entry", 'Show images exif of an entry', // Description
/* Author */ "Jean-Christian Denis and contibutors", 'Jean-Christian Denis and contibutors', // Author
/* Version */ '1.0', '1.0.1', // Version
/* Properties */ [
array( 'permissions' => 'admin',
'permissions' => 'admin', 'type' => 'plugin',
'type' => 'plugin', 'dc_min' => '2.10',
'dc_min' => '2.10', 'support' => 'http://forum.dotclear.org/',
'support' => 'http://forum.dotclear.org/', 'details' => 'https://plugins.dotaddict.org/dc2/details/entryPhotoExifWidget'
'details' => 'http://plugins.dotaddict.org/dc2/details/photoExifWidget' ]
)
); );

View File

@ -12,9 +12,8 @@
# #
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) if (!defined('DC_RC_PATH')) {
{ return null;
return null;
} }
require_once dirname(__FILE__).'/_widgets.php'; require_once dirname(__FILE__) . '/_widgets.php';

View File

@ -12,500 +12,496 @@
# #
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) if (!defined('DC_RC_PATH')) {
{ return null;
return null;
} }
$core->addBehavior( $core->addBehavior('initWidgets', ['entryPhotoExifWidget', 'setWidget']);
'initWidgets',
array('entryPhotoExifWidget','setWidget')
);
class entryPhotoExifWidget class entryPhotoExifWidget
{ {
public static $supported_post_type = array('post','page','gal','galitem'); public static $supported_post_type = array('post', 'page', 'gal', 'galitem');
public static $widget_content = '<ul>%s</ul>'; public static $widget_content = '<ul>%s</ul>';
public static $widget_text = '<li class="epew-%s"><strong>%s</strong> %s</li>'; public static $widget_text = '<li class="epew-%s"><strong>%s</strong> %s</li>';
public static $widget_thumb = '<li><img class="img-thumbnail" alt="%s" src="%s" /></li>'; public static $widget_thumb = '<li><img class="img-thumbnail" alt="%s" src="%s" /></li>';
public static function setWidget($w) public static function setWidget($w)
{ {
global $core; global $core;
$categories_combo = array('-' => '',__('Uncategorized') => 'null'); $categories_combo = array('-' => '', __('Uncategorized') => 'null');
$categories = $core->blog->getCategories(); $categories = $core->blog->getCategories();
while($categories->fetch()) while($categories->fetch())
{ {
$cat_title = html::escapeHTML($categories->cat_title); $cat_title = html::escapeHTML($categories->cat_title);
$categories_combo[$cat_title] = $categories->cat_id; $categories_combo[$cat_title] = $categories->cat_id;
} }
$thumbnail_combo = array( $thumbnail_combo = array(
__('None') => '', __('None') => '',
__('square') => 'sq', __('square') => 'sq',
__('thumbnail') => 't', __('thumbnail') => 't',
__('small') => 's', __('small') => 's',
__('medium') => 'm' __('medium') => 'm'
); );
$w->create( $w->create(
'epew', 'epew',
__('Entry Photo Exif'), __('Entry Photo Exif'),
array('entryPhotoExifWidget','getWidget'), array('entryPhotoExifWidget', 'getWidget'),
null, null,
__('Show images exif of an entry') __('Show images exif of an entry')
); );
$w->epew->setting( $w->epew->setting(
'title', 'title',
__('Title:'), __('Title:'),
__('Photos EXIF'), __('Photos EXIF'),
'text' 'text'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_Title', 'showmeta_Title',
sprintf(__('Show metadata: %s'),__('Title')), sprintf(__('Show metadata: %s'), __('Title')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_Description', 'showmeta_Description',
sprintf(__('Show metadata: %s'),__('Descritpion')), sprintf(__('Show metadata: %s'), __('Descritpion')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_Location', 'showmeta_Location',
sprintf(__('Show metadata: %s'),__('Location')), sprintf(__('Show metadata: %s'), __('Location')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_DateTimeOriginal', 'showmeta_DateTimeOriginal',
sprintf(__('Show metadata: %s'),__('Date')), sprintf(__('Show metadata: %s'), __('Date')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_Make', 'showmeta_Make',
sprintf(__('Show metadata: %s'),__('Manufacturer')), sprintf(__('Show metadata: %s'), __('Manufacturer')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_Model', 'showmeta_Model',
sprintf(__('Show metadata: %s'),__('Model')), sprintf(__('Show metadata: %s'), __('Model')),
1, 1,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_Lens', 'showmeta_Lens',
sprintf(__('Show metadata: %s'),__('Lens')), sprintf(__('Show metadata: %s'), __('Lens')),
1, 1,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_ExposureProgram', 'showmeta_ExposureProgram',
sprintf(__('Show metadata: %s'),__('Exposure program')), sprintf(__('Show metadata: %s'), __('Exposure program')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_Exposure', 'showmeta_Exposure',
sprintf(__('Show metadata: %s'),__('Exposure time')), sprintf(__('Show metadata: %s'), __('Exposure time')),
1, 1,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_FNumber', 'showmeta_FNumber',
sprintf(__('Show metadata: %s'),__('Aperture')), sprintf(__('Show metadata: %s'), __('Aperture')),
1, 1,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_ISOSpeedRatings', 'showmeta_ISOSpeedRatings',
sprintf(__('Show metadata: %s'),__('Iso speed rating')), sprintf(__('Show metadata: %s'), __('Iso speed rating')),
1, 1,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_FocalLength', 'showmeta_FocalLength',
sprintf(__('Show metadata: %s'),__('Focal lengh')), sprintf(__('Show metadata: %s'), __('Focal lengh')),
1, 1,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_ExposureBiasValue', 'showmeta_ExposureBiasValue',
sprintf(__('Show metadata: %s'),__('Exposure bias value')), sprintf(__('Show metadata: %s'), __('Exposure bias value')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta_MeteringMode', 'showmeta_MeteringMode',
sprintf(__('Show metadata: %s'),__('Metering mode')), sprintf(__('Show metadata: %s'), __('Metering mode')),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'showmeta', 'showmeta',
__('Show empty metadata'), __('Show empty metadata'),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'category', 'category',
__('Category limit:'), __('Category limit:'),
'', '',
'combo', 'combo',
$categories_combo $categories_combo
); );
$w->epew->setting( $w->epew->setting(
'thumbsize', 'thumbsize',
__('Thumbnail size:'), __('Thumbnail size:'),
't', 't',
'combo', 'combo',
$thumbnail_combo $thumbnail_combo
); );
$w->epew->setting( $w->epew->setting(
'content_only', 'content_only',
__('Content only'), __('Content only'),
0, 0,
'check' 'check'
); );
$w->epew->setting( $w->epew->setting(
'class', 'class',
__('CSS class:'), __('CSS class:'),
'' ''
); );
$w->epew->setting( $w->epew->setting(
'offline', 'offline',
__('Offline'), __('Offline'),
0, 0,
'check' 'check'
); );
} }
public static function getWidget($w) public static function getWidget($w)
{ {
global $core, $_ctx; global $core, $_ctx;
# Widget is offline # Widget is offline
if ($w->offline) if ($w->offline)
{ {
return null; return null;
} }
# Not in post context # Not in post context
if (!$_ctx->exists('posts') || !$_ctx->posts->post_id) if (!$_ctx->exists('posts') || !$_ctx->posts->post_id)
{ {
return null; return null;
} }
# Not supported post type # Not supported post type
if (!in_array($_ctx->posts->post_type,self::$supported_post_type)) if (!in_array($_ctx->posts->post_type, self::$supported_post_type))
{ {
return null; return null;
} }
# Category limit # Category limit
if ($w->category == 'null' && $_ctx->posts->cat_id !== null if ($w->category == 'null' && $_ctx->posts->cat_id !== null
|| $w->category != 'null' && $w->category != '' && $w->category != $_ctx->posts->cat_id) || $w->category != 'null' && $w->category != '' && $w->category != $_ctx->posts->cat_id)
{ {
return null; return null;
} }
# Content lookup # Content lookup
$text = $_ctx->posts->post_excerpt_xhtml.$_ctx->posts->post_content_xhtml; $text = $_ctx->posts->post_excerpt_xhtml . $_ctx->posts->post_content_xhtml;
# Find source images # Find source images
$images = self::getImageSource($core,$text,$w->thumbsize); $images = self::getImageSource($core, $text, $w->thumbsize);
# No images # No images
if (empty($images)) if (empty($images))
{ {
return null; return null;
} }
$contents = ''; $contents = '';
# Loop through images # Loop through images
foreach($images as $img) foreach($images as $img)
{ {
# List metas # List metas
$metas = self::getImageMeta($core,$img['source']); $metas = self::getImageMeta($core, $img['source']);
$content = ''; $content = '';
foreach($metas as $k => $v) foreach($metas as $k => $v)
{ {
# Don't show unwanted metadata or empty metadata # Don't show unwanted metadata or empty metadata
if (!$w->__get('showmeta_'.$k) || !$w->showmeta && empty($v[1])) if (!$w->__get('showmeta_' . $k) || !$w->showmeta && empty($v[1]))
{ {
continue; continue;
} }
$content .= sprintf(self::$widget_text,$k,$v[0],$v[1]); $content .= sprintf(self::$widget_text, $k, $v[0], $v[1]);
} }
# No meta # No meta
if (empty($content)) if (empty($content))
{ {
return null; return null;
} }
# Thumbnail # Thumbnail
if ($img['thumb']) if ($img['thumb'])
{ {
$content = sprintf(self::$widget_thumb,$img['title'],$img['thumb']). $content = sprintf(self::$widget_thumb, $img['title'], $img['thumb']).
$content; $content;
} }
$contents .= $content; $contents .= $content;
} }
# Nothing found # Nothing found
if (empty($contents)) if (empty($contents))
{ {
return null; return null;
} }
# Paste widget # Paste widget
return $w->renderDiv( return $w->renderDiv(
$w->content_only, $w->content_only,
'photoExifWidget '.$w->class, 'photoExifWidget ' . $w->class,
'', '',
($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : ''). ($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
sprintf(self::$widget_content,$contents) sprintf(self::$widget_content, $contents)
); );
} }
public static function getImageSource($core,$subject,$size='') public static function getImageSource($core, $subject, $size='')
{ {
# Path and url # Path and url
$p_url = $core->blog->settings->system->public_url; $p_url = $core->blog->settings->system->public_url;
$p_site = preg_replace('#^(.+?//.+?)/(.*)$#','$1',$core->blog->url); $p_site = preg_replace('#^(.+?//.+?)/(.*)$#', '$1', $core->blog->url);
$p_root = $core->blog->public_path; $p_root = $core->blog->public_path;
# Image pattern # Image pattern
$pattern = '(?:'.preg_quote($p_site,'/').')?'.preg_quote($p_url,'/'); $pattern = '(?:' . preg_quote($p_site,'/') . ')?' . preg_quote($p_url, '/');
$pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|jpeg|png|gif))"[^>]+/msu',$pattern); $pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|jpeg|png|gif))"[^>]+/msu', $pattern);
# No image # No image
if (!preg_match_all($pattern,$subject,$m)) if (!preg_match_all($pattern, $subject, $m))
{ {
return; return;
} }
$res = $duplicate = array(); $res = $duplicate = array();
$allowed_ext = array('.jpg','.JPG','.jpeg','.JPEG','.png','.PNG','.gif','.GIF'); $allowed_ext = array('.jpg', '.JPG', '.jpeg', '.JPEG', '.png', '.PNG', '.gif', '.GIF');
# Loop through images # Loop through images
foreach ($m[1] as $i => $img) foreach ($m[1] as $i => $img)
{ {
$src = $thb = $alt = false; $src = $thb = $alt = false;
$info = path::info($img); $info = path::info($img);
$base = $info['base']; $base = $info['base'];
$ext = $info['extension']; $ext = $info['extension'];
# Not original # Not original
if (preg_match('/^\.(.+)_(sq|t|s|m)$/',$base,$mbase)) if (preg_match('/^\.(.+)_(sq|t|s|m)$/', $base, $mbase))
{ {
$base = $mbase[1]; $base = $mbase[1];
} }
# Full path # Full path
$f = $p_root.'/'.$info['dirname'].'/'.$base; $f = $p_root . '/' . $info['dirname'] . '/' . $base;
# Find extension # Find extension
foreach($allowed_ext as $end) foreach($allowed_ext as $end)
{ {
if (file_exists($f.$end)) if (file_exists($f . $end))
{ {
$src = $f.$end; $src = $f . $end;
break; break;
} }
} }
# No file # No file
if (!$src || in_array($src,$duplicate)) if (!$src || in_array($src, $duplicate))
{ {
continue; continue;
} }
# Prevent double images # Prevent double images
$duplicate[] = $src; $duplicate[] = $src;
# Find thumbnail # Find thumbnail
if (!empty($size)) if (!empty($size))
{ {
$t = $p_root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.jpg'; $t = $p_root . '/' . $info['dirname'] . '/.' . $base . '_' . $size . '.jpg';
if (file_exists($t)) if (file_exists($t))
{ {
$thb = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/.'.$base.'_'.$size.'.jpg'; $thb = $p_url . (dirname($img) != '/' ? dirname($img) : '') . '/.' . $base . '_' . $size . '.jpg';
} }
} }
# Find image description # Find image description
if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) if (preg_match('/alt="([^"]+)"/', $m[0][$i], $malt))
{ {
$alt = $malt[1]; $alt = $malt[1];
} }
$res[] = array( $res[] = array(
'source' => $src, 'source' => $src,
'thumb' => $thb, 'thumb' => $thb,
'title' => $alt 'title' => $alt
); );
} }
return $res; return $res;
} }
public static function getImageMeta($core,$src) public static function getImageMeta($core, $src)
{ {
$metas = array( $metas = array(
'Title' => array(__('Title:'),''), 'Title' => array(__('Title:'), ''),
'Description' => array(__('Description:'),''), 'Description' => array(__('Description:'), ''),
'Location' => array(__('Location:'),''), 'Location' => array(__('Location:'), ''),
'DateTimeOriginal' => array(__('Date:'),''), 'DateTimeOriginal' => array(__('Date:'), ''),
'Make' => array(__('Manufacturer:'),''), 'Make' => array(__('Manufacturer:'), ''),
'Model' => array(__('Model:'),''), 'Model' => array(__('Model:'), ''),
'Lens' => array(__('Lens:'),''), 'Lens' => array(__('Lens:'), ''),
'ExposureProgram' => array(__('Program:'),''), 'ExposureProgram' => array(__('Program:'), ''),
'Exposure' => array(__('Speed:'),''), 'Exposure' => array(__('Speed:'), ''),
'FNumber' => array(__('Aperture:'),''), 'FNumber' => array(__('Aperture:'), ''),
'ISOSpeedRatings' => array(__('ISO:'),''), 'ISOSpeedRatings' => array(__('ISO:'), ''),
'FocalLength' => array(__('Focal:'),''), 'FocalLength' => array(__('Focal:'), ''),
'ExposureBiasValue' => array(__('Exposure Bias:'),''), 'ExposureBiasValue' => array(__('Exposure Bias:'), ''),
'MeteringMode' => array(__('Metering mode:'),'') 'MeteringMode' => array(__('Metering mode:'), '')
); );
$exp_prog = array( $exp_prog = array(
0 => __('Not defined'), 0 => __('Not defined'),
1 => __('Manual'), 1 => __('Manual'),
2 => __('Normal program'), 2 => __('Normal program'),
3 => __('Aperture priority'), 3 => __('Aperture priority'),
4 => __('Shutter priority'), 4 => __('Shutter priority'),
5 => __('Creative program'), 5 => __('Creative program'),
6 => __('Action program'), 6 => __('Action program'),
7 => __('Portait mode'), 7 => __('Portait mode'),
8 => __('Landscape mode') 8 => __('Landscape mode')
); );
$met_mod = array( $met_mod = array(
0 => __('Unknow'), 0 => __('Unknow'),
1 => __('Average'), 1 => __('Average'),
2 => __('Center-weighted average'), 2 => __('Center-weighted average'),
3 => __('Spot'), 3 => __('Spot'),
4 => __('Multi spot'), 4 => __('Multi spot'),
5 => __('Pattern'), 5 => __('Pattern'),
6 => __('Partial'), 6 => __('Partial'),
7 => __('Other') 7 => __('Other')
); );
if (!$src || !file_exists($src)) return $metas; if (!$src || !file_exists($src)) return $metas;
$m = imageMeta::readMeta($src); $m = imageMeta::readMeta($src);
# Title # Title
if (!empty($m['Title'])) if (!empty($m['Title']))
{ {
$metas['Title'][1] = html::escapeHTML($m['Title']); $metas['Title'][1] = html::escapeHTML($m['Title']);
} }
# Description # Description
if (!empty($m['Description'])) if (!empty($m['Description']))
{ {
if (!empty($m['Title']) && $m['Title'] != $m['Description']) if (!empty($m['Title']) && $m['Title'] != $m['Description'])
{ {
$metas['Description'][1] = html::escpeHTML($m['Description']); $metas['Description'][1] = html::escpeHTML($m['Description']);
} }
} }
# Location # Location
if (!empty($m['City'])) if (!empty($m['City']))
{ {
$metas['Location'][1] .= html::escapeHTML($m['City']); $metas['Location'][1] .= html::escapeHTML($m['City']);
} }
if (!empty($m['City']) && !empty($m['country'])) if (!empty($m['City']) && !empty($m['country']))
{ {
$metas['Location'][1] .= ', '; $metas['Location'][1] .= ', ';
} }
if (!empty($m['country'])) if (!empty($m['country']))
{ {
$metas['Location'][1] .= html::escapeHTML($m['Country']); $metas['Location'][1] .= html::escapeHTML($m['Country']);
} }
# DateTimeOriginal # DateTimeOriginal
if (!empty($m['DateTimeOriginal'])) if (!empty($m['DateTimeOriginal']))
{ {
$dt_ft = $core->blog->settings->system->date_format.', '.$core->blog->settings->system->time_format; $dt_ft = $core->blog->settings->system->date_format . ', ' . $core->blog->settings->system->time_format;
$dt_tz = $core->blog->settings->system->blog_timezone; $dt_tz = $core->blog->settings->system->blog_timezone;
$metas['DateTimeOriginal'][1] = dt::dt2str($dt_ft,$m['DateTimeOriginal'],$dt_tz); $metas['DateTimeOriginal'][1] = dt::dt2str($dt_ft, $m['DateTimeOriginal'], $dt_tz);
} }
# Make # Make
if (isset($m['Make'])) if (isset($m['Make']))
{ {
$metas['Make'][1] = html::escapeHTML($m['Make']); $metas['Make'][1] = html::escapeHTML($m['Make']);
} }
# Model # Model
if (isset($m['Model'])) if (isset($m['Model']))
{ {
$metas['Model'][1] = html::escapeHTML($m['Model']); $metas['Model'][1] = html::escapeHTML($m['Model']);
} }
# Lens # Lens
if (isset($m['Lens'])) if (isset($m['Lens']))
{ {
$metas['Lens'][1] = html::escapeHTML($m['Lens']); $metas['Lens'][1] = html::escapeHTML($m['Lens']);
} }
# ExposureProgram # ExposureProgram
if (isset($m['ExposureProgram'])) if (isset($m['ExposureProgram']))
{ {
$metas['ExposureProgram'][1] = isset($exp_prog[$m['ExposureProgram']]) ? $metas['ExposureProgram'][1] = isset($exp_prog[$m['ExposureProgram']]) ?
$exp_prog[$m['ExposureProgram']] : $m['ExposureProgram']; $exp_prog[$m['ExposureProgram']] : $m['ExposureProgram'];
} }
# Exposure # Exposure
if (!empty($m['Exposure'])) if (!empty($m['Exposure']))
{ {
$metas['Exposure'][1] = $m['Exposure'].'s'; $metas['Exposure'][1] = $m['Exposure'] . 's';
} }
# FNumber # FNumber
if (!empty($m['FNumber'])) if (!empty($m['FNumber']))
{ {
$ap = sscanf($m['FNumber'],'%d/%d'); $ap = sscanf($m['FNumber'], '%d/%d');
$metas['FNumber'][1] = $ap ? 'f/'.( $ap[0] / $ap[1]) : $m['FNumber']; $metas['FNumber'][1] = $ap ? 'f/' . ( $ap[0] / $ap[1]) : $m['FNumber'];
} }
# ISOSpeedRatings # ISOSpeedRatings
if (!empty($m['ISOSpeedRatings'])) if (!empty($m['ISOSpeedRatings']))
{ {
$metas['ISOSpeedRatings'][1] = $m['ISOSpeedRatings']; $metas['ISOSpeedRatings'][1] = $m['ISOSpeedRatings'];
} }
# FocalLength # FocalLength
if (!empty($m['FocalLength'])) if (!empty($m['FocalLength']))
{ {
$fl = sscanf($m['FocalLength'],'%d/%d'); $fl = sscanf($m['FocalLength'], '%d/%d');
$metas['FocalLength'][1] = $fl ? $fl[0]/$fl[1].'mm' : $m['FocalLength']; $metas['FocalLength'][1] = $fl ? $fl[0]/$fl[1] . 'mm' : $m['FocalLength'];
} }
# ExposureBiasValue # ExposureBiasValue
if (isset($m['ExposureBiasValue'])) if (isset($m['ExposureBiasValue']))
{ {
$metas['ExposureBiasValue'][1] = $m['ExposureBiasValue']; $metas['ExposureBiasValue'][1] = $m['ExposureBiasValue'];
} }
# MeteringMode # MeteringMode
if (isset($m['MeteringMode'])) if (isset($m['MeteringMode']))
{ {
$metas['MeteringMode'][1] = isset($met_mod[$m['MeteringMode']]) ? $metas['MeteringMode'][1] = isset($met_mod[$m['MeteringMode']]) ?
$exp_prog[$m['MeteringMode']] : $m['MeteringMode']; $exp_prog[$m['MeteringMode']] : $m['MeteringMode'];
} }
return $metas; return $metas;
} }
} }