imagecopy

(PHP 4, PHP 5, PHP 7, PHP 8)

imagecopy复制图像的一部分

说明

imagecopy(
    GdImage $dst_image,
    GdImage $src_image,
    int $dst_x,
    int $dst_y,
    int $src_x,
    int $src_y,
    int $src_width,
    int $src_height
): bool

src_image 的一部分复制到 dst_image 上,从 src_xsrc_y 坐标开始,宽度为 src_width,高度为 src_height。定义的部分将被复制到 x、y 坐标 dst_xdst_y 上。

参数

dst_image

目标图像资源。

src_image

源图像资源。

dst_x

目标点的 x 坐标。

dst_y

目标点的 y 坐标。

src_x

源点的 x 坐标。

src_y

源点的 y 坐标。

src_width

源宽度。

src_height

源高度。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 说明
8.0.0 dst_imagesrc_image 现在期望 GdImage 实例;之前,期望的是 resource

示例

示例 #1 裁剪 PHP.net 徽标

<?php
// 创建图像实例
$src = imagecreatefromgif('php.gif');
$dest = imagecreatetruecolor(80, 40);

// 复制
imagecopy($dest, $src, 0, 0, 20, 13, 80, 40);

// 输出并从内存中释放
header('Content-Type: image/gif');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);
?>

上面的示例将输出类似于以下内容

Output of example : Cropping the PHP.net logo

参见

添加注释

用户贡献的注释 16 个注释

john at mccarthy dot net
17 年前
这是一个对那个很酷的波浪函数的升级:将图像大小加倍,对其进行波浪处理,然后再次对其进行重采样。这会使波浪更加平滑,并具有抗锯齿效果。

// 非常简单和漂亮!
function wave_region($img, $x, $y, $width, $height,$amplitude = 4.5,$period = 30)
{
// 将图像大小加倍,并创建一个副本
$mult = 2;
$img2 = imagecreatetruecolor($width * $mult, $height * $mult);
imagecopyresampled ($img2,$img,0,0,$x,$y,$width * $mult,$height * $mult,$width, $height);

// 进行波浪处理
for ($i = 0;$i < ($width * $mult);$i += 2)
{
imagecopy($img2,$img2,
$x + $i - 2,$y + sin($i / $period) * $amplitude, // 目标
$x + $i,$y, // 源
2,($height * $mult));
}

// 再次将其重采样
imagecopyresampled ($img,$img2,$x,$y,0,0,$width, $height,$width * $mult,$height * $mult);
imagedestroy($img2);
}

要在整个图像中使用它
wave_region ($oImage,0,0,imagesx($oImage),imagesy($oImage));
Jeff
17 年前
我遇到了一个问题,在一个页面上可以上传任何图像,然后我需要将其作为真彩色图像(带透明度)进行处理。问题在于具有透明度的调色板图像(例如 GIF 图像),当我使用 imagecopy 将图像转换为真彩色时,透明部分会变为黑色(无论实际代表透明度的颜色是什么)。

要将图像转换为真彩色并保留透明度,以下代码有效(假设 $img 是您的图像资源)

<?php
// 将 $img 转换为真彩色
$w = imagesx($img);
$h = imagesy($img);
if (!
imageistruecolor($img)) {
$original_transparency = imagecolortransparent($img);
// 存在透明颜色
if ($original_transparency >= 0) {
// 获取实际的透明颜色
$rgb = imagecolorsforindex($img, $original_transparency);
$original_transparency = ($rgb['red'] << 16) | ($rgb['green'] << 8) | $rgb['blue'];
// 将透明颜色改为黑色,因为透明色最终会变为黑色(GIF 中无法去除透明度)
imagecolortransparent($img, imagecolorallocate($img, 0, 0, 0));
}
// 创建真彩色图像并转移
$truecolor = imagecreatetruecolor($w, $h);
imagealphablending($img, false);
imagesavealpha($img, true);
imagecopy($truecolor, $img, 0, 0, 0, 0, $w, $h);
imagedestroy($img);
$img = $truecolor;
// 重新创建透明度(如果存在透明度)
if ($original_transparency >= 0) {
imagealphablending($img, false);
imagesavealpha($img, true);
for (
$x = 0; $x < $w; $x++)
for (
$y = 0; $y < $h; $y++)
if (
imagecolorat($img, $x, $y) == $original_transparency)
imagesetpixel($img, $x, $y, 127 << 24);
}
}
?>

