Index: canvasactions.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/imagecache_actions/canvasactions.inc,v
retrieving revision 1.1.4.21
diff -u -p -r1.1.4.21 canvasactions.inc
--- canvasactions.inc	28 Dec 2009 03:26:53 -0000	1.1.4.21
+++ canvasactions.inc	6 Jul 2010 14:32:39 -0000
@@ -1003,6 +1003,23 @@ function canvasactions_aspect_image(&$im
   // Run the preset actions ourself. Cannot invoke a preset from the top as it handles filenames, not image objects.
   // ripped from imagecache_build_derivative()
   foreach ($preset['actions'] as $sub_action) {
+    if (!empty($sub_action['data'])) {
+      // Make sure the width and height are computed first so they can be used
+      // in relative x/yoffsets like 'center' or 'bottom'.
+      if (isset($sub_action['data']['width'])) {
+        $sub_action['data']['width']   = _imagecache_percent_filter($sub_action['data']['width'], $image->info['width']);
+      }
+      if (isset($sub_action['data']['height'])) {
+        $sub_action['data']['height']  = _imagecache_percent_filter($sub_action['data']['height'], $image->info['height']);
+      }
+      if (isset($sub_action['data']['xoffset'])) {
+        $sub_action['data']['xoffset'] = _imagecache_keyword_filter($sub_action['data']['xoffset'], $image->info['width'], $sub_action['data']['width']);
+      }
+      if (isset($sub_action['data']['yoffset'])) {
+        $sub_action['data']['yoffset'] = _imagecache_keyword_filter($sub_action['data']['yoffset'], $image->info['height'], $sub_action['data']['height']);
+      }
+    }
+
     _imagecache_apply_action($sub_action, $image);
   }
   return TRUE;
