Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Реализация вотермарки


Muvka

Recommended Posts

Здравствуйте. Покритикуйте мою реализацию вотермарки. Требования были такие - ее можно включать и выключать для каждого товара индивидуально и от меня требование, чтобы она была одинакового размера на любом разрешении изображения.

Вот модификатор

<file path="catalog/model/tool/image.php">
    <operation>
      <search><![CDATA[public function resize($filename, $width, $height)]]></search>
      <add position="replace"><![CDATA[public function resize($filename, $width, $height, $watermark = false)]]></add>
    </operation>

    <operation>
      <search><![CDATA[$image_new = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.' . $extension;]]></search>
      <add position="replace"><![CDATA[
        if ($watermark) {
          $image_new = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '_wm.' . $extension;
        } else {
          $image_new = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.' . $extension;
        }
      ]]></add>
    </operation>

    <operation>
      <search><![CDATA[if ($width_orig != $width || $height_orig != $height) {]]></search>
      <add position="replace"><![CDATA[if ($width_orig != $width || $height_orig != $height || $watermark) {]]></add>
    </operation>

    <operation>
      <search><![CDATA[$image->resize($width, $height);]]></search>
      <add position="after"><![CDATA[
        if ($watermark) {
          $watermark_resized = $this->resize($this->config->get('config_watermark'), $width, $height);
					$watermark_resized = preg_replace('/.*image\//', '', $watermark_resized);
          $image->watermark(new Image(DIR_IMAGE . $watermark_resized), 'middlecenter');
        }
      ]]></add>
    </operation>
  </file>

Я спрашивают только про модель изображения.

  1. Передаю вотермарку доп параметром.
  2. Если включена вотермарка, добавляю _wm к имени файла, т.к. и на сервере чтобы сгенерировался файл при отключении/включении и чтобы из кэша браузера бралось нужное изображение
  3. Тут серверу немного лишней работы придется сделать, если марка включена. По дефолту, если целевое разрешение файла сходится с исходным, файл просто копировался. Теперь будет лишний раз ресайзиться. Иначе просто марка не применяется к таким изображениям.
  4. Вот тут мне больше всего не нравится. Чтобы марка была под размер изображения, сначала прогоняю ее через resize, но в итоге я получаю имя файла на сервере. Если эту ссылку передать в new Image - вылезает ошибка, что не может подгрузить файл. В конструктор Image нужно передавать путь до файла от корня сервера. И поэтому я удаляю все, что идет до cache в пути изображения. Вот тут может есть более изящное решение?
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.