diff --git a/3.0/modules/emboss/helpers/emboss.php b/3.0/modules/emboss/helpers/emboss.php index 84c50aa2..e3a1c5ce 100644 --- a/3.0/modules/emboss/helpers/emboss.php +++ b/3.0/modules/emboss/helpers/emboss.php @@ -333,7 +333,7 @@ class emboss_Core { $has_changes=0; foreach ($images as $image) { - $overlay_id = emboss::determine_best_overlay($image,$overlays); + $overlay_id = emboss::determine_best_overlay($image->width,$image->height,$overlays); if($overlay_id < 0) { $n_none++; } @@ -378,7 +378,7 @@ class emboss_Core { } } - static function determine_best_overlay($image,$overlays=NULL) + static function determine_best_overlay($W,$H,$overlays=NULL) { if(!$overlays) { $overlays = ORM::factory('emboss_overlay')->where('active','=',1)->find_all(); @@ -387,8 +387,8 @@ class emboss_Core { $method = module::get_var('emboss','method'); $size = 0.01 * module::get_var('emboss','size'); - $W = $size * $image->width; - $H = $size * $image->height; + $W *= $size; + $H *= $size; $bestID = -1; $bestScore=0; @@ -454,6 +454,55 @@ class emboss_Core { log::info('emboss','module uninstalled (database dropped/overlays removed)'); } - + public function copy_orig_to_album($item,$delta) + { + $itempath = $item->file_path(); + $origpath = str_replace(VARPATH.'albums/',VARPATH.'originals/',$itempath); + + $q = db::build() + ->select('cur_rotation') + ->from('emboss_mappings') + ->where('image_id','=',$item->id) + ->execute(); + + $old_rot = $q[0]->cur_rotation; + $new_rot = ($old_rot + $delta + 360)%360; + + db::build() + ->update('emboss_mappings') + ->where('image_id','=',$item->id) + ->set('cur_rotation',$new_rot) + ->execute(); + + @unlink($itempath); + @copy($origpath,$itempath); + + Image::factory($itempath) + ->quality(module::get_var('gallery', 'image_quality')) + ->rotate($old_rot) + ->save($itempath); + } + + public function reemboss_rotation($item) + { + // no, the following isn't backwards + // After rotation, width and height are swapped + // The $item object is from before rotation + $new_overlay = emboss::determine_best_overlay($item->height,$item->width); + + db::build() + ->update('emboss_mappings') + ->where('image_id','=',$item->id) + ->set('best_overlay_id',$new_overlay) + ->execute(); + + db::build() + ->update('emboss_mappings') + ->where('image_id','=',$item->id) + ->set('cur_overlay_id',-1) + ->execute(); + + emboss::check_for_dirty(); + } } diff --git a/3.0/modules/emboss/helpers/emboss_event.php b/3.0/modules/emboss/helpers/emboss_event.php index c09c8f5d..188f2f4a 100644 --- a/3.0/modules/emboss/helpers/emboss_event.php +++ b/3.0/modules/emboss/helpers/emboss_event.php @@ -108,7 +108,7 @@ class emboss_event_Core { $q = ORM::factory('emboss_mapping'); $q->image_id = $item->id; - $q->best_overlay_id = emboss::determine_best_overlay($item); + $q->best_overlay_id = emboss::determine_best_overlay($item->width,$item->height); $q->cur_overlay_id = -1; $q->cur_gravity = ''; $q->cur_transparency = -1; @@ -117,5 +117,14 @@ class emboss_event_Core { emboss::check_for_dirty(); } + static function graphics_rotate($in,$out,$opts,$item) + { + emboss::copy_orig_to_album($item,$opts['degrees']); + } + + static function graphics_rotate_completed($in,$out,$opts,$item) + { + emboss::reemboss_rotation($item); + } } diff --git a/3.0/modules/emboss/helpers/emboss_installer.php b/3.0/modules/emboss/helpers/emboss_installer.php index 663d671f..09ce4897 100644 --- a/3.0/modules/emboss/helpers/emboss_installer.php +++ b/3.0/modules/emboss/helpers/emboss_installer.php @@ -45,9 +45,14 @@ class emboss_installer { } static function upgrade($version) - { - module::set_version('emboss',$verion=1); - log::info('emboss',"Upgrade to version $version / No action taken"); + { + $db = Database::instance(); + if($version==1) + { + $db->query("ALTER TABLE {emboss_mappings} ADD COLUMN `cur_rotation` int(9) default 0"); + module::set_version('emboss',2); + log::info('emboss',"Upgraded to version 2 / Added Column cur_rotation"); + } } static function activate() diff --git a/3.0/modules/emboss/helpers/emboss_task.php b/3.0/modules/emboss/helpers/emboss_task.php index b0673b26..5dfbde7c 100644 --- a/3.0/modules/emboss/helpers/emboss_task.php +++ b/3.0/modules/emboss/helpers/emboss_task.php @@ -45,7 +45,8 @@ class emboss_task_Core { foreach ($q as $item) { $ids[] = array('id'=>$item->id, 'image_id'=>$item->image_id, - 'overlay_id'=>$item->best_overlay_id); + 'overlay_id'=>$item->best_overlay_id, + 'rotation'=>$item->cur_rotation); } $count = count($ids); @@ -75,7 +76,7 @@ class emboss_task_Core { $current++; $task->set('current',$current); - emboss_task::do_embossing($id['id'],$id['image_id'],$id['overlay_id']); + emboss_task::do_embossing($id['id'],$id['image_id'],$id['overlay_id'],$id['rotation']); if($current>=$count) { $task->done = true; @@ -101,7 +102,7 @@ class emboss_task_Core { } } - static function do_embossing($id,$image_id,$overlay_id) + static function do_embossing($id,$image_id,$overlay_id,$rotation) { $gravity = module::get_var('emboss','gravity'); $transparency = module::get_var('emboss','transparency'); @@ -124,9 +125,26 @@ class emboss_task_Core { $opts['position'] = $gravity; $opts['transparency'] = 100-$transparency; - log::info('emboss','Embossing '.$item->name.' with '.$overlay->name); + if($rotation==0) + { + log::info('emboss','Embossing '.$item->name.' with '.$overlay->name); + gallery_graphics::composite($orig,$path,$opts); + } + else + { + log::info('emboss','Embossing Rotation('.$rotation.') '.$item->name.' with '.$overlay->name); + $orig_path = explode('/',$orig); + $orig_name = array_pop($orig_path); + $orig_path = implode('/',$orig_path); + $rotpath = $orig_path.'/rotated_'.$orig_name; - gallery_graphics::composite($orig,$path,$opts); + Image::factory($orig) + ->quality(module::get_var('gallery', 'image_quality')) + ->rotate($rotation) + ->save($rotpath); + + gallery_graphics::composite($rotpath,$path,$opts); + } } $item->thumb_dirty = 1; diff --git a/3.0/modules/emboss/module.info b/3.0/modules/emboss/module.info index 14bb7231..1a44fe26 100644 --- a/3.0/modules/emboss/module.info +++ b/3.0/modules/emboss/module.info @@ -1,6 +1,6 @@ name = "Emboss" description = "A different watermarking module" -version = 1 +version = 2 author_name = "mikemayer67" author_url = "http://www.vmwishes.com" info_url = "http://codex.gallery2.org/Gallery3:Modules:emboss" diff --git a/3.0/modules/emboss/views/admin_emboss.html.php b/3.0/modules/emboss/views/admin_emboss.html.php index 86745948..bdc7839f 100644 --- a/3.0/modules/emboss/views/admin_emboss.html.php +++ b/3.0/modules/emboss/views/admin_emboss.html.php @@ -1,20 +1,21 @@ -/************************************************************************* - * Copyright (C) 2012 Michel A. Mayer * - * * - * 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 3 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, see . * - *************************************************************************/ + +