Генерация миниатюр PHP - PullRequest
       10

Генерация миниатюр PHP

0 голосов
/ 05 августа 2011

Я пытаюсь создать эскизы изображений, загружаемых моими пользователями. Я получил базовую функциональность, чтобы мой класс миниатюр генерировал миниатюру, которая составляет 50% ширины и высоты исходного изображения. Тем не менее, я хотел бы расширить его функциональность и установить жесткий предел для миниатюр, который будет больше, чем 400px с обеих сторон после 50% сокращения.

Это то, что я имею до сих пор:

$x = $image_info[0]; // width of original image
$y = $image_info[1]; // height of original image
$x_t = $x/2; // width of 50% thumbnail
$y_t = $y/2; // height of 50% thumbnail
$biggest = ($x_t > $y_t) ? $x_t : $y_t; // determine the biggest side of the thumbnail

if($biggest > 400)
{
    // Enforce a 400px limit here

    /// somehow :(
}

С этим жестким ограничением я хочу, чтобы исходное изображение было уменьшено так, чтобы ни одна сторона не превышала 400px, и я хочу, чтобы другая сторона была уменьшена относительно, чтобы изображение не выглядело искаженным.

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

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Вы должны вычислить коэффициент масштабирования:

$factor = $biggest / 400;  // if 503, then factor = 1.2575;

$new_x = $x / $factor;
$new_y = $y / $factor;

и использовать эти два новых измерения для своего масштабирования.Это сократит любую сторону, наибольшую из $, до 400, и пропорционально уменьшит другое измерение до значения, меньшего 400.

0 голосов
/ 05 августа 2011

Вам придется проверять каждую длину, а не обе сразу:

if ($x > 400) {
    $x_t = 400;
    $y_t = $y * (400 / $x);
}
if ($y > 400) {
    ...

Если, например, $ x равен 600, вычисление станет $ y_t = $ y * (400/600),тем самым уменьшая $ y до 2/3 от его первоначального значения.

И добавьте то же условие для стороны $ y.Кроме того, вы можете применить вычисления одновременно, если ни одна из сторон не может быть больше 400.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...