Доброго времени суток уважаемые форумчане. Всех с прошедшим новым годом, рождеством и наступающим старым. У меня очередная (пока для меня не разрешимая) проблема
В общем суть в следующем. Задумал я сделать скрипт который бы мне вписывал все картинки в определенную ширину, при этом чтобы высота у них была одинаковая, т.е. красивое расположение картинок в один ряд.
Как я решил эту задачу: Допустим есть массив из нескольких картинок разного размера. Нужно все их в вписать в нужную нам ширину, а чтобы не получился забор, нужно чтобы высота всех была одинаковая.
Делал я это так. С помощью _GDIPlus_ImageGetDimension я узнавал ширину и высоту каждой картинки в массиве. Далее в цикле от 1 и до тех пор пока общая ширина не будет равна нужной, я прибавлял высоту всех картинок и высчитывал полученную ширину
как только общая ширина равнялась нужной мне, я делал выход из цикла, а текущее значение цикла и было нужной мне высотой.
потом формировал HTML сроку, к примеру
где 52 как раз и есть высчитанное значение.
Все бы хорошо, если этих картинок от 1 до 4 или 5, но если их 7,8, 9 или 10 то они получались слишком мелкие. И вот теперь передо мной стоит задача. Если картинок больше 5, пусть они будут в два ряда, так же с одинаковой высотой в каждом ряду и вписанные в общую ширину.
Вот часть скрипта которая отвечает за вывод картинок в одну линию.
На входе $1 - Массив из имен всех картинок
$width - ширина в которую будем вписывать все картинки
На выходе: $y - общая высота для всех картинок.
Есть какие нибудь идеи ?
В общем суть в следующем. Задумал я сделать скрипт который бы мне вписывал все картинки в определенную ширину, при этом чтобы высота у них была одинаковая, т.е. красивое расположение картинок в один ряд.
Как я решил эту задачу: Допустим есть массив из нескольких картинок разного размера. Нужно все их в вписать в нужную нам ширину, а чтобы не получился забор, нужно чтобы высота всех была одинаковая.
Делал я это так. С помощью _GDIPlus_ImageGetDimension я узнавал ширину и высоту каждой картинки в массиве. Далее в цикле от 1 и до тех пор пока общая ширина не будет равна нужной, я прибавлял высоту всех картинок и высчитывал полученную ширину
как только общая ширина равнялась нужной мне, я делал выход из цикла, а текущее значение цикла и было нужной мне высотой.
потом формировал HTML сроку, к примеру
Код:
<a href="http://site.ru/wp-content/uploads/_iyltz-fmg0.jpg"><img class="alignright" title="_iyltz-fmg0.jpg" src="/wp-content/uploads/_iyltz-fmg0.jpg" alt="" height="52" /></a><a href="http://site.ru/wp-content/uploads/qepeet1a8nq.jpg"><img class="alignright" title="qepeet1a8nq.jpg" src="/wp-content/uploads/qepeet1a8nq.jpg" alt="" height="52" /></a><a href="http://site.ru/wp-content/uploads/hizj9fz-iqk.jpg"><img class="alignright" title="hizj9fz-iqk.jpg" src="/wp-content/uploads/hizj9fz-iqk.jpg" alt="" height="52" /></a><a href="http://site.ru/wp-content/uploads/rfhkc-5lfre.jpg"><img class="alignright" title="rfhkc-5lfre.jpg" src="/wp-content/uploads/rfhkc-5lfre.jpg" alt="" height="52" /></a><a href="http://site.ru/wp-content/uploads/vrba-s9swpi.jpg"><img class="alignright" title="vrba-s9swpi.jpg" src="/wp-content/uploads/vrba-s9swpi.jpg" alt="" height="52" /></a><a href="http://site.ru/wp-content/uploads/cdyrhlfohd4.jpg"><img class="alignright" title="cdyrhlfohd4.jpg" src="/wp-content/uploads/cdyrhlfohd4.jpg" alt="" height="52" /></a>
Все бы хорошо, если этих картинок от 1 до 4 или 5, но если их 7,8, 9 или 10 то они получались слишком мелкие. И вот теперь передо мной стоит задача. Если картинок больше 5, пусть они будут в два ряда, так же с одинаковой высотой в каждом ряду и вписанные в общую ширину.
Вот часть скрипта которая отвечает за вывод картинок в одну линию.
На входе $1 - Массив из имен всех картинок
$width - ширина в которую будем вписывать все картинки
На выходе: $y - общая высота для всех картинок.
Код:
$1 = _StringBetween($post_text,'title="','" src') ; Заносим в массив имена всех картинок
$width = 600
_GDIPlus_Startup()
For $y = 1 To 250 ; Цикл на высоту от 1 до 250 точек (чтобы максимальная высота не превышала 250 точек)
$tmp = 0
For $i = 0 To UBound ($1) - 1 ; Цикл на все картинки
$hImage = _GDIPlus_ImageLoadFromFile($Path & $1[$i]) ; Получаем ID картинки
$aSize = _GDIPlus_ImageGetDimension($hImage) ; Получаем высоту и ширину картинки $aSize[0], $aSize[1]
If Not IsArray ($aSize) Then
MsgBox (4096, "Ошибка")
Exit
EndIf
$nx = Floor (resize ($aSize[0], $aSize[1], $y)) ; Получаем ширину изображения для высоты Y
$tmp = $tmp + $nx
_GDIPlus_ImageDispose($hImage)
Next
If $tmp >= $width Then ExitLoop ; Если общая ширина картинок >= ширине сайта, выходим из цикла. $y = высота картинок
Next
_GDIPlus_ShutDown ()
Func resize ($ow, $oh, $nh) ; Функция масштабирования изображения (ширина, высота, новая высота) возвращает получившуюся ширину
$x = (($ow * $nh) / $oh)
Return $x
EndFunc
Есть какие нибудь идеи ?