GD为图像添加边框不起作用

时间:2015-09-17 13:20:04

标签: php gd

所以我有PHP class,我试图在上传的图片周围添加空白边框:

private function __draw_white_border()
{
    // get source image and dimensions.
    $src = $this->file_data['im'];
    $src_w = imagesx($src);
    $src_h = imagesy($src);
    // create destination image with dimensions increased from $src for borders.
    $dest_w = $src_w + 10;
    $dest_h = $src_h + 10;
    $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, 5, 5, 0, 0, $src_w, $src_h);
}

这个功能在不在课堂上时效果很好但是这个课程不起作用。似乎这个功能没有保存图像或其他东西,我不知道..它应该从$this->file_data['im']加载图像我认为并保存到同一目的地以进行进一步的操作。这里的问题在哪里?

2 个答案:

答案 0 :(得分:2)

您需要创建2个图像并将主图像叠加在稍大的第二个图像上。这样,在主图像的边缘周围可以看到较大的图像,使其看起来像边框。

http://php.net/manual/en/function.imagecopy.php

我用它来正确分层图像。如果目标图像较大,则说100x100px。源图像为80x80px。您将在源图像的x和y上添加10,将源图像放在100x100px图像的中心。如果100x100px图像是纯黑色图像,则会生成干净的黑色边框

答案 1 :(得分:0)

在运行此方法后,您不会将修改后的图像放回到可以再次到达的位置。此代码(请参阅最后一行)将其放回原始图像的位置。

private function __draw_white_border()
{
    // get source image and dimensions.
    $src = $this->file_data['im'];
    $src_w = imagesx($src);
    $src_h = imagesy($src);
    // create destination image with dimensions increased from $src for borders.
    $dest_w = $src_w + 10;
    $dest_h = $src_h + 10;
    $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, 5, 5, 0, 0, $src_w, $src_h);

    $this->file_data['im'] = $dest;
}