Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 07.09.2015
Сообщений: 162

Водяной знак на изображение в fancybox

12.02.2017, 00:49. Показов 1320. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Реализовал галерею на сайте с помощью fancybox. Возникла необходимость реализовать добавление водяного знака средствами php, чтобы иметь возможность менять этот самый водяной знак. Как это можно реализовать, чтобы всё корректно работало с fancybox? Нашел в инете такой вот код, но он выводит крякозябры вместо изображения:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$stamp = imagecreatefrompng('stamp.png');
$im = imagecreatefromjpeg('photo.jpeg');
 
// Установка полей для штампа и получение высоты/ширины штампа
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Копирование изображения штампа на фотографию с помощью смещения края
// и ширины фотографии для расчета позиционирования штампа. 
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, 
imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), 
imagesy($stamp));
 
// Вывод и освобождение памяти
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
Дальше нашел вот такую функцию, но fancybox изображение не отображал:
PHP
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
header('content-type: image/jpeg');
// получаем имя изображения через GET
$image = $_GET['image'];
// создаём водяной знак
$watermark = imagecreatefrompng('watermark.png');  
// получаем значения высоты и ширины водяного знака
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark); 
// создаём jpg из оригинального изображения
14
$image_path = '/path/to/image/folder/' . $image;
$image = imagecreatefromjpeg($image_path);
//если что-то пойдёт не так
if ($image === false) {
    return false;
}
$size = getimagesize($image_path);
// помещаем водяной знак на изображение
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagealphablending($image, true);
imagealphablending($watermark, true);
// создаём новое изображение
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
imagejpeg($image);
// освобождаем память
imagedestroy($image);
imagedestroy($watermark);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2017, 00:49
Ответы с готовыми решениями:

Как вставить красивый водяной знак в картинку?
1) Как наложить красиво готовую картинку с логотипом сайта на фотки из альбома перед показом в броузере. 2) Как вставить текст с номером...

Водяной знак по центру
Здравствуйте, добавляю водяной знак на изображение, как мне разместить его по центру, у всех изображений разные ширина и высота. Вот: ...

Как наклеить логотип (водяной знак) на фото?
Как приклеивать одно изображение на другое, т.е. логотип или же водяной знак?

4
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
13.02.2017, 10:14
exirtt, во втором коде на строке 10 число 14 - зачем оно там?
0
0 / 0 / 1
Регистрация: 07.09.2015
Сообщений: 162
13.02.2017, 17:22  [ТС]
Kerry_Jr, копировал с сайта, не стер номер строки.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
13.02.2017, 17:41
Цитата Сообщение от exirtt Посмотреть сообщение
но fancybox изображение не отображал:
Покажите хотя бы часть кода, где вы пытаетесь отобразить картинку.
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
13.02.2017, 17:48
В свое время тоже много ломал голову, чтобы нормально наложить watermark
Вот код который писал для себя:
PHP
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public function Resize($size = 'big'){
    if(!is_file('files/cargo/'.$this->name))
      return false;
    if(is_file('images/cargo/'.$size.'/'.$this->id.'-'.$this->name.'.'.$this->extension))
      return true;
    $info = getimagesize('files/cargo/'.$this->name);
    $watermark = false;
    if($info === false)
      return false;
    switch($size){
      case 'small':
    $new_size = (($info[0] < 60) and ($info[1] < 60)) ? array($info[0], $info[1]) : ((($info[0] / 60) > ($info[1] / 60)) ? array(60, (integer)($info[1] / ($info[0] / 60))) : array((integer)($info[0] / ($info[1] / 60)), 60));
    break;
      case 'medium':
    $new_size = (($info[0] < 80) and ($info[1] < 115)) ? array($info[0], $info[1]) : ((($info[0] / 80) > ($info[1] / 115)) ? array(80, (integer)($info[1] / ($info[0] / 80))) : array((integer)($info[0] / ($info[1] / 115)), 115));
    break;
      default:
    if(is_file('files/watermark.png'))
      $watermark = imagecreatefrompng('files/watermark.png');
    $new_size = (($info[0] < 350) and ($info[1] < 500)) ? array($info[0], $info[1]) : ((($info[0] / 350) > ($info[1] / 500)) ? array(350, (integer)($info[1] / ($info[0] / 350))) : array((integer)($info[0] / ($info[1] / 500)), 500));
    break;
    }
    switch($info[2]){
      case IMAGETYPE_JPEG:
      case IMAGETYPE_JPEG2000:
    $source = imagecreatefromjpeg('files/cargo/'.$this->name);
    break;
      case IMAGETYPE_PNG:
    $source = imagecreatefrompng('files/cargo/'.$this->name);
    break;
      case IMAGETYPE_GIF:
    $source = imagecreatefromgif('files/cargo/'.$this->name);
    break;
      default:
    return false;
    }
    if($source === false)
      return false;
    $destination = imagecreatetruecolor($new_size[0], $new_size[1]);
    if($destination === false)
      return false;
    if($info[2] == IMAGETYPE_PNG){
      imagealphablending($destination, false);
      imagesavealpha($destination, true);
    }else{
      $white = imagecolorallocate($destination, 255, 255, 255);
      if($white === false)
    return false;
      if(!imagefill($destination, 0, 0, $white))
    return false;
    }
    if(!imagecopyresampled($destination, $source, 0, 0, 0, 0, $new_size[0], $new_size[1], $info[0], $info[1]))
      return false;
    if($watermark){
      $winfo = getimagesize('files/watermark.png');
      if($info[2] == IMAGETYPE_PNG)
    imagealphablending($destination, true);
      $wd = array(0 => max(floor(($new_size[0] - $winfo[0]) / 2), 0), 1 => max(floor(($new_size[1] - $winfo[1]) / 2), 0));
      imagecopyresized($destination, $watermark, $wd[0], $wd[1], 0, 0, min($new_size[0], $winfo[0]), min($new_size[1], $winfo[1]), $winfo[0], $winfo[1]);
    }
    switch($info[2]){
      case IMAGETYPE_JPEG:
      case IMAGETYPE_JPEG2000:
    if(imagejpeg($destination, 'images/cargo/'.$size.'/'.$this->id.'-'.$this->name.'.'.$this->extension, 100) === false)
      return false;
      case IMAGETYPE_GIF:
    if(imagegif($destination, 'images/cargo/'.$size.'/'.$this->id.'-'.$this->name.'.'.$this->extension) === false)
      return false;
      default:
    if(imagepng($destination, 'images/cargo/'.$size.'/'.$this->id.'-'.$this->name.'.'.$this->extension) === false)
      return false;
    }
    return true;
  }
ЗЫ это функция класса для пережатия изображения с наложением watermark
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.02.2017, 17:48
Помогаю со студенческими работами здесь

Водяной знак в fancybox
Доброго времени суток! В детальной карточке товара на изображение наложен &quot;водяной знак&quot;. Для этого установлено решение из...

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

Водяной знак
Стоит DLE 9.4 ! При добавлении водяного знака на прозрачную png картинку, она становится черной в том месте где должен быть прозрачный фон!...

Водяной знак на pdf
Можете помочь, не пойму как правильно написать, получается через OpenFileDialog нужно выбрать пдф файл и должно запустится код с 24 строки,...

Миниатюры изображений и водяной знак
Доброго времени суток, заметил интересную штуку: есть фото, на нем полупрозрачный водный знак. Если просматривать миниатюры этих фото, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru