所以我有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']
加载图像我认为并保存到同一目的地以进行进一步的操作。这里的问题在哪里?
答案 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;
}