Миниатюры изображений в PHP с определенной высотой и шириной
Создать треки: Вторая часть
Во второй части сценарий миниатюр, или thumbnail, будет улучшен так, что высота и ширина миниатюры будут заданы для всех миниатюр, сохраняя пропорции исходных изображений.
Действительно, недостатком сценария thumbnail первой части было изменение размера изображения на заданную высоту или ширину, но другое измерение оставалось переменным, что не позволяет создавать галереи.
Для достижения этого результата, предпочтительного на веб-странице, размер изображения будет изменен, чтобы создать промежуточную миниатюру, которая сохраняет пропорции, а затем обрезать либо по высоте, либо по ширины, в зависимости от формы исходного изображения.
Расчет размеров промежуточной миниатюры
Промежуточная миниатюра будет иметь ширину или высоту отображаемой миниатюры в зависимости от высоты или ширины, которая меньше другого размера.
Размеры громкости
В демо габариты составляют 150 в высоту и 140 в ширину. Мы могли бы выбрать любые ценности.
$thumbh = 150; $thumbw = 140;
Выбор формулы
Нужно ли обрезать по высоте или по ширины?
Если промежуточная миниатюра имеет высоту 150, то ее ширина будет больше или равна этому значению.
Если его ширина составляет 140, то его высота должна быть больше или равна.
Чтобы предвидеть или рассчитать соотношение высоты и ширины изображения и миниатюры.
$ratio = $h / $w; $nratio = $thumbh / $thumbw;
Если соотношение, исходная доля, больше нрацио, доля финальной миниатюры, то нужно обрезать по высоте. На ширину в другом случае.
А если скрежетать по высоте, то размер изображения меняется на ширину.
Изменение ширины
В случае, если соотношение превышает нрацио, то есть исходное изображение слишком высоко по сравнению с миниатюрой, которую нужно выполнить, создается промежуточная миниатюра на основе нужной ширины:
$x = intval($w * $nh / $h);
if ($x < $nw)
{
$nh = intval($h * $nw / $w);
}
else
{
$nw = $x;
}
Определяется x, промежуточная ширина путем изменения размера изображения на формулу w * nh/h.
Если x меньше нужной ширины, размер изображения на высоте меняется на формулу nh = h * nw/w.
В противном случае мы сохраняем высоту и задаем для новой ширины nw промежуточное значение x.
Изменить высоту
Если новое соотношение нрацио больше, чем исходное отношение, то изображение шире, чем выше, его нужно уменьшить, исходя из высоты, а затем обрезать по ширины.
$x = intval($h * $nw / $w);
if ($x < $nh)
{
$nw = intval($w * $nh / $h);
}
else
{
$nh = $x;
}
Расчеты переворачиваются.
Создать промежуточное изображение
Функции PHP первой части снова используются для уменьшения изображения:
$resimage = imagecreatefromjpeg($oldname); $newimage = imagecreatetruecolor($nw, $nh); imageCopyResampled($newimage, $resimage,0,0,0,0,$nw, $nh, $w, $h);
Но кроме того, нужно обрезать изображение, поэтому создается пустое изображение, на которое копируется часть промежуточной миниатюры.
$viewimage = imagecreatetruecolor($thumbw, $thumbh); imagecopy($viewimage, $newimage, 0, 0, 0, 0, $nw, $nh);
Остается только сохранить миниатюру
В демо таблица изображений отсканирована структурой foreach. См. полный исходный код.
Thumbnail Gallery, созданная с использованием сценария
Щелкните для просмотра исходного изображения.
Исходный код
- См. полный сценарий миниатюры PHP.
- Загрузите архив со сценарием и изображениями.