diff options
Diffstat (limited to 'modules/autorotate/helpers')
| -rw-r--r-- | modules/autorotate/helpers/autorotate.php | 68 | ||||
| -rw-r--r-- | modules/autorotate/helpers/autorotate_event.php | 32 | ||||
| -rw-r--r-- | modules/autorotate/helpers/autorotate_installer.php | 42 |
3 files changed, 142 insertions, 0 deletions
diff --git a/modules/autorotate/helpers/autorotate.php b/modules/autorotate/helpers/autorotate.php new file mode 100644 index 0000000..cb0e249 --- /dev/null +++ b/modules/autorotate/helpers/autorotate.php @@ -0,0 +1,68 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2013 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class autorotate { + static function rotate_item($item) { + + require_once(MODPATH . 'autorotate/lib/pel/PelDataWindow.php'); + require_once(MODPATH . 'autorotate/lib/pel/PelJpeg.php'); + require_once(MODPATH . 'autorotate/lib/pel/PelTiff.php'); + + // Only try to rotate photos based on EXIF + if ($item->is_photo() && $item->mime_type == "image/jpeg") { + require_once(MODPATH . "exif/lib/exif.php"); + $exif_raw = read_exif_data_raw($item->file_path(), false); + if (isset($exif_raw['ValidEXIFData'])) { + $orientation = $exif_raw["IFD0"]["Orientation"]; + $degrees = 0; + if ($orientation == '3: Upside-down') { + $degrees = 180; + } + else if ($orientation == '8: 90 deg CW') { + $degrees = -90; + } + else if ($orientation == '6: 90 deg CCW') { + $degrees = 90; + } + if($degrees) { + $tmpfile = tempnam(TMPPATH, "rotate"); + gallery_graphics::rotate($item->file_path(), $tmpfile, array("degrees" => $degrees)); + // Update EXIF info + $data = new PelDataWindow(file_get_contents($tmpfile)); + if (PelJpeg::isValid($data)) { + $jpeg = $file = new PelJpeg(); + $jpeg->load($data); + $exif = $jpeg->getExif(); + if($exif !== null) { + $tiff = $exif->getTiff(); + $ifd0 = $tiff->getIfd(); + $orientation = $ifd0->getEntry(PelTag::ORIENTATION); + $orientation->setValue(1); + file_put_contents($tmpfile, $file->getBytes()); + } + } + $item->set_data_file($tmpfile); + $item->save(); + unlink($tmpfile); + } + } + } + return; + } +}
\ No newline at end of file diff --git a/modules/autorotate/helpers/autorotate_event.php b/modules/autorotate/helpers/autorotate_event.php new file mode 100644 index 0000000..c2fd04b --- /dev/null +++ b/modules/autorotate/helpers/autorotate_event.php @@ -0,0 +1,32 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2013 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class autorotate_event_Core { + // The assumption is that the exception was logged at a lower level, but we + // don't want to screw up the processing that was generating the notification + // so we don't pass the exception up the call stack + static function item_created($item) { + try { + autorotate::rotate_item($item); + } catch (Exception $e) { + Kohana_Log::add("error", "@todo autorotate_event::item_created() failed"); + Kohana_Log::add("error", $e->getMessage() . "\n" . $e->getTraceAsString()); + } + } +}
\ No newline at end of file diff --git a/modules/autorotate/helpers/autorotate_installer.php b/modules/autorotate/helpers/autorotate_installer.php new file mode 100644 index 0000000..c3ed03a --- /dev/null +++ b/modules/autorotate/helpers/autorotate_installer.php @@ -0,0 +1,42 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2013 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class autorotate_installer { + // static function install() { + // module::set_version("autorotate", 2); + // } + + // static function upgrade($version) { + // if ($version == 1) { + // module::set_version("autorotate", $version = 2); + // } + // } + + static function deactivate() { + site_status::clear("autorotate_needs_exif"); + } + + static function can_activate() { + $messages = array(); + if (!module::is_active("exif")) { + $messages["warn"][] = t("The autorotate module requires the EXIF module."); + } + return $messages; + } +}
\ No newline at end of file |
