Проблемы с наложением водяного знака на изображения

AGENT131313

Забанен
Регистрация
17 Мар 2009
Сообщения
292
Реакции
31
Всем доброго времени суток.
В просторах интернета нашел урок, как сделать наложение водяного знака на картинки, все сделал как нужно, работат, но работает только с одим форматом картинок.
Тоесть выводить водяной знк только на картинках jpg а остальные картинки вообще не выводит.
Вот код:
PHP:
header('content-type: image/jpeg');
include("inc_common.php");
// получаем имя изображения через GET
$image = $_GET['image'];

// создаём водяной знак
$watermark = imagecreatefrompng('watermark.png');

// получаем значения высоты и ширины водяного знака
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);

// создаём jpg из оригинального изображения
$image_path = $file_path.'items/' . $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);
Вот вывод:
PHP:
<td width="100" height="100" valign="top" nowrap align="center"><img src="watermark.php?image=<?=$cur_item->image;?>" border="1"></td>

Подскажите пожалуйста как исправить, под все форматы.
 
Надо в зависимости от типа изображения использовать требуемые функции:
imagecreatefromjpeg
imagecreatefromgif
imagecreatefrompng
 
Надо в зависимости от типа изображения использовать требуемые функции:
imagecreatefromjpeg
imagecreatefromgif
imagecreatefrompng
у меня все эти форматы есть
Ставил я для вывода гифок но не выводит анимацию

Как я понимаю, нужно сделать чтото в виде такого?
PHP:
if (isset($_GET['image'])) {
 
$image = $_GET['image'];
$size_format = getimagesize($image);
$format = strtolower(substr($size_formay['mime'], strpos($size_format['mime'], '/')+1));
 
if ($format == 'jpg') {
header('content-type: image/jpg');
}
elseif ($format == 'jpeg') {
header('content-type: image/jpeg');
}
elseif ($format == 'png') {
header('content-type: image/png');
}
elseif ($format == 'gif') {
header('content-type: image/gif');
}
elseif ($format == 'bmp') {
header('content-type: image/bmp');
}
// В принципе я думаю можно наверное и так))
header('content-type: image/'.$format.'');
 
// создаём водяной знак
$watermark = imagecreatefrompng('watermark.png');
 
// получаем значения высоты и ширины водяного знака
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
 
// создаём jpg из оригинального изображения
$image_path = $chat_url.'items/'.$image;
$image = imagecreatefromjpeg($image_path);
//если что-то пойдёт не так
if ($image === false) {
return false;
}
$size = getimagesize($image_path);
// помещаем водяной знак на изображение
$dest_x = $size[0] - $watermark_width - 50;
$dest_y = $size[1] - $watermark_height - 50;
 
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);
 
}
Но тоже не паботает
 
у меня все эти форматы есть
Ставил я для вывода гифок но не выводит анимацию

Так нужно вотермарк на анимированную гифку накладывать? Надо было бы так сразу и писать.
Приведенный выше вариант будет работать для изображений без анимации.
Для анимированной гифки нужно разбивать гифку на фреймы (отдельные картинки) и на кажду уже накладывать вотермарк.
 
Так нужно вотермарк на анимированную гифку накладывать? Надо было бы так сразу и писать.
Приведенный выше вариант будет работать для изображений без анимации.
Для анимированной гифки нужно разбивать гифку на фреймы (отдельные картинки) и на кажду уже накладывать вотермарк.
Не подскажешь пример или какой нибудь урок по этому поводу?
 
Вот к примеру
Для просмотра ссылки Войди или Зарегистрируйся
Смотреть пример 5. Там цикл по фреймам, в котором изменяются размеры фреймов, нужно вместо изменения размеров поставить наложение вотермарка.

P.S. Снимаю бан в гугле. Долго. Дорого))
 
Когдато написал либу небольшую для себя... для работы с имеджами используя GD. ресайз и кобинирование картинок с прозрачностью.

В результате будет так:
PHP:
$images = new Images();
$images->images_combine('d:/one.png', 'd:/two.png', 'd:/result.png', 100, 100);

Второе изображение накладывается на первое.
Причем желательно, чтоб второе было меньше первого.
где 100, 100 это положение в пикселях для второго имеджа;
 

Вложения

  • Images.zip
    1,5 KB · Просмотры: 5
Впиши в метод имя файла, а вместо расширения поставь звёздочки.
 
Назад
Сверху