כפיית קרופ של תמונות קטנות

איך להכריח חיתוך תמונה לממדים מדויקים.

הסניפט הבא חשוב כל כך, עד שלא מובן מדוע וורדפרס בעצמם לא התייחסו לסוגיה זו.

כאשר וורדפרס מבצע חיתוך תמונה לממדים חדשים (Resize) – קיימות שתי שיטות חיתוך;
הראשונה – חיתוך למידות מדויקות (Crop).
האחרת – חיתוך תוך שמירה על פרופורציות התמונה.

הסניפט עוסק בבעיה הנגזרת מהשיטה הראשונה, והיא;
המערכת חותכת למידות המדויקות אך ורק כאשר התמונה שהמשתמש העלה גדולה יותר מהממדים שהוגדרו.
לדוגמה, אם הממדים שהוגדרו לקרופ הם 700×700 והגולש העלה תמונה 589×307 – וורדפרס לא תיצור קרופ של 700×700, וכך אם נעשה שימוש בתמונה עם ממדים אלו (בדף קטגוריה למשל) – תוצג התמונה המקורית שהועלתה, והיא לא תהיה פרופורציונלית מן הסתם.

אם נוסיף את הסניפט הזה לקובץ הפונקציות של התבנית – יבוצע חיתוך מדויק למה שהוגדר לכל תמונה:

// force small images crop to large
function lenix_binary_thumbnail_upscale( $default, $orig_w, $orig_h, $new_w, $new_h, $crop ) {
    if ( !$crop ) return null; 
    $aspect_ratio = $orig_w / $orig_h;
    $size_ratio = max($new_w / $orig_w, $new_h / $orig_h);
    $crop_w = round($new_w / $size_ratio);
    $crop_h = round($new_h / $size_ratio);
    $s_x = floor( ($orig_w - $crop_w) / 2 );
    $s_y = floor( ($orig_h - $crop_h) / 2 );
    return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
}
add_filter( 'image_resize_dimensions', 'lenix_binary_thumbnail_upscale', 10, 6 );