向图像 GD 添加填充

Add padding to image GD

所以我正在制作黑色背景的图像。我的任务是在内部图像周围添加白色边框,在边框和图像之间填充 2px。

  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 白色制作渐变边框?

这是一个非常简单的示例,您应该能够根据自己的需要进行调整:

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

结果: