Как сделать водяной знак на изображении? - PullRequest
0 голосов
/ 30 марта 2012

У меня есть jpg-файл, в который я хочу добавить другой png-файл изображения.Я не уверен, как реализовать это с помощью php?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вы можете использовать функцию imagecopy от gd.

Эта функция используется для копирования части изображения из источника в место назначения

imagecopy ( 
           $dst_im ,   // destination image (resource), imagecreatefrom(gif|jpg|png)
           $src_im ,   // destination image (resource), imagecreatefrom(gif|jpg|png) 
           $dst_x ,    // x cordinate in destination where u want the new obj placed
           $dst_y ,    // y cordinate in destination where u want the new obj placed
           $src_x ,    // x cordinate in source from wher u want the new obj placed
           $src_y ,    // y cordinate in source from where u want the new obj placed
           $src_w ,    // the width of the object to copy
           $src_h      // the height of the object to copy
);

Как указано вКомментируя приведенный выше код, вам нужно будет создать ресурс изображения как для пункта назначения, так и для источника.

Обычно выполняется с использованием

 $src = imagecreatefromjpg('image.jpg');
 $dst = imagecreatefromjpg('watermark');

Остальные части представляют собой простые координаты.

Также не забудьте посетить imagecopy самостоятельно.

0 голосов
/ 30 марта 2012

Вот пример использования водяных знаков в горячем режиме с использованием GD:

const CORNER_TOP_LEFT       = 1;
const CORNER_TOP_RIGHT      = 2;
const CORNER_BOTTOM_LEFT    = 3;
const CORNER_BOTTOM_RIGHT   = 4;

$backgroundImagePath = "img/stamp.png";
$corner=CORNER_BOTTOM_RIGHT;
$alpha=60

$img_res=@imagecreatefromjpeg($filename);
$img_info=getimagesize($backgroundImagePath);

switch ($corner){
    case CORNER_TOP_LEFT:
        if(!imagecopymerge ($this->imageRes, $img_res, 0, 0, 0, 0, $img_info[0], $img_info[1], $alpha)){
            throw new RuntimeException("Unable to make stamp!");
        }
        break;
    case CORNER_TOP_RIGHT:
        if(!imagecopymerge ($this->imageRes, $img_res, $this->info[0]-$img_info[0], 0, 0, 0, $img_info[0], $img_info[1], $alpha)){
            throw new RuntimeException("Unable to make stamp!");
        }
        break;
    case CORNER_BOTTOM_LEFT:
        if(!imagecopymerge ($this->imageRes, $img_res, 0, $this->info[1]-$img_info[1], 0, 0, $img_info[0], $img_info[1], $alpha)){
            throw new RuntimeException("Unable to make stamp!");
        }
        break;
    case CORNER_BOTTOM_RIGHT:
        if(!imagecopymerge ($this->imageRes, $img_res, $this->info[0]-$img_info[0], $this->info[1]-$img_info[1], 0, 0, $img_info[0], $img_info[1], $alpha)){
            throw new RuntimeException("Unable to make stamp!");
        }
        break;
}

imagejpeg($img_res, "/path/to/save/image.jpg", 100);
...