cms/drupal/modules/image/image.api.php
changeset 541 e756a8c72c3d
equal deleted inserted replaced
540:07239de796bb 541:e756a8c72c3d
       
     1 <?php
       
     2 
       
     3 /**
       
     4  * @file
       
     5  * Hooks related to image styles and effects.
       
     6  */
       
     7 
       
     8 /**
       
     9  * @addtogroup hooks
       
    10  * @{
       
    11  */
       
    12 
       
    13 /**
       
    14  * Define information about image effects provided by a module.
       
    15  *
       
    16  * This hook enables modules to define image manipulation effects for use with
       
    17  * an image style.
       
    18  *
       
    19  * @return
       
    20  *   An array of image effects. This array is keyed on the machine-readable
       
    21  *   effect name. Each effect is defined as an associative array containing the
       
    22  *   following items:
       
    23  *   - "label": The human-readable name of the effect.
       
    24  *   - "effect callback": The function to call to perform this image effect.
       
    25  *   - "dimensions passthrough": (optional) Set this item if the effect doesn't
       
    26  *     change the dimensions of the image.
       
    27  *   - "dimensions callback": (optional) The function to call to transform
       
    28  *     dimensions for this effect.
       
    29  *   - "help": (optional) A brief description of the effect that will be shown
       
    30  *     when adding or configuring this image effect.
       
    31  *   - "form callback": (optional) The name of a function that will return a
       
    32  *     $form array providing a configuration form for this image effect.
       
    33  *   - "summary theme": (optional) The name of a theme function that will output
       
    34  *     a summary of this image effect's configuration.
       
    35  *
       
    36  * @see hook_image_effect_info_alter()
       
    37  */
       
    38 function hook_image_effect_info() {
       
    39   $effects = array();
       
    40 
       
    41   $effects['mymodule_resize'] = array(
       
    42     'label' => t('Resize'),
       
    43     'help' => t('Resize an image to an exact set of dimensions, ignoring aspect ratio.'),
       
    44     'effect callback' => 'mymodule_resize_effect',
       
    45     'dimensions callback' => 'mymodule_resize_dimensions',
       
    46     'form callback' => 'mymodule_resize_form',
       
    47     'summary theme' => 'mymodule_resize_summary',
       
    48   );
       
    49 
       
    50   return $effects;
       
    51 }
       
    52 
       
    53 /**
       
    54  * Alter the information provided in hook_image_effect_info().
       
    55  *
       
    56  * @param $effects
       
    57  *   The array of image effects, keyed on the machine-readable effect name.
       
    58  *
       
    59  * @see hook_image_effect_info()
       
    60  */
       
    61 function hook_image_effect_info_alter(&$effects) {
       
    62   // Override the Image module's crop effect with more options.
       
    63   $effects['image_crop']['effect callback'] = 'mymodule_crop_effect';
       
    64   $effects['image_crop']['dimensions callback'] = 'mymodule_crop_dimensions';
       
    65   $effects['image_crop']['form callback'] = 'mymodule_crop_form';
       
    66 }
       
    67 
       
    68 /**
       
    69  * Respond to image style updating.
       
    70  *
       
    71  * This hook enables modules to update settings that might be affected by
       
    72  * changes to an image. For example, updating a module specific variable to
       
    73  * reflect a change in the image style's name.
       
    74  *
       
    75  * @param $style
       
    76  *   The image style array that is being updated.
       
    77  */
       
    78 function hook_image_style_save($style) {
       
    79   // If a module defines an image style and that style is renamed by the user
       
    80   // the module should update any references to that style.
       
    81   if (isset($style['old_name']) && $style['old_name'] == variable_get('mymodule_image_style', '')) {
       
    82     variable_set('mymodule_image_style', $style['name']);
       
    83   }
       
    84 }
       
    85 
       
    86 /**
       
    87  * Respond to image style deletion.
       
    88  *
       
    89  * This hook enables modules to update settings when a image style is being
       
    90  * deleted. If a style is deleted, a replacement name may be specified in
       
    91  * $style['name'] and the style being deleted will be specified in
       
    92  * $style['old_name'].
       
    93  *
       
    94  * @param $style
       
    95  *   The image style array that being deleted.
       
    96  */
       
    97 function hook_image_style_delete($style) {
       
    98   // Administrators can choose an optional replacement style when deleting.
       
    99   // Update the modules style variable accordingly.
       
   100   if (isset($style['old_name']) && $style['old_name'] == variable_get('mymodule_image_style', '')) {
       
   101     variable_set('mymodule_image_style', $style['name']);
       
   102   }
       
   103 }
       
   104 
       
   105 /**
       
   106  * Respond to image style flushing.
       
   107  *
       
   108  * This hook enables modules to take effect when a style is being flushed (all
       
   109  * images are being deleted from the server and regenerated). Any
       
   110  * module-specific caches that contain information related to the style should
       
   111  * be cleared using this hook. This hook is called whenever a style is updated,
       
   112  * deleted, or any effect associated with the style is update or deleted.
       
   113  *
       
   114  * @param $style
       
   115  *   The image style array that is being flushed.
       
   116  */
       
   117 function hook_image_style_flush($style) {
       
   118   // Empty cached data that contains information about the style.
       
   119   cache_clear_all('*', 'cache_mymodule', TRUE);
       
   120 }
       
   121 
       
   122 /**
       
   123  * Modify any image styles provided by other modules or the user.
       
   124  *
       
   125  * This hook allows modules to modify, add, or remove image styles. This may
       
   126  * be useful to modify default styles provided by other modules or enforce
       
   127  * that a specific effect is always enabled on a style. Note that modifications
       
   128  * to these styles may negatively affect the user experience, such as if an
       
   129  * effect is added to a style through this hook, the user may attempt to remove
       
   130  * the effect but it will be immediately be re-added.
       
   131  *
       
   132  * The best use of this hook is usually to modify default styles, which are not
       
   133  * editable by the user until they are overridden, so such interface
       
   134  * contradictions will not occur. This hook can target default (or user) styles
       
   135  * by checking the $style['storage'] property.
       
   136  *
       
   137  * If your module needs to provide a new style (rather than modify an existing
       
   138  * one) use hook_image_default_styles() instead.
       
   139  *
       
   140  * @see hook_image_default_styles()
       
   141  */
       
   142 function hook_image_styles_alter(&$styles) {
       
   143   // Check that we only affect a default style.
       
   144   if ($styles['thumbnail']['storage'] == IMAGE_STORAGE_DEFAULT) {
       
   145     // Add an additional effect to the thumbnail style.
       
   146     $styles['thumbnail']['effects'][] = array(
       
   147       'name' => 'image_desaturate',
       
   148       'data' => array(),
       
   149       'weight' => 1,
       
   150       'effect callback' => 'image_desaturate_effect',
       
   151     );
       
   152   }
       
   153 }
       
   154 
       
   155 /**
       
   156  * Provide module-based image styles for reuse throughout Drupal.
       
   157  *
       
   158  * This hook allows your module to provide image styles. This may be useful if
       
   159  * you require images to fit within exact dimensions. Note that you should
       
   160  * attempt to re-use the default styles provided by Image module whenever
       
   161  * possible, rather than creating image styles that are specific to your module.
       
   162  * Image provides the styles "thumbnail", "medium", and "large".
       
   163  *
       
   164  * You may use this hook to more easily manage your site's changes by moving
       
   165  * existing image styles from the database to a custom module. Note however that
       
   166  * moving image styles to code instead storing them in the database has a
       
   167  * negligible effect on performance, since custom image styles are loaded
       
   168  * from the database all at once. Even if all styles are pulled from modules,
       
   169  * Image module will still perform the same queries to check the database for
       
   170  * any custom styles.
       
   171  *
       
   172  * @return
       
   173  *   An array of image styles, keyed by the style name.
       
   174  * @see image_image_default_styles()
       
   175  */
       
   176 function hook_image_default_styles() {
       
   177   $styles = array();
       
   178 
       
   179   $styles['mymodule_preview'] = array(
       
   180     'label' => 'My module preview',
       
   181     'effects' => array(
       
   182       array(
       
   183         'name' => 'image_scale',
       
   184         'data' => array('width' => 400, 'height' => 400, 'upscale' => 1),
       
   185         'weight' => 0,
       
   186       ),
       
   187       array(
       
   188         'name' => 'image_desaturate',
       
   189         'data' => array(),
       
   190         'weight' => 1,
       
   191       ),
       
   192     ),
       
   193   );
       
   194 
       
   195   return $styles;
       
   196 }
       
   197 
       
   198  /**
       
   199   * @} End of "addtogroup hooks".
       
   200   */