Laravel 4.1, как сравнить высоту и ширину изображения в функции

Я пытаюсь определить, каким образом изображение должно быть обрезано, чтобы оно идеально соответствовало квадратному изображению профиля пользователя.

Я обнаружил пакет Laravel «изображение для вмешательства», но, насколько я вижу, он не предлагает функцию для сравнения того, является ли изображение горизонтальным или вертикальным.

http://intervention.olivervogel.net/

Есть ли хороший способ определить, является ли изображение квадратным, горизонтальным или вертикальным, прежде чем изменять его размер и обрезать?

Вот что я делаю в данный момент:

$img->resize(400, null, true)->crop(400, 400);

Очевидно, что он отлично работает для квадратов и довольно хорошо работает для вертикальных изображений, но не очень хорошо для горизонтальных изображений.

Любая помощь приветствуется.

Спасибо!


person patrick    schedule 17.01.2014    source источник
comment
Я бы лично использовал скрипт JS, чтобы определить это. Одна секунда.   -  person Nicholas Hazel    schedule 17.01.2014
comment
Добавлен ответ, чтобы определить, что вы хотите сделать. Все, что вам нужно было бы сделать в противном случае, это включить код add css, который я предоставил в предыдущем вопросе, который вы разместили для каждого условного выражения. Я бы установил класс horizontal, класс vertical и класс square. Нравится эта скрипта. Вам нужно будет определить классы в CSS   -  person Nicholas Hazel    schedule 17.01.2014


Ответы (2)


Итак, вот мой взгляд на это.

http://jsfiddle.net/SinisterSystems/PD4a2/1/

HTML:

<img id="img1" src="http://hdwallpaper2013.com/wp-content/uploads/2013/02/Download-Flower-Background-Images-HD-Wallpaper.jpg" />

<img id="img2" src="http://1.bp.blogspot.com/_74so2YIdYpM/TEd09Hqrm6I/AAAAAAAAApY/rwGCm5_Tawg/s1600/tall%2Bcopy.jpg" />

<img id="img3" src="http://upload.wikimedia.org/wikipedia/commons/8/89/Love_Heart_symbol_square.svg" />

CSS:

img {
    max-width:500px;
    max-height:500px;
    border:1px solid #000;
}

JavaScript:

function findSize(x){
    var h = x.height();
    var w = x.width();
    if(h<w){
       alert("Image is wider than it is tall.");
    } else if(w<h){
       alert("Image is taller than it is tall.");
    } else {
       alert("Image is square.");
    }
}
findSize($('#img1'));
findSize($('#img2'));
findSize($('#img3'));

Дает вам окончательное сравнение того, какие значения выше, шире или квадратнее.

Все, что вам нужно было бы сделать в противном случае, это включить код add css, который я предоставил в предыдущем вопросе, который вы разместили для каждого условного выражения. Я бы установил класс horizontal, класс vertical и класс square. Как эта скрипта. Вам нужно будет определить классы в CSS

Конечно, я просто установил цвет границы, но на этом этапе вы можете делать все, что захотите.

person Nicholas Hazel    schedule 17.01.2014
comment
Ваши ответы, безусловно, лучшие, которые у меня были на данный момент. Я хотел бы проголосовать за это несколько раз. Большое спасибо! - person patrick; 17.01.2014
comment
только что сделал так. Если вы хотите взглянуть на еще один из моих вопросов, я был бы счастлив. Просто если вы хотите, конечно. stackoverflow.com/questions/21200492 / - person patrick; 18.01.2014

Вы можете использовать getimagesize($link), который возвращает массив с шириной и высотой изображения. Затем просто проверьте горизонтальность, вертикаль или квадрат, используя:

<?php
function WvsH ($link) {
    $size = getimagesize($link);
    if ($size[0] < $size[1]) {
        return 'vertical';
    }
    else if ($size[1] < $size[0]) {
        return 'horizontal';
    }
    else {
        return 'square';
    }
}
?>

Конечно, это при условии, что ссылка существует.

person Anonymous    schedule 17.01.2014
comment
Пожалуйста. Он должен работать для любого файла GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM или WBMP. - person Anonymous; 17.01.2014