Спасибо за ответ! Я решил вопрос с помощью Easy Watermark. Достаточно не плох в своем делеЕсть как минимум 3 бесплатных плагина для этого дела. Проверьте все внимательно. Если нет, возможно справится WooCommerce Product Image Watermark Plugin
# DirectoryIndex index.php
Options -Indexes
<FilesMatch "\.(jpg|JPG)$">
# <FilesMatch "\.(\/wp-admin\/).*$">
RewriteEngine On
# RewriteCond %{REQUEST_URI} !^/wp-admin/(.*)$
RewriteCond %{REQUEST_FILENAME} -f
# RewriteRule ^(.*)$ /watermark.php [T=application/x-httpd-php,L,QSA]
RewriteRule ^(.*)wp-content/uploads/(.*(jpg|JPG))$ /watermark-im2.php?img=wp-content/uploads/$2
</FilesMatch>
<?php
// ватермарк для http://terraturista.com
$img= $_GET['img'];
$image = new Imagick();
$image->readImage($img);
// $image->blurImage( 20, 10 );
$watermark = new Imagick();
// $watermark->readImage("watermark.png");
$watermark->readImage("terraturista_logo-2-water.png");
// how big are the images?
$iWidth = $image->getImageWidth(); $iHeight = $image->getImageHeight();
// elseif (($iHeight > 381 && $iHeight < 600) || ($iWidth > 381 && $iWidth < 749)) { $watermark->scaleImage($wWidth /2, $wHeight /2);}
// elseif (($iHeight > 601 && $iHeight < 1055) || ($iWidth > 750 && $iWidth < 1055)) { $watermark->scaleImage($wWidth /1.5 , $wHeight /1.5 );}
// elseif (($iHeight > 1056 && $iHeight < 1401) || ($iWidth > 1056 && $iWidth < 1401)) { $watermark->scaleImage($wWidth , $wHeight );}
// Переключаем размер ватермарка в зависимости от ширины и высоты фотографии
if ($iHeight > 380 || $iWidth > 380) {
$wWidth = $watermark->getImageWidth(); $wHeight = $watermark->getImageHeight();
// if ($iHeight < 380 || $iWidth < 380) { $watermark->scaleImage($wWidth /4, $wHeight /4);}
if ($iHeight > 381 && $iHeight < 600) { $watermark->resizeImage($wWidth *0.6, $wHeight *0.6, 0, 1); $watermark->unsharpMaskImage(0, 0.5, 1, 0);}
elseif ($iHeight > 601 && $iHeight < 1250) { $watermark->resizeImage($wWidth, $wHeight, 0, 1); }
else {$watermark->scaleImage($wWidth, $wHeight);}
// $watermark->setImageOpacity( 0.4 );
// get new size
$wWidth = $watermark->getImageWidth();
$wHeight = $watermark->getImageHeight();
// calculate the position
$x = ($iWidth - $wWidth) /1.04 ; // отступ с права
$y = ($iHeight - $wHeight) /1.02; // отступ с низу
$image->compositeImage($watermark, imagick::COMPOSITE_OVER, $x, $y);
// $image->setImageCompression(Imagick::COMPRESSION_JPEG);
// $image->setImageCompressionQuality(100);
// $image->borderImage(new ImagickPixel("green"), 5, 5); // создание рамки во круг картинки
// $image->sharpenimage('1', '1'); // ($radius, $sigma, $channel)
}
header("Content-Type: image/" . $image->getImageFormat());
echo $image;
А это только при загрузке новых фото работает?Я решил без плагинов. .htaccess и PHP скрипт
В папку /wp-content/uploads/ кладем файл .htaccess
Perl:# DirectoryIndex index.php Options -Indexes <FilesMatch "\.(jpg|JPG)$"> # <FilesMatch "\.(\/wp-admin\/).*$"> RewriteEngine On # RewriteCond %{REQUEST_URI} !^/wp-admin/(.*)$ RewriteCond %{REQUEST_FILENAME} -f # RewriteRule ^(.*)$ /watermark.php [T=application/x-httpd-php,L,QSA] RewriteRule ^(.*)wp-content/uploads/(.*(jpg|JPG))$ /watermark-im2.php?img=wp-content/uploads/$2 </FilesMatch>
в корень ложим файл watermark-im2.php и файл с картинкой, в моем случае terraturista_logo-2-water.png
Ее нужно заменить на Вашу.
PHP:<?php // ватермарк для http://terraturista.com $img= $_GET['img']; $image = new Imagick(); $image->readImage($img); // $image->blurImage( 20, 10 ); $watermark = new Imagick(); // $watermark->readImage("watermark.png"); $watermark->readImage("terraturista_logo-2-water.png"); // how big are the images? $iWidth = $image->getImageWidth(); $iHeight = $image->getImageHeight(); // elseif (($iHeight > 381 && $iHeight < 600) || ($iWidth > 381 && $iWidth < 749)) { $watermark->scaleImage($wWidth /2, $wHeight /2);} // elseif (($iHeight > 601 && $iHeight < 1055) || ($iWidth > 750 && $iWidth < 1055)) { $watermark->scaleImage($wWidth /1.5 , $wHeight /1.5 );} // elseif (($iHeight > 1056 && $iHeight < 1401) || ($iWidth > 1056 && $iWidth < 1401)) { $watermark->scaleImage($wWidth , $wHeight );} // Переключаем размер ватермарка в зависимости от ширины и высоты фотографии if ($iHeight > 380 || $iWidth > 380) { $wWidth = $watermark->getImageWidth(); $wHeight = $watermark->getImageHeight(); // if ($iHeight < 380 || $iWidth < 380) { $watermark->scaleImage($wWidth /4, $wHeight /4);} if ($iHeight > 381 && $iHeight < 600) { $watermark->resizeImage($wWidth *0.6, $wHeight *0.6, 0, 1); $watermark->unsharpMaskImage(0, 0.5, 1, 0);} elseif ($iHeight > 601 && $iHeight < 1250) { $watermark->resizeImage($wWidth, $wHeight, 0, 1); } else {$watermark->scaleImage($wWidth, $wHeight);} // $watermark->setImageOpacity( 0.4 ); // get new size $wWidth = $watermark->getImageWidth(); $wHeight = $watermark->getImageHeight(); // calculate the position $x = ($iWidth - $wWidth) /1.04 ; // отступ с права $y = ($iHeight - $wHeight) /1.02; // отступ с низу $image->compositeImage($watermark, imagick::COMPOSITE_OVER, $x, $y); // $image->setImageCompression(Imagick::COMPRESSION_JPEG); // $image->setImageCompressionQuality(100); // $image->borderImage(new ImagickPixel("green"), 5, 5); // создание рамки во круг картинки // $image->sharpenimage('1', '1'); // ($radius, $sigma, $channel) } header("Content-Type: image/" . $image->getImageFormat()); echo $image;
Я здесь сделал интересную фишку - Переключение размера ватермарка в зависимости от ширины и высоты фотографии
Иначе на вертикальных и горизонтальных фото будет по разному смотреться. Я под себя делал, можете с размерами сами поиграться
посмотреть как работает можно на http://terraturista.com/
Да! Для работы кода требуется Image Magick!
А это только при загрузке новых фото работает?