Затемнение картинки при помощи php

324
05 апреля 2017, 17:02

Всем привет! Есть задача - обработка загруженного изображения. Фото должно засериться так, чтобы на него можно было наложить текст. Не думал, что это окажется проблематично. Т.к. сайт на Codeignite'e, я сразу решил воспользоваться image_lib: просто взять картинку, по сути которая, просто чёрная и наложить её как watermark, выставив при этом opacity = 50. Но не тут-то было... Промучавшись с экспериментами я понял, что не всё так просто. При попытке нанести однотонный watermark ничего не изменилось(

$config['source_image'] = $img_path;
$config['create_thumb'] = FALSE;
$config['wm_type'] = 'overlay';
$config['wm_opacity'] = 50;
$config['wm_overlay_path'] = $watermark_file;
$this->image_lib->initialize($config);
$this->image_lib->watermark();

Подскажите, пожалуйста, как реализовать такую фишку...

Answer 1

Если исходить из этой документации, то равномерно залитый черным файл для watermark вам ничего не даст, т.к. существуют следующие параметры: wm_x_transp и wm_x_transp со значением по умолчанию равным 4

If your watermark image is a PNG or GIF image, you may specify a color on the image to be “transparent”. This setting (along with the next) will allow you to specify that color. This works by specifying the “X” and “Y” coordinate pixel (measured from the upper left) within the image that corresponds to a pixel representative of the color you want to be transparent.

Попробуйте выставить их в 0, может модуль тогда не будет считать ваш черный цвет, как цвет прозрачности.

UPDATE
В библиотеке от CodeIgniter идёт определение и выбор способа наложения:

    // Set RGB values for text and shadow
    $rgba = imagecolorat($wm_img, $this->wm_x_transp, $this->wm_y_transp);
    $alpha = ($rgba & 0x7F000000) >> 24;
    // make a best guess as to whether we're dealing with an image with alpha transparency or no/binary transparency
    if ($alpha > 0)
    {
        // copy the image directly, the image's alpha transparency being the sole determinant of blending
        imagecopy($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height);
    }
    else
    {
        // set our RGB value from above to be transparent and merge the images with the specified opacity
        imagecolortransparent($wm_img, imagecolorat($wm_img, $this->wm_x_transp, $this->wm_y_transp));
        imagecopymerge($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height, $this->wm_opacity);
    }

Исходя их этого кода единственным решением, скорее всего, будет такое:

  1. Создать PNG или GIF, залитый черным цветом большого размера (допустим 500x500)
  2. Верхний левый пиксель сделать чуть-чуть светлее
  3. Указать wm_x_transp и wm_y_transp равным 1
READ ALSO
НОД для вещественных чисел

НОД для вещественных чисел

Здравствуйте! Передо мной стоит следующая задача: написать на C++ метод, вычисляющий НОД для 2 чисел типа int ИЛИ double(класс шаблонный)

300
Как обработать файл с пустыми строками?

Как обработать файл с пустыми строками?

В общем, вот в чем суть вопроса: есть файл, который я считываю и обрабатываю так, как надо по заданиюНо если в него вставить пустые строки, то выводит...

186
В чем ошибка C++ код [требует правки]

В чем ошибка C++ код [требует правки]

Задание - В цикле с предусловием пользователем вводятся числа до тех пор, пока их сумма не превысит 100Определить количество введенных четных...

206
Файловый ввод-вывод объектов класса

Файловый ввод-вывод объектов класса

Доброго времени сутокЕсть класс, есть менюшка для работы с классом (добавление, вывод объектов класса, удаление) Каким образом организовать...

211