现在 $img 是一个真彩色图像资源
petr dot biza at gmail dot com
14 年前
有一个函数可以裁剪图像的空白边缘。

<?php
/**
* $image 图像光标(来自 imagecreatetruecolor)
* $backgound 图像光标(来自 imagecolorallocate)
* $paddng 整数
*/
function imageCrop($image, $background = false, $padding = 0) {
if(
$background)
$background = imagecolorallocate($image, 255, 255, 255);

$top = imageSY($image);
$left = imageSX($image);
$bottom = 0;
$right = 0;

for (
$x = 0 ; $x < imagesx($image) ; $x++) {
for (
$y = 0 ; $y < imagesy($image) ; $y++) {

// 如果存在匹配
if(imagecolorat($image, $x, $y) != $background) {

if(
$x < $left)
$left = $x;
if(
$x > $right)
$right = $x;
if(
$y > $bottom)
$bottom = $y;
if(
$y < $top)
$top = $y;
}
}
}

$right++;
$bottom++;

// 创建新的图像,并添加填充
$img = imagecreatetruecolor($right-$left+$padding*2,$bottom-$top+$padding*2);
// 填充背景
imagefill($img, 0, 0, $background);
// 复制
imagecopy($img, $image, $padding, $padding, $left, $top, $right-$left, $bottom-$top);

// 销毁旧图像光标
imagedestroy($image);
return
$img;
}
?>
latin4567 at gmail dot com
14 年前
我创建了一个 PHP 函数,它执行标准的 9 片切片缩放技术。这对于缩略图阴影缩放和任何涉及皮肤的操作都非常有用,请随意拆解并使用

注意:我的 9 片切片例程不使用边距,而是使用居中矩形概念... 作为输入,您提供图像(作为资源)、矩形的 x 和 y 坐标以及矩形的宽度和高度。

$src_im 参数应该是图像资源。此脚本是为 9 片切片的半透明 PNG 图像编写的,并且只在半透明 PNG 图像上进行了测试,但它应该适用于其他图像类型(可能需要一些修改)

因此,如果您的源图像为 400 x 400,您需要在所有边上使用 24 像素的边距,并且目标大小为 800 x 500,则可以使用以下参数

<?php
$im
= NineSlice($im, 24, 24, 352, 352, 800, 500)
?>

<?php
/* 9-Slice Image Slicing Script by Sam Kelly (DuroSoft: http://www.durosoft.com) */
function NineSlice($src_im, $rect_x, $rect_y, $rect_w, $rect_h, $target_w, $target_h)
{
$src_w = imagesx($src_im);
$src_h = imagesy($src_im);

$im = CreateBlankPNG($target_w, $target_h);
imagealphablending($im,true);

$left_w = $rect_x;
$right_w = $src_w - ($rect_x + $rect_w);

$left_src_y = ceil($rect_h / 2) - 1 + $rect_y;
$right_src_y = $left_src_y;

$left_src_x = 0;
$right_src_x = $left_w + $rect_w;

$top_src_x = ceil($rect_w / 2) - 1 + $rect_x;
$bottom_src_x = $top_src_x;
$bottom_src_y = $rect_y + $rect_h;
$bottom_h = $src_h - $bottom_src_y;

$left_tile = CreateBlankPNG($left_w, 1);
imagecopy($left_tile, $src_im, 0, 0, 0, $left_src_y, $left_w, 1);

$right_tile = CreateBlankPNG($right_w, 1);
imagecopy($right_tile, $src_im, 0, 0, $right_src_x, $right_src_y, $right_w, 1);

$top_tile = CreateBlankPNG(1, $rect_y);
imagecopy($top_tile, $src_im, 0, 0, $top_src_x, 0, 1, $rect_y);

$bottom_tile = CreateBlankPNG(1, $bottom_h);
imagecopy($bottom_tile, $src_im, 0, 0, $bottom_src_x, $bottom_src_y, 1, $bottom_h);

$inner_tile = CreateBlankPNG(4, 4);
imagecopy($inner_tile, $src_im, 0, 0, ceil($src_w / 2) - 1, ceil($src_h / 2) - 1, 4, 4);

imagecopy($im, $src_im, 0, 0, 0, 0, $left_w, $rect_y);
imagecopy($im, $src_im, 0, $target_h - $bottom_h, 0, $bottom_src_y, $rect_x, $bottom_h);
imagecopy($im, $src_im, $target_w - $right_w, 0, $right_src_x, 0, $right_w, $rect_y);
imagecopy($im, $src_im, $target_w - $right_w, $target_h - $bottom_h, $src_w - $right_w, $bottom_src_y, $right_w, $bottom_h);

imagesettile($im, $top_tile);
imagefilledrectangle($im, $left_w, 0, $target_w - $right_w - 1, $rect_y, IMG_COLOR_TILED);

imagesettile($im, $left_tile);
imagefilledrectangle($im, 0, $rect_y, $left_w, $target_h - $bottom_h - 1, IMG_COLOR_TILED);


$right_side = CreateBlankPNG($right_w, $target_h - $rect_y - $bottom_h);
imagesettile($right_side, $right_tile);
imagefilledrectangle($right_side, 0, 0, $right_w, $target_h - $rect_y - $bottom_h, IMG_COLOR_TILED);
imagecopy($im, $right_side, $target_w - $right_w, $rect_y, 0, 0, $right_w, $target_h - $rect_y - $bottom_h);

$bottom_side = CreateBlankPNG($target_w - $right_w - $left_w, $bottom_h);
imagesettile($bottom_side, $bottom_tile);
imagefilledrectangle($bottom_side, 0, 0, $target_w - $right_w - $left_w, $bottom_h, IMG_COLOR_TILED);
imagecopy($im, $bottom_side, $right_w, $target_h - $bottom_h, 0, 0, $target_w - $right_w - $left_w, $bottom_h);

imagedestroy($left_tile);
imagedestroy($right_tile);
imagedestroy($top_tile);
imagedestroy($bottom_tile);
imagedestroy($inner_tile);
imagedestroy($right_side);
imagedestroy($bottom_side);

return
$im;
}

