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 can 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); } } } } } }