向图像 GD 添加填充
Add padding to image GD
所以我正在制作黑色背景的图像。我的任务是在内部图像周围添加白色边框,在边框和图像之间填充 2px。
- 正在上传图片
- 然后我在它周围创建白色边框。
- 然后我用上传图片的更大宽度和高度创建黑色背景(图片)。
- 最后我将带有边框的原始图像添加到创建的黑色图像的中心。
所以我卡在了第二点,即创建白色边框的地方。我的所有代码如下所示:
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);
结果:
所以我正在制作黑色背景的图像。我的任务是在内部图像周围添加白色边框,在边框和图像之间填充 2px。
- 正在上传图片
- 然后我在它周围创建白色边框。
- 然后我用上传图片的更大宽度和高度创建黑色背景(图片)。
- 最后我将带有边框的原始图像添加到创建的黑色图像的中心。
所以我卡在了第二点,即创建白色边框的地方。我的所有代码如下所示:
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);
结果: