Добавить отступ к изображению GD

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

  1. Загрузка изображения
  2. Затем я создаю вокруг него белую рамку.
  3. Затем я создаю черный фон (изображение) с большей шириной и высотой загружаемого изображения.
  4. В конце я добавляю исходное изображение с рамкой к центру созданного черного изображения.

Так что я застрял во второй точке, где создается белая граница. Мой весь код выглядит так:

public function output()
{
$this->__set_image_size();

# setting temp image location
$this->settings['__temp_image'] = $this->settings['__upload_dir']['temp'] . $this->temp_image_name . '.jpg';

# generating image
$this->__generate_background();
$this->__load_image();
$this->__draw_white_border();
$this->__insert_image_to_wrapper();

# destroy temp image data
//imagedestroy($this->settings['__temp_image']);

return $this->settings;
}

и функция __draw_white_border:

private function __draw_white_border()
{
# draw white border
$color_white = ImageColorAllocate($this->image_inside, 255, 255, 255);
$this->__draw_border($this->image_inside, $color_white, 4);
}

private function __draw_border(&$img, &$color, $thickness)
{
$x = ImageSX($img);
$y = ImageSY($img);
for ( $i = 0; $i < $thickness; $i ++ )
ImageRectangle($img, $i, $i, $x --, $y --, $color);
}

главный вопрос: как добавить отступ между границей и изображением во второй точке списка или как сделать градиентную границу с 2px черным цветом и 4px белым цветом?

0

Решение

Вот очень быстрый пример того, что вы должны быть в состоянии адаптироваться к вашим потребностям:

<?php

// get source image and dimensions.
$src = imagecreatefromstring(file_get_contents('path/to/image'));
$src_w = imagesx($src);
$src_h = imagesy($src);

// create destination image with dimensions increased from $src for borders.
$dest_w = $src_w + 12;
$dest_h = $src_h + 12;
$dest = imagecreatetruecolor($dest_w, $dest_h);

// draw white border (no need for black since new images default to that).
imagerectangle($dest, 1, 1, $dest_w - 2, $dest_h - 2, 0x00ffffff);
imagerectangle($dest, 0, 0, $dest_w - 1, $dest_h - 1, 0x00ffffff);

// copy source image into destination image.
imagecopy($dest, $src, 6, 6, 0, 0, $src_w, $src_h);

// output.
header('Content-type: image/png');
imagepng($dest);
imagedestroy($src);
imagedestroy($dest);
exit;

Входные данные:

введите описание изображения здесь

Результат (обратите внимание, что белая рамка не очевидна из-за белого фона страницы):

введите описание изображения здесь

Если вы хотите, чтобы белая граница была внутренней, просто измените координаты, где вы рисуете:

imagerectangle($dest, 5, 5, $dest_w - 6, $dest_h - 6, 0x00ffffff);
imagerectangle($dest, 4, 4, $dest_w - 5, $dest_h - 5, 0x00ffffff);

Результат:

введите описание изображения здесь

1

Другие решения

Других решений пока нет …