Web Developer On1x.com Игры как увлечение Видео–игры как хобби и увлечение. Новости игровой индустрии. Блог про видео–игры.
видео-трансляции по играмУтиные истории возвращаютсяХарактеристики персонажа в игре Dark Souls

Правильное добавление Watermark. PHP. Прозрачный png.

Столкнулся с проблемой - необходимо стало добавить возможность добавления прозрачной метки-изображения на загружаемые картинки. Подобные вещи называются watermark. Искал в яндексе, нашел недописанные или слишком навороченные методы, которые не удалось быстро встроить, или, что еще хуже, неполноценно работали, сохраняя результат в png без прозрачности.
Пришлось сесть и самому выяснить некоторые детали, создать свой метод. Итак, Исходный код моего метода:
PHP, добавление png watermark к картинке
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function AddWatermark($img_file, $filetype, $watermark = 'watermark.png'){
    $offset = 5;//отступ от правого нижнего края
    $image = GetImageSize($img_file);
    $xImg = $image[0];
    $yImg = $image[1];
    switch ($image[2]) {
        case 1:
            $img=imagecreatefromgif($img_file);
        break;
        case 2:
            $img=imagecreatefromjpeg($img_file);
        break;
        case 3:
            $img=imagecreatefrompng($img_file);
        break;
        }

    $r = imagecreatefrompng($watermark);
    $x = imagesx($r);
    $y = imagesy($r);

    $xDest = $xImg - ($x + $offset);
    $yDest = $yImg - ($y + $offset);
    imageAlphaBlending($img,1);
    imageAlphaBlending($r,1);
    imagesavealpha($img,1);
    imagesavealpha($r,1);
    imagecopyresampled($img,$r,$xDest,$yDest,0,0,$x,$y,$x,$y);
    switch ($filetype) {
            case "jpg":
                imagejpeg($img,$img_file,100);
            break;
            case "jpeg":
                imagejpeg($img,$img_file,100);
            break;
            case "gif":
                imagegif($img,$img_file);
            break;
            case "png":
                imagepng($img,$img_file);
            break;
        }
    imagedestroy($r);
    imagedestroy($img);
}

Ошибкой большинства других методов в отсутствии вызова imagesavealpha($img,1) что и рушило правильное сохранение изображения. Встроил метод в 8cms. Успехов!
Дата записи: 05.03.2010 23:07
Собственные проекты:
GameCommunity.ru, GameSocial.Net (TV), ART-Talk.ru, Дград.инфо
On1x blog
my ip