Как проверить размер картинки?

Проблема в том, что существует свой тип миниатюр, который появляется на главной.
Допустим такая функция прописана:

add_theme_support( 'post-thumbnails' );
 if ( function_exists( 'add_image_size' ) ) { 
	add_image_size( 'last-posts-thumb', 0, 160);
}

Миниатюры уменьшаются, через css они подгоняются под нужный блок ещё лучше и вообщем все хорошо. Но как можно заметить, такой размер весьма специфический. Он отлично уменьшает вертикальные картинки, но не горизонтальный (которые нам привычнее).
В связи с этим, я сделал новый тип миниатюр. Например:

	add_image_size( 'last-posts-thumb', 0, 160, true);

Этот новый тип не будет уменьшать картинку, а будет её кадрировать, что решает проблему горизонтальных (16:9, 4:3 и т.д.) картинок.
И всё хорошо, но как перед публикацией миниатюрки проверить какое у неё соотношение сторон, что бы знать какого типа миниатюрку запостить?

3 Комментарии

  1. Есть функция wp_get_attachment_metadata, которая возвращает массив мета-данных вложения.

    $array = wp_get_attachment_metadata( 321 );

    321 – ID вложения
    Как результат, если вложение с ID=321 является картинкой, то $array будет содержать следующие данные:

    Array
    (
        [width] => 640
        [height] => 480
        [hwstring_small] => height='100' width='120'
        [file] => 2011/05/pic.png
        [sizes] => Array
            (
                [thumbnail] => Array
                    (
                        [file] => pic-80x80.png
                        [width] => 80
                        [height] => 80
                    )
    
            )
    
        [image_meta] => Array
            (
                [aperture] => 0
                [credit] => 
                [camera] => 
                 => 
                [created_timestamp] => 0
                [copyright] => 
                [focal_length] => 0
                [iso] => 0
                [shutter_speed] => 0
                [title] => 
            )
    
    )
    

    Из этого массива можно извлечь ширину и высоту оригинального изображения:

    $meta = wp_get_attachment_metadata($id);
    $width = echo $meta['width'];
    $height = echo $meta['height'];
    

    Получив ширину и высоту изображения, вы можете поставить условие:
    – если ширина больше высоты, то выводиться горизонтальная миниатюра,
    – иначе выводится вертикальная миниатюра.

    Остается только получить ID миниатюры поста, и подставить в вышеуказанную функцию.

    p.s. Я не программист, поэтому в коде могут быть ошибки. Я лишь описал логику моих рассуждений по данному вопросу.

  2. Спасибо за старания, но я уже решил проблему. Тут просто от публикации до одобрения нет возможности прокомментировать или отредактировать пост. Принцип тот же. Вот мой код:

    if ( has_post_thumbnail() ) {
    	$thumb_id = get_post_thumbnail_id( $post->ID );
    	$img = wp_get_attachment_image_src( $thumb_id, array(1500,1500) );
    	$width = $img[1];
    	$height = $img[2];
    		if($height>=$width){ ?>
    			
    				< ?php the_post_thumbnail('last-posts-thumb'); ?>
    			
    		< ?php } else { //$height<$width ?>
    			
    				< ?php the_post_thumbnail('last-posts-thumb-4-3'); ?>
    			
    		< ?php }
    

    Миниатюра в моем случае сжимается до 1500x1500, если она меньше этого размера, то не сжимается возвращается оригинал (учитывая то, что фотка выбранная в качестве миниатюры точно меньше это размера). Потому как по дефолту возвращается размер 150x150 (размер 'thumbnail') пришлось прибегнуть к такому методу.

  3. В php есть функция getimagesize($url), которую далее можно разобрать так:

    $image_info = @getimagesize($url); // @ -  проверка true / false
    $size = explode("\"", $image_info['3']); //$size_array[3] - ширина  $size_array[1] - высота
    		$size_w = (int) $size[1];

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*