Поэтому я делаю изображение на черном фоне. Мой квест состоит в том, чтобы добавить белую рамку вокруг изображения с отступом 2 пикселя между рамкой и изображением.
Так что я застрял во второй точке, где создается белая граница. Мой весь код выглядит так:
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 белым цветом?
Вот очень быстрый пример того, что вы должны быть в состоянии адаптироваться к вашим потребностям:
<?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);
Результат:
Других решений пока нет …