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

Тема в разделе "Как сделать...", создана пользователем AGENT131313, 1 июл 2013.

  1. AGENT131313

    AGENT131313 Забанен

    Регистр.:
    17 мар 2009
    Сообщения:
    282
    Симпатии:
    28
    Всем доброго времени суток.
    В просторах интернета нашел урок, как сделать наложение водяного знака на картинки, все сделал как нужно, работат, но работает только с одим форматом картинок.
    Тоесть выводить водяной знк только на картинках 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($imagetrue);
    imagealphablending($watermarktrue);
    // создаём новое изображение
    imagecopy($image$watermark$dest_x$dest_y00$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>
    Подскажите пожалуйста как исправить, под все форматы.
     
  2. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    635
    Симпатии:
    503
    Надо в зависимости от типа изображения использовать требуемые функции:
    imagecreatefromjpeg
    imagecreatefromgif
    imagecreatefrompng
     
  3. AGENT131313

    AGENT131313 Забанен

    Регистр.:
    17 мар 2009
    Сообщения:
    282
    Симпатии:
    28
    у меня все эти форматы есть
    Ставил я для вывода гифок но не выводит анимацию

    Как я понимаю, нужно сделать чтото в виде такого?
    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($imagetrue);
    imagealphablending($watermarktrue);
    // создаём новое изображение
    imagecopy($image$watermark$dest_x$dest_y00$watermark_width$watermark_height);
    imagejpeg($image);
     
    // освобождаем память
    imagedestroy($image);
    imagedestroy($watermark);
     
    }
    Но тоже не паботает
     
  4. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    635
    Симпатии:
    503
    Так нужно вотермарк на анимированную гифку накладывать? Надо было бы так сразу и писать.
    Приведенный выше вариант будет работать для изображений без анимации.
    Для анимированной гифки нужно разбивать гифку на фреймы (отдельные картинки) и на кажду уже накладывать вотермарк.
     
  5. AGENT131313

    AGENT131313 Забанен

    Регистр.:
    17 мар 2009
    Сообщения:
    282
    Симпатии:
    28
    Не подскажешь пример или какой нибудь урок по этому поводу?
     
  6. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    635
    Симпатии:
    503
    Вот к примеру
    http://www.php.net/manual/en/imagick.examples-1.php
    Смотреть пример 5. Там цикл по фреймам, в котором изменяются размеры фреймов, нужно вместо изменения размеров поставить наложение вотермарка.

    P.S. Снимаю бан в гугле. Долго. Дорого))
     
    AGENT131313 нравится это.
  7. cruide

    cruide Писатель

    Регистр.:
    25 июл 2012
    Сообщения:
    8
    Симпатии:
    22
    Когдато написал либу небольшую для себя... для работы с имеджами используя GD. ресайз и кобинирование картинок с прозрачностью.

    В результате будет так:
    PHP:
    $images = new Images();
    $images->images_combine('d:/one.png''d:/two.png''d:/result.png'100100);
    Второе изображение накладывается на первое.
    Причем желательно, чтоб второе было меньше первого.
    где 100, 100 это положение в пикселях для второго имеджа;
     

    Вложения:

    • Images.zip
      Размер файла:
      1,5 КБ
      Просмотров:
      5
  8. Dimasnulled

    Dimasnulled Писатель

    Регистр.:
    12 ноя 2012
    Сообщения:
    2
    Симпатии:
    0
    Впиши в метод имя файла, а вместо расширения поставь звёздочки.