@wagwandude

Как уместить изображения GD?

Здравствуйте.

Написал с помощью документации по стандартной библиотеки PHP GD данный код:
// Image

$image = imagecreatefromjpeg('http://i.imgur.com/BMgG30x.jpg');
$w = imagesx($image);
$h = imagesy($image);

// Border

$border = imagecreatefrompng('https://www.w3schools.com/css/border.png');
$bw = 28;
$bh = 28;

// Vertical

$verticalX = 0;
$verticalY = 28;

while ($verticalY < $h) {
    // Left
    imagecopy($image, $border, $verticalX, $verticalY, 0, 27, $bw, $bh);

    // Right
    imagecopy($image, $border, $w - 28, $verticalY, 0, 27, $bw, $bh);

    $verticalY += 28;
}

// Horizontal

$horizontalX = 28;
$horizontalY = 0;

while ($horizontalX < $w) {
    // Top
    imagecopy($image, $border, $horizontalX, $horizontalY, 0, 27, $bw, $bh);

    // Bottom
    imagecopy($image, $border, $horizontalX, $h - 28, 0, 27, $bw, $bh);

    $horizontalX += 28;
}

// Left top
imagecopy($image, $border, 0, 0, 0, 0, $bw, $bh);

// Right top
imagecopy($image, $border, $w - 28, 0, 0, 0, $bw, $bh);

// Right bottom
imagecopy($image, $border, $w - 28, $h - 28, 0, 0, $bw, $bh);

// Left bottom
imagecopy($image, $border, 0, $h - 28, 0, 0, $bw, $bh);

// Output
header('Content-Type: image/png');
imagepng($image);

imagedestroy($image);
imagedestroy($border);


Который добавляет обводку вокруг изображения, но возникла проблема:
fc41b69bcef07863fd8b0a22058e3298.png

Как решить подобную проблему?
Будет ли лучшим вариантом пропорционально уменьшить ромбики до размеров, которые уместятся по горизонтали и по вертикали?
Если да, то как лучше это сделать?

Высчитывал так:
// Border width

$x1 = $w;
$x2 = 28;
$x3 = $x1 / $x2;
$x4 = $x1 - $x3 * $x2;
$x5 = $x4 / $x3;
$x2 = $x2 + $x5;

$bw = $x2;
 
// Border height

$y1 = $h;
$y2 = 28;
$y3 = $y1 / $y2;
$y4 = $y1 - $y3 * $y2;
$y5 = $y4 / $y3;
$y2 = $y2 + $y5;

$bh = $y2;


Но значение не изменилось, подскажите в чем проблема?
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
В общем-то, вариантов не много:
- либо ресайзить Лену ($w = round($w/28) * 28),
- либо ресайзить ромбики ($bw = $w / round($w/28)).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы