diff --git a/convert.php b/convert.php
index 45d77a1..84e445a 100644
--- a/convert.php
+++ b/convert.php
@@ -1,5 +1,4 @@
register('run')
- ->setDefinition(
- [
- new InputOption('export', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Target image export sizes'),
- new InputOption('layout', null, InputOption::VALUE_REQUIRED, 'Rendering layout for individual photos', 'gallery-photo'),
- new InputArgument('name', null, InputArgument::REQUIRED, 'Gallery name'),
- new InputArgument('assetdir', InputArgument::OPTIONAL, 'Asset directory for exported images', 'asset/gallery'),
- new InputArgument('mdowndir', InputArgument::OPTIONAL, 'Markdown directory for dumping individual photo details', 'gallery'),
- ]
- )
+ ->setDefinition([
+ new InputOption('export', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Target image export sizes'),
+ new InputOption('layout', null, InputOption::VALUE_REQUIRED, 'Rendering layout for individual photos', 'gallery-photo'),
+ new InputArgument('name', null, InputArgument::REQUIRED, 'Gallery name'),
+ new InputArgument('assetdir', InputArgument::OPTIONAL, 'Asset directory for exported images', 'asset/gallery'),
+ new InputArgument('mdowndir', InputArgument::OPTIONAL, 'Markdown directory for dumping individual photo details', 'gallery'),
+ ])
->setDescription('Parse a YAML-like gallery configuration and export it.')
->setHelp('
-The export option will accept values like:
- 200x110 - photo will outset the boundary with the dimensions being 200x110
- 1280 - photo will inset with the largest dimension being 1280
-')
+ The export option will accept values like:
+ 200x110 - photo will outset the boundary with the dimensions being 200x110
+ 1280 - photo will inset with the largest dimension being 1280
+ ')
->setCode(
- function (InputInterface $input, OutputInterface $output) {
- $gallery = $input->getArgument('name');
- $assetPath = $input->getArgument('assetdir') . '/' . $gallery;
- $renderPath = $input->getArgument('mdowndir') . '/' . $gallery;
- $layout = $input->getOption('layout');
- $exports = $input->getOption('export');
+ function (InputInterface $oInput, OutputInterface $oOutput) {
+ $sGallery = $oInput->getArgument('name');
+ $sAssetPath = $oInput->getArgument('assetdir') . '/' . $sGallery;
+ $sRenderPath = $oInput->getArgument('mdowndir') . '/' . $sGallery;
+ $sLayout = $oInput->getOption('layout');
+ $sExports = $oInput->getOption('export');
- $stdin = stream_get_contents(STDIN);
+ $sStdin = stream_get_contents(STDIN);
- $imagine = new Imagine\Gd\Imagine();
+ $oImagine = new Imagine\Gd\Imagine();
- if (!is_dir($assetPath)) {
- mkdir($assetPath, 0700, true);
+ if (!is_dir($sAssetPath)) {
+ mkdir($sAssetPath, 0700, true);
}
- if (!is_dir($renderPath)) {
- mkdir($renderPath, 0700, true);
+ if (!is_dir($sRenderPath)) {
+ mkdir($sRenderPath, 0700, true);
}
- $stdinPhotos = explode('------------', trim($stdin));
- $photos = [];
+ $sStdinPhotos = explode('------------', trim($sStdin));
+ $aPhotos = [];
// load data
+ foreach ($sStdinPhotos as $i => $aPhotoRaw) {
+ $aPhotoSplit = explode('------', trim($aPhotoRaw), 2);
- foreach ($stdinPhotos as $i => $photoRaw) {
- $photoSplit = explode('------', trim($photoRaw), 2);
-
- if (empty($photoSplit[0])) {
+ if (empty($aPhotoSplit[0])) {
continue;
}
- $photo = array_merge(
- [
- 'ordering' => $i,
- 'comment' => isset($photoSplit[1]) ? $photoSplit[1] : null,
- ],
- Yaml::parse($photoSplit[0])
- );
+ $aPhoto = array_merge([
+ 'ordering' => $i,
+ 'comment' => isset($aPhotoSplit[1]) ? $aPhotoSplit[1] : null,
+ ], Yaml::parse($aPhotoSplit[0]));
- $photo['id'] = substr(sha1_file($photo['path']), 0, 7) . '-' . preg_replace('/(-| )+/', '-', preg_replace('/[^a-z0-9 ]/i', '-', preg_replace('/\'/', '', strtolower(preg_replace('/\p{Mn}/u', '', Normalizer::normalize($photo['title'], Normalizer::FORM_KD))))));
-
- $photo['date'] = \DateTime::createFromFormat(
+ $aPhoto['id'] = substr(sha1_file($aPhoto['path']), 0, 7) . '-' . preg_replace('/(-| )+/', '-', preg_replace('/[^a-z0-9 ]/i', '-', preg_replace('/\'/', '', strtolower(preg_replace('/\p{Mn}/u', '', Normalizer::normalize($aPhoto['title'], Normalizer::FORM_KD))))));
+ $aPhoto['date'] = \DateTime::createFromFormat(
'l, F j, Y \a\t g:i:s A',
- $photo['date']
+ $aPhoto['date']
);
- $photo['exif'] = exif_read_data($photo['path']);
-
- $photos[] = $photo;
+ $aPhoto['exif'] = exif_read_data($aPhoto['path']);
+ $aPhotos[] = $aPhoto;
}
// manipulate
+ foreach ($aPhotos as $i => $aPhoto) {
+ $oOutput->write('' . $aPhoto['id'] . '');
- foreach ($photos as $i => $photo) {
- $output->write('' . $photo['id'] . '');
-
- $photo['sizes'] = [];
+ $aPhoto['sizes'] = [];
// image exports
- if (0 < count($exports)) {
- $sourceJpg = $imagine->open($photo['path']);
-
- if (isset($photo['exif']['Orientation'])) {
- switch ($photo['exif']['Orientation']) {
+ if (0 < count($sExports)) {
+ $oSourceJpg = $oImagine->open($aPhoto['path']);
+ if (isset($aPhoto['exif']['Orientation'])) {
+ switch ($aPhoto['exif']['Orientation']) {
case 2:
- $sourceJpg->mirror();
-
+ $oSourceJpg->mirror();
break;
-
case 3:
- $sourceJpg->rotate(180);
-
+ $oSourceJpg->rotate(180);
break;
-
case 4:
- $sourceJpg->rotate(180)->mirror();
-
+ $oSourceJpg->rotate(180)->mirror();
break;
-
case 5:
- $sourceJpg->rotate(90)->mirror();
-
+ $oSourceJpg->rotate(90)->mirror();
break;
-
case 6:
- $sourceJpg->rotate(90);
-
+ $oSourceJpg->rotate(90);
break;
-
case 7:
- $sourceJpg->rotate(-90)->mirror();
-
+ $oSourceJpg->rotate(-90)->mirror();
break;
-
case 8:
- $sourceJpg->rotate(-90);
-
+ $oSourceJpg->rotate(-90);
break;
}
}
- $sourceSize = $sourceJpg->getSize();
+ $oSourceSize = $oSourceJpg->getSize();
+ $oOutput->write('[' . $oSourceSize->getWidth() . 'x' . $oSourceSize->getHeight() . ']...');
- $output->write('[' . $sourceSize->getWidth() . 'x' . $sourceSize->getHeight() . ']...');
+ foreach ($sExports as $sExport) {
+ $oOutput->write('' . $sExport . '');
- foreach ($exports as $export) {
- $output->write('' . $export . '');
-
- if (false !== strpos($export, 'x')) {
- list($w, $h) = explode('x', $export);
-
- $exportImage = $sourceJpg->thumbnail(
- new \Imagine\Image\Box($w, $h),
+ if (false !== strpos($sExport, 'x')) {
+ list($iW, $iH) = explode('x', $sExport);
+ $sExportImage = $oSourceJpg->thumbnail(
+ new \Imagine\Image\Box($iW, $iH),
\Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND
);
} else {
- if ('w' == substr($export, -1)) {
- $mx = (int) $export;
- $my = ($mx * $sourceSize->getHeight() ) / $sourceSize->getWidth();
- } elseif ('h' == substr($export, -1)) {
- $my = (int) $export;
- $mx = ($my * $sourceSize->getWidth() ) / $sourceSize->getHeight();
- } elseif ($sourceSize->getWidth() == max($sourceSize->getWidth(), $sourceSize->getHeight())) {
- $mx = (int) $export;
- $my = ($mx * $sourceSize->getHeight()) / $sourceSize->getWidth();
- } elseif ($sourceSize->getHeight() == max($sourceSize->getWidth(), $sourceSize->getHeight())) {
- $my = (int) $export;
- $mx = ($my * $sourceSize->getWidth()) / $sourceSize->getHeight();
- }
-
- $exportImage = $sourceJpg->thumbnail(
- new \Imagine\Image\Box(ceil($mx), ceil($my)),
+ if ('w' == substr($sExport, -1)) {
+ $iX = (int) $sExport;
+ $iY = ($iX * $oSourceSize->getHeight()) / $oSourceSize->getWidth();
+ } elseif ('h' == substr($sExport, -1)) {
+ $iY = (int) $sExport;
+ $iX = ($iY * $oSourceSize->getWidth()) / $oSourceSize->getHeight();
+ } elseif ($oSourceSize->getWidth() == max($oSourceSize->getWidth(), $oSourceSize->getHeight())) {
+ $iX = (int) $sExport;
+ $iY = ($iX * $oSourceSize->getHeight()) / $oSourceSize->getWidth();
+ } elseif ($oSourceSize->getHeight() == max($oSourceSize->getWidth(), $oSourceSize->getHeight())) {
+ $iY = (int) $sExport;
+ $iX = ($iY * $oSourceSize->getWidth()) / $oSourceSize->getHeight();
+ }
+ $sExportImage = $oSourceJpg->thumbnail(
+ new \Imagine\Image\Box(ceil($iX), ceil($iY)),
\Imagine\Image\ImageInterface::THUMBNAIL_INSET
);
}
- $exportSize = $exportImage->getSize();
+ $sExportsize = $sExportImage->getSize();
- $photo['sizes'][$export] = [
- 'width' => $exportSize->getWidth(),
- 'height' => $exportSize->getHeight(),
+ $aPhoto['sizes'][$sExport] = [
+ 'width' => $sExportsize->getWidth(),
+ 'height' => $sExportsize->getHeight(),
];
- $output->write('[' . $exportSize->getWidth() . 'x' . $exportSize->getHeight() . ']');
+ $oOutput->write('[' . $sExportsize->getWidth() . 'x' . $sExportsize->getHeight() . ']');
- $exportPath = $assetPath . '/' . $photo['id'] . '~' . $export . '.jpg';
+ $sExportPath = $sAssetPath . '/' . $aPhoto['id'] . '~' . $sExport . '.jpg';
file_put_contents(
- $exportPath,
- $exportImage->get('jpeg', [ 'quality' => 90 ])
+ $sExportPath,
+ $sExportImage->get('jpeg', ['quality' => 90])
);
- touch($exportPath, $photo['date']->getTimestamp());
-
- $exportImage = null;
-
- $output->write('...');
+ touch($sExportPath, $aPhoto['date']->getTimestamp());
+ $sExportImage = null;
+ $oOutput->write('...');
}
-
- $sourceJpg = null;
+ $oSourceJpg = null;
}
- $output->write('markdown...');
+ $oOutput->write('markdown...');
- $matter = [
- 'layout' => $layout,
- 'title' => $photo['title'],
- 'date' => $photo['date']->format('Y-m-d H:i:s'),
- 'ordering' => $photo['ordering'],
+ $aMatter = [
+ 'layout' => $sLayout,
+ 'title' => $aPhoto['title'],
+ 'date' => $aPhoto['date']->format('Y-m-d H:i:s'),
+ 'ordering' => $aPhoto['ordering']
];
- if ($photo['exif']) {
- $matter['exif'] = [
- 'make' => $photo['exif']['Make'],
- 'model' => $photo['exif']['Model'],
- 'aperture' => $photo['exif']['COMPUTED']['ApertureFNumber'],
- 'exposure' => $photo['exif']['ExposureTime'],
+ if ($aPhoto['exif']) {
+ $aMatter['exif'] = [
+ 'make' => $aPhoto['exif']['Make'],
+ 'model' => $aPhoto['exif']['Model'],
+ 'aperture' => $aPhoto['exif']['COMPUTED']['ApertureFNumber'],
+ 'exposure' => $aPhoto['exif']['ExposureTime'],
];
}
- if (isset($photos[$i - 1])) {
- $matter['previous'] = '/gallery/' . $gallery . '/' . $photos[$i - 1]['id'];
+ if (isset($aPhotos[$i - 1])) {
+ $aMatter['previous'] = '/gallery/' . $sGallery . '/' . $aPhotos[$i - 1]['id'];
}
- if (isset($photos[$i + 1])) {
- $matter['next'] = '/gallery/' . $gallery . '/' . $photos[$i + 1]['id'];
+ if (isset($aPhotos[$i + 1])) {
+ $aMatter['next'] = '/gallery/' . $sGallery . '/' . $aPhotos[$i + 1]['id'];
}
- if ($photo['latitude']) {
- $matter['location'] = [
- 'latitude' => $photo['latitude'],
- 'longitude' => $photo['longitude'],
+ if ($aPhoto['latitude']) {
+ $aMatter['location'] = [
+ 'latitude' => $aPhoto['latitude'],
+ 'longitude' => $aPhoto['longitude'],
];
}
- if ($photo['sizes']) {
- $matter['sizes'] = $photo['sizes'];
+ if ($aPhoto['sizes']) {
+ $aMatter['sizes'] = $aPhoto['sizes'];
}
- ksort_recursive($matter);
+ ksort_recursive($aMatter);
uasort(
- $matter['sizes'],
- function ($a, $b) {
- $aa = $a['width'] * $a['height'];
- $bb = $b['width'] * $b['height'];
-
- if ($aa == $bb) {
- return 0;
- }
-
- return ($aa > $bb) ? -1 : 1;
+ $aMatter['sizes'],
+ function ($aA, $aB) {
+ $iSurfaceA = $aA['width'] * $aA['height'];
+ $iSurfaceB = $aB['width'] * $aB['height'];
+ return $iSurfaceA == $iSurfaceB
+ ? 0
+ : (($aa > $bb)? -1 : 1);
}
);
file_put_contents(
- $renderPath . '/' . $photo['id'] . '.md',
- '---' . "\n" . Yaml::dump($matter, 4, 2) . '---' . "\n" . ((!empty($photo['comment'])) ? ($photo['comment'] . "\n") : '')
+ $sRenderPath . '/' . $aPhoto['id'] . '.md',
+ '---' . "\n" . Yaml::dump($aMatter, 4, 2) . '---' . "\n" . ((!empty($aPhoto['comment'])) ? ($aPhoto['comment'] . "\n") : '')
);
- $output->writeln('done');
+ $oOutput->writeln('done');
}
- }
- )
- ;
+ });
-$console->run(new ArgvInput(array_merge([ $_SERVER['argv'][0], 'run' ], array_slice($_SERVER['argv'], 1))));
+$oConsole->run(new ArgvInput(array_merge([$_SERVER['argv'][0], 'run' ], array_slice($_SERVER['argv'], 1))));
-function ksort_recursive (&$array, $sort_flags = SORT_REGULAR) {
- if (!is_array($array)) {
+function ksort_recursive(&$aArray, $mSortFlags = SORT_REGULAR) {
+ if (!is_array($aArray)) {
return false;
}
-
- foreach ($array as &$subarray) {
- ksort_recursive($subarray, $sort_flags);
+ foreach ($aArray as &$aSubarray) {
+ ksort_recursive($aSubarray, $mSortFlags);
}
-
- ksort($array, $sort_flags);
-
+ ksort($aArray, $mSortFlags);
return true;
}