Как указать, что бы на маленьких картинках, не прописывался водяной знак. Или как вообще запретить водяной знак на фото меньше определённого размера Код (CODE): <?php // Скрипт скачен с wdda.pro // Путь до файла с оригинальным изображением $path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']; $nameImage = end(explode('/', $_SERVER['REQUEST_URI'])); // Имя изображения $nameImageId = md5($path). $nameImage; // Проверяем дату для рефреша кеша $dateImage = filemtime($path); $dateImageCache = @filemtime($_SERVER['DOCUMENT_ROOT'] . "/watermark/cache/" . $nameImageId); //Устанавливаем качество (вес) картинки на выходе $quality = 100; if(file_exists('cache/' . $nameImageId) && $dateImage < $dateImageCache) { $image = imagecreatefromstring(file_get_contents('cache/' . $nameImageId)); header('Content-type: image/jpeg'); imagejpeg($image, NULL, $quality); exit(); } else // Если же нет такой картинки в кэше { // Загружаем оригинальное изображение $image = imagecreatefromstring(file_get_contents($path)); // Получаем ширину и высоту оригинально изображения $w = imagesx($image); $h = imagesy($image); // Загружаем изображение с водяным знаком $watermark = imagecreatefrompng('watermark.png'); //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк if($w == 235) { $watermark = imagecreatefrompng('watermark_m.png'); } // Получаем ширину и высоту водяного знака $ww = imagesx($watermark); $wh = imagesy($watermark); // Соединяем оригинальное изображение и водяной знак.(водяной знак будет расположен в нижнем правом углу), можете попробовать его двигать меняя 10 и 5. imagecopy($image, $watermark, $w-$ww-10, $h-$wh-5, 0, 0, $ww, $wh); imagealphablending($image, false); imagesavealpha($image, true); // Устанавливаем прозрачность для png файла //Изменив значение 100, вы можете снизить качество получаемого фото imagejpeg($image, 'cache/' . $nameImageId, $quality); header('Content-type: image/jpeg'); imagejpeg($image, NULL, $quality); exit(); } ?> В коде есть такое место, может всё же кто-нибудь подскажет как сделать! //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк if($w == 235) { $watermark = imagecreatefrompng('watermark_m.png'); }
У меня большинство маленьких картинок 300х200, но есть и другие размеры Сделал так не помогло. if($w == 235) { $watermark = '300'; } вот сайт http://туризм-фотографии.рф/
//Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк if($w == 235) -- Это написано разработчиком вот надо поставить свое значение, предложенный тобой вариант { $watermark = '300'; } не подошел У меня много маленьких фото с разным разрешением было бы удобнее вообще запретить водяной знак на фото меньше определённого размера.
Если перевести на русский, то то условие что янаписал в самом начале говорит: если ширина фото равна 235, то ватермарк не использовать. У тебя ширина равна 300. В моем условии вместо 235 поставь 300. Если надо для все которые меньше, то можно попробовать использовать сравнение <= (меньше либо равно) вместо == ( равно)
Я в пхп ноль, но если я правильно понял, то нужно сделать так { $watermark <= '350'; } то есть мы указали что на фото ширина которых 350 и меньше ватермак не использовать //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк if($w <= 350) здесь мы сказали, что маленький ватермак использовать на фото 350 и меньше Но ни каких изменений не произошло, пробовал убрать if($w <= 350), думал может как то конфликтует, тоже результата нет.
Убираем лишнее, а проверку раньше запускаем Код (PHP): $watermark=""; if($w >= 235) // Загружаем изображение с водяным знаком $watermark = imagecreatefrompng('watermark.png'); эту часть кода удалить Код (PHP): //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк if($w == 235) { $watermark = imagecreatefrompng('watermark_m.png'); }
Не не выходит Сделал так Код (CODE): if($w >= 350) // Загружаем изображение с водяным знаком { $watermark = imagecreatefrompng('watermark.png'); } Пробовал это $watermark = imagecreatefrompng('watermark.png'); и без скобок как указано выше, разницы нет Мне наверное проще было бы что бы на фото от 300 и меньше вообще не было ватермака На всякий случай приведу большую часть кода может там что кроется Код (CODE): { // Загружаем оригинальное изображение $image = imagecreatefromstring(file_get_contents($path)); // Получаем ширину и высоту оригинально изображения $w = imagesx($image); $h = imagesy($image); if($w >= 350) // Загружаем изображение с водяным знаком { $watermark = imagecreatefrompng('watermark.png'); } // Получаем ширину и высоту водяного знака $ww = imagesx($watermark); $wh = imagesy($watermark); // Соединяем оригинальное изображение и водяной знак.(водяной знак будет расположен в нижнем правом углу), можете попробовать его двигать меняя 10 и 5. imagecopy($image, $watermark, $w-$ww-10, $h-$wh-5, 0, 0, $ww, $wh); imagealphablending($image, false); imagesavealpha($image, true); // Устанавливаем прозрачность для png файла //Изменив значение 100, вы можете снизить качество получаемого фото imagejpeg($image, 'cache/' . $nameImageId, $quality); header('Content-type: image/jpeg'); imagejpeg($image, NULL, $quality); exit(); }
я тоже на кеш думал несколько раз браузер обновлял, потом через браузер tor пробовал, далее очистил в панели управления весь кеш, результата нет
А Вы как проверяете? Просто обновляете страницу и смотрите? Пробовали загружать новую фотку? На них тоже добавляет?
Сейчас попробовал на новую фотку маленького размера ватермак не добавился. Выходит то что с существующих фоток ватермак теперь не уберешь?
Да. Я посмотрел исходный код сайта Вашего. Там подгрузка идет реальных картинок. Т.е. ватермарк уже наложен на них. Т.е. он не на лету накладывается, что, собственно, правильно. Вопрос в том, как у Вас формируется маленькое изображение. Можно попробовать их тупо удалить все, чтобы они перегенерировались заново. Только не забудьте сначала бекап сайта сделать!!!
Взял просто скопировал фото с хостинга на ноут ничего не меняя и закачал заново, то есть перезаписал ватермак пропал