function
CreateBlankPNG($w, $h)
{
$im = imagecreatetruecolor($w, $h);
imagesavealpha($im, true);
$transparent = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $transparent);
return
$im;
}
?>
ragnar_40k at hotmail dot com
18 年前
这里有一个函数可以给图像打孔

// 设置图像部分的 alpha 通道(它目前忽略了画布 alpha)。
// $img_canvas - 32 位真彩色图像,带 alpha 通道
// $img_mask - 8 位灰度图像(白色部分将在画布中被掩盖为透明)。
// 这依赖于当前像素格式
// (高字节) -> (alpha 通道} {red} {green} {blue} <- (低字节)
function mask($img_canvas, $img_mask, $dst_x, $dst_y)
{
$old_blendmode = imagealphablending($img_canvas, FALSE);

$width = imagesx($img_mask);
$heigth = imagesy($img_mask);

$mask_x = 0;
$x = $dst_y;
while ($mask_x<$width)
{
$mask_y = 0;
$y = $dst_y;
while ($mask_y<$heigth)
{
imagesetpixel($img_canvas, $x, $y,
((imagecolorat($img_mask, $mask_x, $mask_y) >> 1) << 24) | (imagecolorat($img_canvas, $x, $y) & 0x00FFFFFF));

++$mask_y;
++$y;
}
++$mask_x;
++$x;
}

imagealphablending($img_canvas, $old_blendmode);
}
johnny at netvor dot sk
18 年前
简单的图像组合脚本,例如,如果您想从多个小的签名创建一个巨大的签名

<?php
// 配置 --
$src = array ("http://www.google.com/images/logo_sm.gif", "http://sk2.php.net/images/php.gif");
$under = 0; // 是否将图像合并到下方?
// -- 配置结束

$imgBuf = array ();
$maxW=0; $maxH=0;
foreach (
$src as $link)
{
switch(
substr ($link,strrpos ($link,".")+1))
{
case
'png':
$iTmp = imagecreatefrompng($link);
break;
case
'gif':
$iTmp = imagecreatefromgif($link);
break;
case
'jpeg':
case
'jpg':
$iTmp = imagecreatefromjpeg($link);
break;
}

if (
$under)
{
$maxW=(imagesx($iTmp)>$maxW)?imagesx($iTmp):$maxW;
$maxH+=imagesy($iTmp);
}
else
{
$maxW+=imagesx($iTmp);
$maxH=(imagesy($iTmp)>$maxH)?imagesy($iTmp):$maxH;
}

array_push ($imgBuf,$iTmp);
}

