Changeset 10552


Ignore:
Timestamp:
04/21/11 23:55:20 (9 years ago)
Author:
patdenice
Message:

feature:2273
Ability to crop thumbnail (fixed size)

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/include/functions_upload.inc.php

    r10383 r10552  
    2626// add default event handler for image and thumbnail resize 
    2727add_event_handler('upload_image_resize', 'pwg_image_resize', EVENT_HANDLER_PRIORITY_NEUTRAL, 7); 
    28 add_event_handler('upload_thumbnail_resize', 'pwg_image_resize', EVENT_HANDLER_PRIORITY_NEUTRAL, 7); 
     28add_event_handler('upload_thumbnail_resize', 'pwg_image_resize', EVENT_HANDLER_PRIORITY_NEUTRAL, 9); 
    2929 
    3030function get_upload_form_config() 
     
    8989      'can_be_null' => false, 
    9090      'error_message' => l10n('The thumbnail image quality must be a number between %d and %d'), 
     91      ), 
     92 
     93    'thumb_crop' => array( 
     94      'default' => false, 
     95      'can_be_null' => false, 
     96      ), 
     97 
     98    'thumb_follow_orientation' => array( 
     99      'default' => true, 
     100      'can_be_null' => false, 
    91101      ), 
    92102   
     
    327337    $conf['upload_form_thumb_maxheight'], 
    328338    $conf['upload_form_thumb_quality'], 
    329     true 
     339    true, 
     340    $conf['upload_form_thumb_crop'], 
     341    $conf['upload_form_thumb_follow_orientation'] 
    330342    ); 
    331343   
     
    518530} 
    519531 
    520 function pwg_image_resize($result, $source_filepath, $destination_filepath, $max_width, $max_height, $quality, $strip_metadata=false) 
     532function pwg_image_resize($result, $source_filepath, $destination_filepath, $max_width, $max_height, $quality, $strip_metadata=false, $crop=false, $follow_orientation=true) 
    521533{ 
    522534  if ($result !== false) 
     
    530542  if (is_imagick() and $extension != 'gif') 
    531543  { 
    532     return pwg_image_resize_im($source_filepath, $destination_filepath, $max_width, $max_height, $quality, $strip_metadata); 
     544    return pwg_image_resize_im($source_filepath, $destination_filepath, $max_width, $max_height, $quality, $strip_metadata, $crop, $follow_orientation); 
    533545  } 
    534546  else 
    535547  { 
    536     return pwg_image_resize_gd($source_filepath, $destination_filepath, $max_width, $max_height, $quality); 
    537   } 
    538 } 
    539  
    540 function pwg_image_resize_gd($source_filepath, $destination_filepath, $max_width, $max_height, $quality) 
     548    return pwg_image_resize_gd($source_filepath, $destination_filepath, $max_width, $max_height, $quality, $crop, $follow_orientation); 
     549  } 
     550} 
     551 
     552function pwg_image_resize_gd($source_filepath, $destination_filepath, $max_width, $max_height, $quality, $crop=false, $follow_orientation=true) 
    541553{ 
    542554  if (!function_exists('gd_info')) 
     
    577589  $source_width  = imagesx($source_image);  
    578590  $source_height = imagesy($source_image); 
    579    
     591 
     592  // Crop 
     593  if ($crop) 
     594  { 
     595    $coord = get_crop_coord($source_width, $source_height, $max_width, $max_height, $follow_orientation); 
     596  } 
     597 
    580598  $resize_dimensions = get_resize_dimensions($source_width, $source_height, $max_width, $max_height, $rotation); 
    581599 
     
    596614    0, 
    597615    0, 
    598     0, 
    599     0, 
     616    $crop ? $coord['x'] : 0, 
     617    $crop ? $coord['y'] : 0, 
    600618    $resize_dimensions['width'], 
    601619    $resize_dimensions['height'], 
     
    631649} 
    632650 
    633 function pwg_image_resize_im($source_filepath, $destination_filepath, $max_width, $max_height, $quality, $strip_metadata=false) 
     651function pwg_image_resize_im($source_filepath, $destination_filepath, $max_width, $max_height, $quality, $strip_metadata=false, $crop=false, $follow_orientation=true) 
    634652{ 
    635653  // extension of the picture filename 
     
    647665  $source_width  = $image->getImageWidth(); 
    648666  $source_height = $image->getImageHeight(); 
     667 
     668  // Crop 
     669  if ($crop) 
     670  { 
     671    $coord = get_crop_coord($source_width, $source_height, $max_width, $max_height, $follow_orientation); 
     672    $image->cropImage($source_width, $source_height, $coord['x'], $coord['y']); 
     673  } 
    649674   
    650675  $resize_dimensions = get_resize_dimensions($source_width, $source_height, $max_width, $max_height, $rotation); 
     
    726751 
    727752  return $rotation; 
     753} 
     754 
     755function get_crop_coord(&$source_width, &$source_height, &$max_width, &$max_height, $follow_orientation) 
     756{ 
     757  $x = 0; 
     758  $y = 0; 
     759 
     760  if ($source_width < $source_height and $follow_orientation) 
     761  { 
     762    list($width, $height) = array($max_height, $max_width); 
     763    $max_width = $width; 
     764    $max_height = $height; 
     765  } 
     766 
     767  $img_ratio = $source_width / $source_height; 
     768  $dest_ratio = $max_width / $max_height; 
     769 
     770  if($dest_ratio > $img_ratio) 
     771  { 
     772    $destHeight = round($source_width * $max_height / $max_width); 
     773    $y = round(($source_height - $destHeight) / 2 ); 
     774    $source_height = $destHeight; 
     775  } 
     776  elseif ($dest_ratio < $img_ratio) 
     777  { 
     778    $destWidth = round($source_height * $max_width / $max_height); 
     779    $x = round(($source_width - $destWidth) / 2 ); 
     780    $source_width = $destWidth; 
     781  } 
     782 
     783  return array('x' => $x, 'y' => $y); 
    728784} 
    729785 
  • trunk/admin/photos_add_settings.php

    r8728 r10552  
    7676  $fields[] = 'thumb_maxheight'; 
    7777  $fields[] = 'thumb_quality'; 
    78    
     78  $fields[] = 'thumb_crop'; 
     79  $fields[] = 'thumb_follow_orientation'; 
     80 
    7981  foreach ($fields as $field) 
    8082  { 
  • trunk/admin/themes/default/template/photos_add_settings.tpl

    r9586 r10552  
    1 {footer_script}{literal} 
     1{footer_script} 
     2var width = '{'Width'|@translate}'; 
     3var height = '{'Height'|@translate}'; 
     4var max_width = '{'Maximum Width'|@translate}'; 
     5var max_height = '{'Maximum Height'|@translate}'; 
     6 
     7{literal} 
    28jQuery(document).ready(function(){ 
    39  function toggleResizeFields(prefix) { 
    410    var checkbox = jQuery("#"+prefix+"_resize"); 
    511    var needToggle = jQuery("input[name^="+prefix+"_]").not(checkbox).not(jQuery("#hd_keep")).parents('tr'); 
    6  
    712 
    813    if (jQuery(checkbox).is(':checked')) { 
     
    2227  } 
    2328 
     29  function toggleCropFields(prefix) { 
     30    if (jQuery("#"+prefix+"_crop").is(':checked')) { 
     31      jQuery("#"+prefix+"_width_th").text(width); 
     32      jQuery("#"+prefix+"_height_th").text(height); 
     33      jQuery("#"+prefix+"_follow_orientation_tr").show(); 
     34    } 
     35    else { 
     36      jQuery("#"+prefix+"_width_th").text(max_width); 
     37      jQuery("#"+prefix+"_height_th").text(max_height); 
     38      jQuery("#"+prefix+"_follow_orientation_tr").hide(); 
     39    } 
     40 
     41  } 
     42 
    2443  toggleResizeFields("websize"); 
    2544  jQuery("#websize_resize").click(function () {toggleResizeFields("websize")}); 
     
    2746  toggleResizeFields("hd"); 
    2847  jQuery("#hd_resize").click(function () {toggleResizeFields("hd")}); 
     48 
     49  toggleCropFields("thumb"); 
     50  jQuery("#thumb_crop").click(function () {toggleCropFields("thumb")}); 
    2951 
    3052  function toggleHdFields() { 
     
    82104    <table> 
    83105      <tr> 
    84         <th>{'Maximum Width'|@translate}</th> 
     106        <th><label for="thumb_crop">{'Crop'|@translate}</label></th> 
     107        <td><input type="checkbox" name="thumb_crop" id="thumb_crop" {$values.thumb_crop}></td> 
     108      </tr> 
     109      <tr id="thumb_follow_orientation_tr"> 
     110        <th><label for="thumb_follow_orientation">{'Follow Orientation'|@translate}</label></th> 
     111        <td><input type="checkbox" name="thumb_follow_orientation" id="thumb_follow_orientation" {$values.thumb_follow_orientation}></td> 
     112      </tr> 
     113      <tr> 
     114        <th id="thumb_width_th">{'Maximum Width'|@translate}</th> 
    85115        <td><input type="text" name="thumb_maxwidth" value="{$values.thumb_maxwidth}" size="4" maxlength="4"> {'pixels'|@translate}</td> 
    86116      </tr> 
    87117      <tr> 
    88         <th>{'Maximum Height'|@translate}</th> 
     118        <th id="thumb_height_th">{'Maximum Height'|@translate}</th> 
    89119        <td><input type="text" name="thumb_maxheight" value="{$values.thumb_maxheight}" size="4" maxlength="4"> {'pixels'|@translate}</td> 
    90120      </tr> 
  • trunk/language/en_UK/admin.lang.php

    r10538 r10552  
    826826$lang['Please wait...'] = 'Please wait...'; 
    827827$lang['Ignore All'] = 'Ignore All'; 
     828$lang['Crop'] = 'Crop'; 
     829$lang['Width'] = 'Width'; 
     830$lang['Height'] = 'Height'; 
     831$lang['Follow Orientation'] = 'Follow Orientation'; 
    828832?> 
  • trunk/language/fr_FR/admin.lang.php

    r10538 r10552  
    835835$lang['Unable to dump database.'] = 'Impossible de sauvegarder la base de données.'; 
    836836$lang['Some upgrades are available for extensions.'] = 'Des mises à jour sont disponibles pour les extensions.'; 
    837 $lang['Please wait...'] = 'Please wait...'; 
     837$lang['Please wait...'] = 'Veuillez patienter...'; 
    838838$lang['Ignore All'] = 'Tout ignorer'; 
     839$lang['Crop'] = 'Retailler'; 
     840$lang['Width'] = 'Largeur'; 
     841$lang['Height'] = 'Hauteur'; 
     842$lang['Follow Orientation'] = "Respecter l'orientation"; 
    839843?> 
Note: See TracChangeset for help on using the changeset viewer.