WordPress.org

Make WordPress Core

Ticket #5911: 5911-28.diff

File 5911-28.diff, 5.8 KB (added by andy, 10 years ago)

use array(width, height) sizes in new image funcs

  • wp-includes/post-template.php

     
    370370}
    371371
    372372// get an attachment page link using an image or icon if possible
    373 function wp_get_attachment_link($id = 0, $size = 'thumbnail', $permalink = false) {
     373function wp_get_attachment_link($id = 0, $size = 'thumbnail', $permalink = false, $icon = false) {
    374374        $_post = & get_post( intval($id) );
    375375
    376376        if ( ('attachment' != $_post->post_type) || !$url = wp_get_attachment_url($_post->ID) )
     
    381381
    382382        $post_title = attribute_escape($_post->post_title);
    383383
    384         $link_text = wp_get_attachment_image($id, $size);
     384        $link_text = wp_get_attachment_image($id, $size, $icon);
    385385        if ( !$link_text )
    386386                $link_text = $_post->post_title;
    387387
  • wp-includes/media.php

     
    55// scale down the default size of an image so it's a better fit for the editor and theme
    66function image_constrain_size_for_editor($width, $height, $size = 'medium') {
    77
    8         if ( $size == 'thumb' ) {
     8        if ( is_array($size) ) {
     9                $max_width = $size[0];
     10                $max_height = $size[1];
     11        }
     12        elseif ( $size == 'thumb' || $size == 'thumbnail' ) {
    913                $max_width = intval(get_option('thumbnail_size_w'));
    1014                $max_height = intval(get_option('thumbnail_size_h'));
    1115                // last chance thumbnail size defaults
     
    7579                        $height = $info[1];
    7680                }
    7781        }
    78         elseif ( isset($meta['width'], $meta['height']) ) {
     82        if ( !$width && !$height && isset($meta['width'], $meta['height']) ) {
    7983                // any other type: use the real image and constrain it
    8084                list( $width, $height ) = image_constrain_size_for_editor( $meta['width'], $meta['height'], $size );
    8185        }
     
    250254function image_get_intermediate_size($post_id, $size='thumbnail') {
    251255        if ( !$imagedata = wp_get_attachment_metadata( $post_id ) )
    252256                return false;
    253                
    254         if ( empty($imagedata['sizes'][$size]) )
     257
     258        // get the best one for a specified set of dimensions
     259        if ( is_array($size) && !empty($imagedata['sizes']) ) {
     260                foreach ( $imagedata['sizes'] as $_size => $data ) {
     261                        // already cropped to width or height; so use this size
     262                        if ( ( $data['width'] == $size[0] && $data['height'] <= $size[1] ) || ( $data['height'] == $size[1] && $data['width'] <= $size[0] ) ) {
     263                                $file = $data['file'];
     264                                list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );
     265                                return compact( 'file', 'width', 'height' );
     266                        }
     267                        // add to lookup table: area => size
     268                        $areas[$data['width'] * $data['height']] = $_size;
     269                }
     270                if ( !$size || !empty($areas) ) {
     271                        // find for the smallest image not smaller than the desired size
     272                        ksort($areas);
     273                        foreach ( $areas as $_size ) {
     274                                $data = $imagedata['sizes'][$_size];
     275                                if ( $data['width'] >= $size[0] || $data['height'] >= $size[1] ) {
     276                                        $file = $data['file'];
     277                                        list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );
     278                                        return compact( 'file', 'width', 'height' );
     279                                }
     280                        }
     281                }
     282        }
     283
     284        if ( is_array($size) || empty($size) || empty($imagedata['sizes'][$size]) )
    255285                return false;
    256286               
    257287        return $imagedata['sizes'][$size];
     
    259289
    260290// get an image to represent an attachment - a mime icon for files, thumbnail or intermediate size for images
    261291// returns an array (url, width, height), or false if no image is available
    262 function wp_get_attachment_image_src($attachment_id, $size='thumbnail') {
     292function wp_get_attachment_image_src($attachment_id, $size='thumbnail', $icon = false) {
    263293       
    264294        // get a thumbnail or intermediate image if there is one
    265295        if ( $image = image_downsize($attachment_id, $size) )
    266296                return $image;
    267297
    268         if ( $src = wp_mime_type_icon($attachment_id) ) {
     298        if ( $icon && $src = wp_mime_type_icon($attachment_id) ) {
    269299                $icon_dir = apply_filters( 'icon_dir', ABSPATH . WPINC . '/images/crystal' );
    270300                $src_file = $icon_dir . '/' . basename($src);
    271301                @list($width, $height) = getimagesize($src_file);
     
    276306}
    277307
    278308// as per wp_get_attachment_image_src, but returns an <img> tag
    279 function wp_get_attachment_image($attachment_id, $size='thumbnail') {
     309function wp_get_attachment_image($attachment_id, $size='thumbnail', $icon = false) {
    280310
    281311        $html = '';
    282         $image = wp_get_attachment_image_src($attachment_id, $size);
     312        $image = wp_get_attachment_image_src($attachment_id, $size, $icon);
    283313        if ( $image ) {
    284314                list($src, $width, $height) = $image;
    285315                $hwstring = image_hwstring($width, $height);
     316                if ( is_array($size) )
     317                        $size = join('x', $size);
    286318                $html = '<img src="'.attribute_escape($src).'" '.$hwstring.'class="attachment-'.attribute_escape($size).'" />';
    287319        }
    288320       
     
    322354                <div class='gallery'>");
    323355
    324356        foreach ( $attachments as $id => $attachment ) {
    325                 $link = get_the_attachment_link($id, false, array(128, 96), true);
     357                $link = wp_get_attachment_link($id, 'thumbnail', true);
    326358                $output .= "
    327359                        <div>
    328360                                $link
     
    358390        $k = $prev ? $k - 1 : $k + 1;
    359391
    360392        if ( isset($attachments[$k]) )
    361                 echo get_the_attachment_link($attachments[$k]->ID, true, array(128, 96), true);
     393                echo wp_get_attachment_link($attachments[$k]->ID, 'thumbnail', true);
    362394}
    363395
    364396?>
  • wp-admin/edit-attachment-rows.php

     
    3939
    4040        case 'icon':
    4141                ?>
    42                 <td class="media-icon"><?php echo get_the_attachment_link($post->ID, false, array(48,48)); ?></td>
     42                <td class="media-icon"><?php echo wp_get_attachment_link($post->ID, array(60, 40), false, true); ?></td>
    4343                <?php
    4444                // TODO
    4545                break;