$iOut = imagecreate ($maxW,$maxH) ;

$pos=0;
foreach (
$imgBuf as $img)
{
if (
$under)
imagecopy ($iOut,$img,0,$pos,0,0,imagesx($img),imagesy($img));
else
imagecopy ($iOut,$img,$pos,0,0,0,imagesx($img),imagesy($img));
$pos+= $under ? imagesy($img) : imagesx($img);
imagedestroy ($img);
}

imagegif($iOut);
?>
plumage dot nl 网站管理员
15 年前
我对镜像功能有一些意见。
水平和垂直情况被调换了。
1 代表垂直,2 代表水平。
当我使用它时,图片的侧面或顶部出现了一条 1 像素的黑色边线。
为了去除它,函数变为如下:

<?php
function ImageFlip ( $imgsrc, $mode )
{

$width = imagesx ( $imgsrc );
$height = imagesy ( $imgsrc );

$src_x = 0;
$src_y = 0;
$src_width = $width;
$src_height = $height;

switch (
$mode )
{

case
'1': // 垂直
$src_y = $height -1;
$src_height = -$height;
break;

case
'2': // 水平
$src_x = $width -1;
$src_width = -$width;
break;

case
'3': // 同时
$src_x = $width -1;
$src_y = $height -1;
$src_width = -$width;
$src_height = -$height;
break;

default:
return
$imgsrc;

}

$imgdest = imagecreatetruecolor ( $width, $height );

if (
imagecopyresampled ( $imgdest, $imgsrc, 0, 0, $src_x, $src_y , $width, $height, $src_width, $src_height ) )
{
return
$imgdest;
}

return
$imgsrc;

}
?>
xafford
15 年前
关于 Borszczuk 的上一篇文章和镜像图像的函数

使用 imagecopyresampled 有更好的(更快)方法来完成这项任务。

<?php

define
( 'IMAGE_FLIP_HORIZONTAL', 1 );
define ( 'IMAGE_FLIP_VERTICAL', 2 );
define ( 'IMAGE_FLIP_BOTH', 3 );

function
ImageFlip ( $imgsrc, $mode )
{

$width = imagesx ( $imgsrc );
$height = imagesy ( $imgsrc );

$src_x = 0;
$src_y = 0;
$src_width = $width;
$src_height = $height;

switch ( (int)
$mode )
{

case
IMAGE_FLIP_HORIZONTAL:
$src_y = $height;
$src_height = -$height;
break;

case
IMAGE_FLIP_VERTICAL:
$src_x = $width;
$src_width = -$width;
break;

case
IMAGE_FLIP_BOTH:
$src_x = $width;
$src_y = $height;
$src_width = -$width;
$src_height = -$height;
break;

default:
return
$imgsrc;

}

$imgdest = imagecreatetruecolor ( $width, $height );

if (
imagecopyresampled ( $imgdest, $imgsrc, 0, 0, $src_x, $src_y, $width, $height, $src_width, $src_height ) )
{
return
$imgdest;
}

return
$imgsrc;

}

?>
Chad Allard
15 年前
关于这里笔记中讨论的 image_flip 函数,不要忘记支持透明度。



$imgdest = imagecreatetruecolor($width, $height);

之后

添加
imagealphablending($imgdest, false);

imagesavealpha($imgdest, true);
在另一篇文章中提到你不需要使用 imagesavealpha 函数,但我发现如果没有它,背景透明度会使背景画布变黑。
15 年前
John Conde

<?php
// 原始图像
$filename = 'someimage.jpg';

// 获取原始图像尺寸
list($current_width, $current_height) = getimagesize($filename);

// 原始图像上开始裁剪图像的 x 和 y 坐标
$left = 50;
$top = 50;

// 这将是图像的最终大小(例如,我们将向左和向下移动多少像素)
$crop_width = 200;
$crop_height = 200;

// 对图像进行重采样
$canvas = imagecreatetruecolor($crop_width, $crop_height);
$current_image = imagecreatefromjpeg($filename);
imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width, $current_height);
imagejpeg($canvas, $filename, 100);
?>
etienne at escott dot info
15 年前
这基于 designerkamal at gmail dot com 的倾斜函数。

这是一个使用抗锯齿功能在 PHP 中倾斜图像的函数。它适用于 alpha PNG 图像。

