123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- <?php
- /**
- * @file A collection of canvas (layer) type manipulations for imagecache -
- * including "Watermark"
- *
- * Based on first draft of the code by Dimm (imagecache.module 5--1)
- * https://drupal.org/node/184816
- *
- * Rewritten and ported to Imagecache actions API (imagecache.module 5--2) by
- * dman http://coders.co.nz/
- *
- *
- * Notes about imagecache action extensions. For each action:
- *
- * 1: Implement imagecache_HOOK_form($formdata) to define the config form.
- *
- * 1a: Implement theme_imagecache_HOOK_form if needed - optional
- *
- * 2: Implement imagecache_HOOK_image($image, $data) to DO the process
- *
- * 3: Implement theme_imagecache_HOOK($element) to return a text description of
- * the setting
- *
- * 4: Declare the action in HOOK_imagecache_actions()
- *
- *
- * API ref for hook_image()
- *
- * @param $image array defining an image file, including :
- *
- * $image- >source as the filename,
- *
- * $image->info array
- *
- * $image->resource handle on the image object
- *
- * @param $action array of settings as defined in your form.
- *
- */
- if (! function_exists('imagecache_actions_calculate_relative_position') ) {
- module_load_include('inc', 'imagecache_actions', 'utility');
- }
- // @todo There doesn't seem to be a way to specify a file in hook_image_effect_info
- // so placing this here for the time being.
- module_load_include('inc', 'imagecache_canvasactions', 'canvasactions');
- module_load_include('inc', 'imagecache_canvasactions', 'rounded_corners');
- /**
- * Implements hook_image_effect_info().
- *
- * Defines information about the supported effects.
- */
- function imagecache_canvasactions_image_effect_info() {
- $effects = array();
- $effects['canvasactions_definecanvas'] = array(
- 'label' => t('Define canvas'),
- 'help' => t('Define the size of the working canvas and background color, this controls the dimensions of the output image.'),
- 'effect callback' => 'canvasactions_definecanvas_effect',
- 'dimensions callback' => 'canvasactions_definecanvas_dimensions',
- 'form callback' => 'canvasactions_definecanvas_form',
- 'summary theme' => 'canvasactions_definecanvas_summary',
- );
- $effects['canvasactions_imagemask'] = array(
- 'label' => t('Image mask'),
- 'help' => t(' Choose the file image you wish to use as a mask, and apply it to the canvas.'),
- 'dimensions passthrough' => TRUE,
- 'effect callback' => 'canvasactions_imagemask_effect',
- 'form callback' => 'canvasactions_imagemask_form',
- 'summary theme' => 'canvasactions_imagemask_summary',
- );
- $effects['canvasactions_file2canvas'] = array(
- 'label' => t('Overlay (watermark)'),
- 'help' => t('Choose the file image you wish to use as an overlay, and position it in a layer on top of the canvas.'),
- 'dimensions passthrough' => TRUE,
- 'effect callback' => 'canvasactions_file2canvas_effect',
- 'form callback' => 'canvasactions_file2canvas_form',
- 'summary theme' => 'canvasactions_file2canvas_summary',
- );
- $effects['canvasactions_canvas2file'] = array(
- 'label' => t('Underlay (background)'),
- 'help' => t('Choose the file image you wish to use as an background, and position the processed image on it.'),
- 'effect callback' => 'canvasactions_canvas2file_effect',
- 'dimensions callback' => 'canvasactions_canvas2file_dimensions',
- 'form callback' => 'canvasactions_canvas2file_form',
- 'summary theme' => 'canvasactions_canvas2file_summary',
- );
- $effects['canvasactions_source2canvas'] = array(
- 'label' => t('Overlay: source image to canvas'),
- 'help' => t('Places the source image onto the canvas for compositing.'),
- 'dimensions passthrough' => TRUE,
- 'effect callback' => 'canvasactions_source2canvas_effect',
- 'form callback' => 'canvasactions_source2canvas_form',
- 'summary theme' => 'canvasactions_source2canvas_summary',
- );
- $effects['canvasactions_roundedcorners'] = array(
- 'label' => t('Rounded Corners'),
- 'help' => t('This is true cropping, not overlays, so the result <em>can</em> be transparent.'),
- 'dimensions passthrough' => TRUE,
- 'effect callback' => 'canvasactions_roundedcorners_effect',
- 'form callback' => 'canvasactions_roundedcorners_form',
- 'summary theme' => 'canvasactions_roundedcorners_summary',
- );
- $effects['canvasactions_aspect'] = array(
- 'label' => t('Aspect switcher'),
- 'help' => t('Use different effects depending on whether the image is landscape of portrait shaped. This re-uses other preset definitions, and just chooses between them based on the rule.'),
- 'effect callback' => 'canvasactions_aspect_effect',
- 'dimensions callback' => 'canvasactions_aspect_dimensions',
- 'form callback' => 'canvasactions_aspect_form',
- 'summary theme' => 'canvasactions_aspect_summary',
- );
- $effects['canvasactions_resizepercent'] = array(
- 'label' => t('Resize (percent)'),
- 'help' => t('Resize the image based on percent. If only a single dimension is specified, the other dimension will be calculated.'),
- 'effect callback' => 'canvasactions_resizepercent_effect',
- 'dimensions callback' => 'canvasactions_resizepercent_dimensions',
- 'form callback' => 'canvasactions_resizepercent_form',
- 'summary theme' => 'canvasactions_resizepercent_summary',
- );
- $effects['canvasactions_blur'] = array(
- 'label' => t('Blur'),
- 'help' => t('Make the image become unclear.'),
- 'effect callback' => 'canvasactions_blur_effect',
- 'dimensions passthrough' => TRUE,
- 'form callback' => 'canvasactions_blur_form',
- 'summary theme' => 'canvasactions_blur_summary',
- );
- $effects['canvasactions_interlace'] = array(
- 'label' => t('Interlace / Progressive'),
- 'help' => t('Create interlaced PNG/GIF or progressive JPG.'),
- 'effect callback' => 'canvasactions_interlace_effect',
- 'dimensions passthrough' => TRUE,
- 'form callback' => 'canvasactions_interlace_form',
- );
- $effects['canvasactions_perspective'] = array(
- 'label' => t('Perspective transform'),
- 'help' => t('Adds a perspective transformation to the image.'),
- 'effect callback' => 'canvasactions_perspective_effect',
- 'dimensions passthrough' => TRUE,
- 'form callback' => 'canvasactions_perspective_form',
- 'summary theme' => 'canvasactions_perspective_summary',
- );
- return $effects;
- }
- /**
- * Implements hook_theme().
- *
- * Registers theme functions for the effect summaries.
- */
- function imagecache_canvasactions_theme() {
- return array(
- 'canvasactions_definecanvas_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_imagemask_summary' => array(
- 'arguments' => array('element' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_file2canvas_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_source2canvas_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_canvas2file_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_roundedcorners_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_aspect_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_resizepercent_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_blur_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_perspective_summary' => array(
- 'variables' => array('data' => NULL),
- 'file' => 'canvasactions.inc',
- ),
- 'canvasactions_perspective_anchor' => array(
- 'render element' => 'element',
- ),
- );
- }
- /**
- * Implements hook_image_style_flush().
- *
- * This hook checks if the image style that is being flushed is used in an
- * aspect switcher effect. If so, the style that contains the aspect switcher
- * effect, should be flushed as well as the flushed style was probably changed.
- *
- * @param array $flushed_style
- * The image style that is being flushed.
- */
- function imagecache_canvasactions_image_style_flush(/*array*/ $flushed_style) {
- $styles = image_styles();
- foreach ($styles as $style) {
- if ($style['name'] !== $flushed_style['name']) {
- foreach ($style['effects'] as $effect) {
- if ($effect['name'] === 'canvasactions_aspect') {
- if ( (isset($effect['data']['portrait']) && $effect['data']['portrait'] === $flushed_style['name'])
- || (isset($effect['data']['landscape']) && $effect['data']['landscape'] === $flushed_style['name'])) {
- image_style_flush($style);
- }
- }
- }
- }
- }
- }
|