2015-08-26 4 views
0

Так что я делаю изображение с черным фоном. Мой квест состоит в том, чтобы добавить белую рамку вокруг изображения внутри с 2px padding между границей и изображением.Добавить дополнение к изображению GD

  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

все еще ищет идеи –

+0

Вы хотите добавьте границу без покрытия какого-либо изображения (так что увеличьте размер холста) или закройте края изображения рамкой (так что сохраните размер холста одинаково)? – timclutton

+0

Я хочу добавить границу вокруг изображения, поэтому без покрытия изображения –

ответ

1

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

<?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; 

Вход:

enter image description here

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

enter image description here

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

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

Результат:

enter image description here

+0

вот что она сказала. большое спасибо! –

+0

, но я хочу спросить вас - вы создаете изображение из источника. Но как начать, если я загрузил его до '$ this-> image_inside'? мой код для загрузки: [code example] (http://paste.ofcode.org/rJ86zYeVj25kjEwLhSWjwV), и я хочу начать с этого изображения. И закончите с сохранением результата в '$ this-> image_inside' –

+0

' $ this-> image_inside' является ресурсом GD, поэтому вы можете просто заменить '$ src'' $ this-> image_inside' в моем примере. Чтобы сохранить результат в '$ this-> image_inside', просто укажите его на тот же конечный ресурс изображения:' $ this-> image_inside = $ dest; '. – timclutton

Смежные вопросы