2014-10-04 3 views
0

У меня проблема с сайтом, который я создаю, который содержит страницу галереи. Макет, который им требуется, состоит в том, чтобы иметь переменное количество изображений в строке (максимум 4 или меньше), а для всех этих изображений - всю ширину элемента контейнера (для этого случая я буду идти с 1100px), но все они имеют одинаковое соотношение высоты и размера и не обрезать изображения.PHP - изменение размера изображения в соответствии с контейнером фиксированного размера без обрезки их

Вот пример того, что я имею в виду (где цветные блоки представляют изображения): http://imgur.com/BdokhwE

Я был бы признателен за любую помощь в создании функции PHP, которая может принять размеры 4 данных изображений и рассчитать значения ширины и высоты для каждого изображения, чтобы они могли плотно вписаться в контейнер, который я могу применить с некоторым встроенным css.

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

Большое спасибо!

ответ

0

Вы можете использовать элемент стиля HTML.

это сделало бы их всю высоту, а соотношение сторон оставалось бы таким же, как и в более крупной версии, однако вы не сможете сделать 4/ряд без обрезки.

+0

Если вы запустили это на изображении, которое было, скажем, 5000x5000, вы не сохранили бы пропускную способность вообще ... но это одно решение. –

+0

Спасибо за ответы, но я не думаю, что это может решить только один css. Вот сайт, у которого есть макет, который я получаю после: https: // paddle8.com/work/aime-jules-dalou/39388-moissonneur-affutant-sa-faux-reaper-sharpening-his-scythe (прокрутите страницу вниз, и вы увидите, что я имею в виду) –

+0

@IngwiePhoenix Вы абсолютно правы, и я это знаю, потому что сейчас я работаю над чем-то для художника, который дает мне фотографии, которые являются 5000x5000 – user3648062

0

Если вы не возражаете тратить несколько строк кода, а затем посмотреть здесь: http://php.net/manual/en/function.imagecopyresized.php

Используя эту функцию, с чем-то вроде этого, даст вам очень хороший результат. Ниже псевдокод:

<?php 
// From the manual 
function resizeImage(...) {...} 

function getImage($imageName, $width, $height) { 
    $dir = dirname($imageName); 
    $bImgName = basename($imageName); 
    $newName = "{$dir}/{$width}x{$height}.{$bImgName}"; 
    if(!file_exists($newName)) { 
     resizeImage($newName, $width, $height); 
    } 
    return $newName; 
} 
?> 

Далее, в вашем HTML ...

<div id="myDiv"> <!-- #myDiv { width: 400px; } --> 
    <img src="<?=getImage('img/myCoolPicture.jpeg', 400,400)?>"> 
</div> 

Это в основном получается

img/myCoolPicture.jpeg 

в

img/400x400.myCoolPicture.jpeg 

и даже повторно использовать это тоже!

Я не писал реализацию для resizeImage, это должна быть ваша задача, поскольку я не знаю, с какими форматами и т. П. Вы работаете. Но тот, который указан на странице руководства, должен помочь вам начать работу там.

Идея для этого исходит из кеширования. Вы в основном кэшируете измененные версии, сохраняя их в файловой системе и повторно используя их. Эффективное сокращение количества отправленных данных.

Надеюсь, это поможет. :)

+0

Спасибо за ответ! К сожалению, это действия функции resizeimage, или, скорее, определение того, какими должны быть эти измерения, которые я застрял. Вероятно, я мог бы сформулировать вопрос лучше, но сама проблема заключается не в изменении размера негабаритного изображения (они вряд ли будут такими большими, и я могу установить гарантии для этого в любом случае), это больше о том, что размер должен быть таким, чтобы они точно вписывались в линию от края к краю, и все они имели одинаковую высоту –

Смежные вопросы