#355230 by drewish: Correctly pass background color (or transparency) to ImageAPI.
[project/imagecache.git] / imagecache_actions.inc
index 71cb73e..30d79fb 100644 (file)
@@ -2,7 +2,7 @@
 // $Id$
 
 /**
- * Imagecache Scale
+ * ImageCache Scale
  */
 function imagecache_scale_form($data) {
   $form = imagecache_resize_form($data);
@@ -16,7 +16,7 @@ function imagecache_scale_form($data) {
 }
 
 function theme_imagecache_scale($element) {
-  $output = theme_imagecache_resize($element) .  ', upscale: '.
+  $output = theme_imagecache_resize($element) .  ', upscale: ';
   $output .= ($element['#value']['upscale']) ? t('Yes') : t('No');
   return $output;
 }
@@ -26,15 +26,15 @@ function imagecache_scale_image(&$image, $data) {
   $data['width'] = $data['width'] ? $data['width'] : 9999999;
   $data['height'] = $data['height'] ? $data['height'] : 9999999;
   if (!imageapi_image_scale($image, $data['width'], $data['height'], $data['upscale'])) {
-    watchdog('imagecache', t('imagecache_scale_image failed. image: %image, data: %data.', array('%path' => $image, '%data' => print_r($data, true))), WATCHDOG_ERROR);
-    return false;
+    watchdog('imagecache', 'imagecache_scale_image failed. image: %image, data: %data.', array('%image' => $image->source, '%data' => print_r($data, TRUE)), WATCHDOG_ERROR);
+    return FALSE;
   }
-  return true;
+  return TRUE;
 }
 
 
 /**
- * Imagecache Scale and Crop
+ * ImageCache Scale and Crop
  */
 function imagecache_scale_and_crop_form($data) {
   return imagecache_resize_form($data);
@@ -47,16 +47,16 @@ function theme_imagecache_scale_and_crop($element) {
 
 function imagecache_scale_and_crop_image(&$image, $data) {
   if (!imageapi_image_scale_and_crop($image, $data['width'], $data['height'])) {
-    watchdog('imagecache', t('imagecache_scale_and_crop failed. image: %image, data: %data.', array('%path' => $image, '%data' => print_r($data, true))), WATCHDOG_ERROR);
-    return false;
+    watchdog('imagecache', 'imagecache_scale_and_crop failed. image: %image, data: %data.', array('%image' => $image->source, '%data' => print_r($data, TRUE)), WATCHDOG_ERROR);
+    return FALSE;
   }
-  return true;
+  return TRUE;
 }
 
 
 
 /**
- * Imagecache Deprecated Scale.
+ * ImageCache Deprecated Scale.
  * This will be removed in imagecache 2.1
  */
 function imagecache_deprecated_scale_form($data) {
@@ -69,20 +69,20 @@ function imagecache_deprecated_scale_form($data) {
     '#type' => 'select',
     '#title' => t('Scale to fit'),
     '#options' => array('inside' => t('Inside dimensions'), 'outside' => t('Outside dimensions')),
-    '#default_value' => $data['fit'],
+    '#default_value' => isset($data['fit']) ? $data['fit'] : NULL,
     '#weight' => 1,
     '#description' => $description,
   );
   $form['width'] = array(
     '#type' => 'textfield',
     '#title' => t('Width'),
-    '#default_value' => $data['width'],
+    '#default_value' => isset($data['width']) ? $data['width'] : '',
     '#description' => t('Enter a width in pixels or as a percentage. i.e. 500 or 80%.'),
   );
   $form['height'] = array(
     '#type' => 'textfield',
     '#title' => t('Height'),
-    '#default_value' => $data['height'],
+    '#default_value' => isset($data['height']) ? $data['height'] : '',
     '#description' => t('Enter a height in pixels or as a percentage. i.e. 500 or 80%.'),
   );
   return $form;
@@ -105,16 +105,16 @@ function imagecache_deprecated_scale_image(&$image, $data) {
   $data['width'] = $data['width'] ? $data['width'] : 9999999;
   $data['height'] = $data['height'] ? $data['height'] : 9999999;
   if (!imageapi_image_scale($image, $data['width'], $data['height'])) {
-     watchdog('imagecache', t('imagecache_deprecated_scale failed. image: %image, data: %data.', array('%path' => $image, '%data' => print_r($data, true))), WATCHDOG_ERROR);
-    return false;
+     watchdog('imagecache', 'imagecache_deprecated_scale failed. image: %image, data: %data.', array('%image' => $image->source, '%data' => print_r($data, TRUE)), WATCHDOG_ERROR);
+    return FALSE;
   }
-  return true;
+  return TRUE;
 }
 
 
 
 /**
- * Imagecache Crop
+ * ImageCache Crop
  */
 function imagecache_crop_form($data) {
   $data += array(
@@ -157,15 +157,15 @@ function theme_imagecache_crop($element) {
 
 function imagecache_crop_image(&$image, $data) {
   if (!imageapi_image_crop($image, $data['xoffset'], $data['yoffset'], $data['width'], $data['height'])) {
-      watchdog('imagecache', t('imagecache_crop failed. image: %image, data: %data.', array('%path' => $image, '%data' => print_r($data, true))), WATCHDOG_ERROR);
-    return false;
+      watchdog('imagecache', 'imagecache_crop failed. image: %image, data: %data.', array('%image' => $image->source, '%data' => print_r($data, TRUE)), WATCHDOG_ERROR);
+    return FALSE;
   }
-  return true;
+  return TRUE;
 }
 
 
 /**
- * Imagecache Desaturate
+ * ImageCache Desaturate
  */
 function imagecache_desaturate_form($data) {
   return array();
@@ -178,16 +178,16 @@ function theme_imagecache_desaturate($element) {
 
 function imagecache_desaturate_image(&$image, $data = array()) {
   if (!imageapi_image_desaturate($image)) {
-    watchdog('imagecache', t('imagecache_desaturate failed. image: %image, data: %data.', array('%path' => $image, '%data' => print_r($data, true))), WATCHDOG_ERROR);
-    return false;
+    watchdog('imagecache', 'imagecache_desaturate failed. image: %image, data: %data.', array('%image' => $image->source, '%data' => print_r($data, TRUE)), WATCHDOG_ERROR);
+    return FALSE;
   }
-  return true;
+  return TRUE;
 }
 
 
 
 /**
- * Imagecache Rotate
+ * ImageCache Rotate
  */
 function imagecache_rotate_form($data) {
   $form['degrees'] = array(
@@ -204,37 +204,100 @@ function imagecache_rotate_form($data) {
   );
   $form['bgcolor'] = array(
     '#type' => 'textfield',
-    '#default_value' => (isset($data['bgcolor'])) ? $data['bgcolor'] : '#FFFFFF',
+    '#default_value' => (isset($data['bgcolor'])) ? $data['bgcolor'] : '',
     '#title' => t('Background color'),
-    '#description' => t('The background color to use for exposed areas of the image. Use web-style hex colors (#FFFFFF for white, #000000 for black).'),
+    '#description' => t('The background color to use for exposed areas of the image. Use web-style hex colors (#FFFFFF for white, #000000 for black). An empty value will cause images that support transparency to have transparent backgrounds, otherwise it will be white.'),
   );
   return $form;
 }
 
 function theme_imagecache_rotate($element) {
-  $output = t('degrees: ') . $element['#value']['degrees'] .', ';
-  $output .= t('randomize: ') . (($element['#value']['random']) ? t('Yes') : t('No')) .', ';
-  $output .= t('background: ') . $element['#value']['bgcolor'];
+  $output = t('degrees:') .' '. $element['#value']['degrees'] .', ';
+  $output .= t('randomize:') .' '. (($element['#value']['random']) ? t('Yes') : t('No')) .', ';
+  $output .= t('background:') .' '. strlen(trim($element['#value']['bgcolor'])) ? $element['#value']['bgcolor'] : t('Transparent/white');
   return $output;
 }
 
 function imagecache_rotate_image(&$image, $data) {
+  // Merge in default values.
+  $data += array(
+    'degrees' => '0',
+    'random' => FALSE,
+    'bgcolor' => '',
+  );
   // Set sane default values.
-  $data['degrees'] = $data['degrees'] ? $data['degrees'] : 0;
-  $data['random'] = $data['random'] ? $data['random'] : false;
-  $data['bgcolor'] = $data['bgcolor'] ? $data['bgcolor'] : '#FFFFFF';
-
-  // Manipulate the if we need to randomize, and convert to proper colors.
-  $data['bgcolor'] = '0x'. str_replace('#', '', $data['bgcolor']);
+  if (strlen(trim($data['bgcolor']))) {
+    $data['bgcolor'] = hexdec(str_replace('#', '', $data['bgcolor']));
+  }
+  else {
+    $data['bgcolor'] = NULL;
+  }
 
-  if (!empty($data['random'])) {
+  if ($data['random']) {
     $degrees = abs((float)$data['degrees']);
     $data['degrees'] = rand(-1 * $degrees, $degrees);
   }
 
   if (!imageapi_image_rotate($image, $data['degrees'], $data['bgcolor'])) {
-    watchdog('imagecache', t('imagecache_rotate_image failed. image: %image, data: %data.', array('%path' => $image, '%data' => print_r($data, true))), WATCHDOG_ERROR);
-    return false;
+    watchdog('imagecache', 'imagecache_rotate_image failed. image: %image, data: %data.', array('%image' => $image->source, '%data' => print_r($data, TRUE)), WATCHDOG_ERROR);
+    return FALSE;
+  }
+  return TRUE;
+}
+
+/**
+ * ImageCache Sharpen
+ */
+function imagecache_sharpen_form($data) {
+  $form['info'] = array(
+    '#value' => t('<strong>NOTE:</strong> The sigma parameter below is currently <em>only</em> used when the Imagemagick toolkit is active.'),
+  );
+  $form['radius'] = array(
+    '#type' => 'textfield',
+    '#default_value' => (isset($data['radius'])) ? $data['radius'] : '0.5' ,
+    '#title' => t('Radius'),
+    '#description' => t('The radius of the gaussian, in pixels, not counting the center pixel. If you\'re using Imagemagick, you can set this to 0 to let Imagemagick select a suitable radius. Typically 0.5 to 1 for screen resolutions. (default 0.5)'),
+  );
+  $form['sigma'] = array(
+    '#type' => 'textfield',
+    '#default_value' => (isset($data['sigma'])) ? $data['sigma'] : '0.5' ,
+    '#title' => t('Sigma'),
+    '#description' => t('The standard deviation of the gaussian, in pixels. General rule of thumb: if radius < 1 then sigma = radius, else sigma = sqrt(radius). (default 0.5)'),
+  );
+  $form['amount'] = array(
+    '#type' => 'textfield',
+    '#default_value' => (isset($data['amount'])) ? $data['amount'] : '100' ,
+    '#title' => t('Amount'),
+    '#description' => t('The percentage of the difference between the original and the blur image that is added back into the original. Typically 50 to 200. (default 100).'),
+  );
+  $form['threshold'] = array(
+    '#type' => 'textfield',
+    '#default_value' => (isset($data['threshold'])) ? $data['threshold'] : '0.05' ,
+    '#title' => t('Threshold'),
+    '#description' => t('The threshold, as a fraction of max RGB levels, needed to apply the difference amount.  Typically 0 to 0.2. (default 0.05).'),
+  );
+  return $form;
+}
+
+function theme_imagecache_sharpen($element) {
+  $output = t('radius:') .' '. $element['#value']['radius'] .', ';
+  $output .= t('sigma:') .' '. $element['#value']['sigma'] .', ';
+  $output .= t('amount:') .' '. $element['#value']['amount'] .', ';
+  $output .= t('threshold:') .' '. $element['#value']['threshold'] ;
+  return $output;
+}
+
+function imagecache_sharpen_image(&$image, $data) {
+  // Set sane default values.
+  $data['radius'] = $data['radius'] ? $data['radius'] : "0.5";
+  $data['sigma'] = $data['sigma'] ? $data['sigma'] : "0.5";
+  $data['amount'] = $data['amount'] ? $data['amount'] : "100";
+  $data['threshold'] = $data['threshold'] ? $data['threshold'] : "0.05";
+
+  if (!imageapi_image_sharpen($image, $data['radius'], $data['sigma'], $data['amount'], $data['threshold'])) {
+    watchdog('imagecache', 'imagecache_sharpen_image failed. image: %image, data: %data.', array('%image' => $image->source, '%data' => print_r($data, TRUE)), WATCHDOG_ERROR);
+    return FALSE;
   }
-  return true;
+  return TRUE;
 }