警告:您倾斜的图像越大,处理时间就越长。它比没有抗锯齿大约长 3 倍。

<?php
// $img: 图片句柄
// $skew_val: 要应用的倾斜度 (0 表示无倾斜,1 表示 45°)
function imageskewantialiased($img, $skew_val)
{
$width = imagesx($img);
$height = imagesy($img);
$height2 = $height + ($width * $skew_val);

// 请参阅下方 imagecreatealpha 的定义
$imgdest = imagecreatealpha($width, $height2);

// 处理图像
for($x = 0, $level = 0; $x < $width - 1; $x++)
{
$floor = floor($level);

// 为了提高速度,一些行将被一次复制
if ($level == $floor)
imagecopy($imgdest, $img, $x, $level, $x, 0, 1, $height - 1);
else
{
$temp = $level - $floor;

// 行的第一个像素
// 我们获取颜色,然后根据级别对其应用淡入效果
$color1 = imagecolorsforindex($img, imagecolorat($img, $x, 0));
$alpha = $color1['alpha'] + ($temp * 127);
if (
$alpha < 127)
{
$color = imagecolorallocatealpha($imgdest, $color1['red'], $color1['green'], $color1['blue'], $alpha);
imagesetpixel($imgdest, $x, $floor, $color);
}

// 行的其余部分
for($y = 1; $y < $height - 1; $y++)
{
// 合并此像素和上一个像素
$color2 = imagecolorsforindex($img, imagecolorat($img, $x, $y));
$alpha = ($color1['alpha'] * $temp) + ($color2['alpha'] * (1 - $temp));
if (
$alpha < 127)
{
$red = ($color1['red'] * $temp) + ($color2['red'] * (1 - $temp));
$green = ($color1['green'] * $temp) + ($color2['green'] * (1 - $temp));
$blue = ($color1['blue'] * $temp) + ($color2['blue'] * (1 - $temp));
$color = imagecolorallocatealpha($imgdest, $red, $green, $blue, $alpha);
imagesetpixel($imgdest, $x, $floor + $y, $color);
}

$color1 = $color2;
}

// 行的最后一个像素
$color1 = imagecolorsforindex($img, imagecolorat($img, $x, $height - 1));
$alpha = $color1['alpha'] + ((1 - $temp) * 127);
if (
$alpha < 127)
{
$color = imagecolorallocatealpha($imgdest, $color1['red'], $color1['green'], $color1['blue'], $alpha);
imagesetpixel($imgdest, $x, $floor + $height - 1, $color);
}
}

// 行已完成,下一行将更低
$level += $skew_val;
}

// 处理完毕,返回倾斜后的图像
return $imgdest;
}

// 创建一个指定大小的新图像,背景为空白(透明)
function imagecreatealpha($width, $height)
{
// 创建一个普通图像并应用所需的设置
$img = imagecreatetruecolor($width, $height);
imagealphablending($img, false);
imagesavealpha($img, true);

// 应用透明背景
$trans = imagecolorallocatealpha($img, 0, 0, 0, 127);
for (
$x = 0; $x < $width; $x++)
{
for (
$y = 0; $y < $height; $y++)
{
imagesetpixel($img, $x, $y, $trans);
}
}

return
$img;
}

// 以下是如何使用它的示例
imagepng(imageskewantialiased(imagecreatefrompng('test.png'), 0.15), 'skew.png');
?>
matrebatre
16 年前
我和 Jeff 有着同样的问题,但他的解决方案对我无效。我写了这个脚本,它似乎有效。

<?php

$img
= imagecreatefromgif('in.gif');
$w = imagesx($img);
$h = imagesy($img);

$trans = imagecolortransparent($img);
if(
$trans >= 0) {

$rgb = imagecolorsforindex($img, $trans);

$oldimg = $img;
$img = imagecreatetruecolor($w,$h);
$color = imagecolorallocate($img,$rgb['red'],$rgb['green'],$rgb['blue']);
imagefilledrectangle($img,0,0,$w,$h,$color);
imagecopy($img,$oldimg,0,0,0,0,$w,$h);

}

imagegif($img,'out.gif');

?>
C. Jansen
17 年前
我在回复一个支持论坛上的帖子时,发现 imagecopy() 有点奇怪。第一个代码段(应该)会创建一个图像对象,在该图像中分配一个颜色资源,用分配的颜色填充背景,然后将另一个裁剪以适应的图像复制到其中。

<?php
// 创建一个新的图像资源
$temp = imagecreatetruecolor( $width, $height );
$white = imagecolorallocate( $temp, 255, 255, 255 );

// 用白色填充背景
imagefill( $temp, 0, 0, $white );

// 将图像复制到新的资源中
imagecopy($temp, $this->Image, 0, 0, $crop_top, $crop_left, $width, $height);
?>

但这样会产生黑色背景。我注意到去掉 imagefill() 调用会产生相同的结果。解决方案是在 imagecopy() 之后调用 imagefill()。从线性角度考虑,我原本以为这会用白色覆盖之前复制的图像,但事实并非如此。我想 GD 使用了层级系统?这是正确的吗?

<?php
// 创建一个新的图像资源
$temp = imagecreatetruecolor( $width, $height );
$white = imagecolorallocate( $temp, 255, 255, 255 );

// 将图像复制到新的资源中
imagecopy( $temp, $this->Image, 0, 0, $crop_top, $crop_left, $width, $height );

// 用白色填充背景(不确定为什么必须按此顺序)
imagefill( $temp, 0, 0, $white );
?>

我使用的是 php 5.1.4,带有捆绑的 GD (2.0.28)
designerkamal at gmail dot com
18 年前
在 PHP 中倾斜图像…
<?php
function Skew($src, $dest, $skew_val)
{
$imgsrc = imagecreatefromgif($src);
$width = imagesx($imgsrc);
$height = imagesy($imgsrc);
$imgdest = imagecreatetruecolor($width, $height+($height*$skew_val));
$trans = imagecolorallocate($imgdest,0,0,0);
$temp=0;
for(
$x=0 ; $x<$width ; $x++)
{
for(
$y=0 ; $y<$height ; $y++)
{
imagecopy($imgdest, $imgsrc, $x, $y+$temp, $x, $y, 1, 1);
imagecolortransparent($imgdest,$trans);

}
$temp+=$skew_val;
}
imagepng($imgdest, $dest);
imagedestroy($imgsrc);
imagedestroy($imgdest);
}
Skew("img.gif", "img2.png","1");
print
"<img src='img.gif'>";
print
"<br><br>";
print
"<img src='img2.png'>";
?>
Cory Gagliardi
16 年前
以下是一些用于调整上传图像大小并在其右下角插入水印(来自 24 位 PNG)的简单代码。在本例中,水印是一个对角线带,上面写着“SOLD”。验证上传图像类型是否正确的代码已省略

<?PHP
// 加载并调整图像大小
$uploaded = imagecreatefromjpeg($_FILES['file']['tmp_name']);
$image = imagecreatetruecolor(IMAGE_WIDTH, IMAGE_HEIGHT);
imagecopyresampled($image, $uploaded, 0, 0, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, imagesx($uploaded), imagesy($uploaded));
imagealphablending($image,true); // 允许我们在 $image 上应用 24 位水印

// 加载已售水印
$sold_band = imagecreatefrompng('../images/sold_band.png');
imagealphablending($sold_band,true);

// 应用水印并保存
$image = image_overlap($image, $sold_band);
imagecopy($image,$sold_band,IMAGE_WIDTH - SOLD_WIDTH,IMAGE_HEIGHT - SOLD_HEIGHT,0,0,SOLD_WIDTH,SOLD_HEIGHT);
$success = imagejpeg($image,'../images/sold/'.$id.'.jpg',85);

imagedestroy($image);
imagedestroy($uploaded);
imagedestroy($sold_band);
?>
admin at cvxdes dot com
18 年前
我用这个给图像加水印。这是我写的函数

<?php
function watermark($url,$logo){
$bwidth = imagesx($url);
$bheight = imagesy($url);
$lwidth = imagesx($logo);
$lheight = imagesy($logo);
$src_x = $bwidth - ($lwidth + 5);
$src_y = $bheight - ($lheight + 5);
ImageAlphaBlending($url, true);
ImageCopy($url,$logo,$src_x,$src_y,0,0,$lwidth,$lheight);
}
?>

用法
<?php
//$current_image 是您的图像,水印会叠加到上面。确保它是 imagecreatefrom*** 才能正常工作。
watermark($current_image,$watermark_image);
?>

希望这对某些人有所帮助。
To Top