Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Изменить размер фото и наложить водяной знак, почему у меня это не работает?
nikki4  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 8 месяцев, 21 день
Карма:




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


нашел скрипт сжатия фотки:
<?php
$size=GetImageSize ("1.jpg");
$src=ImageCreateFromJPEG ("1.jpg");
$iw=$size[0];
$ih=$size[1];
$koe=$iw/800;
$new_h=ceil ($ih/$koe);
$dst=ImageCreateTrueColor (800, $new_h);
ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih);
ImageJPEG ($dst, "small_photo.jpg", 100);
imagedestroy($src);
?>


нашел скрипт наложения водяного знака
<?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();
}
?>




Попытался их соединить. Итог: фотка сжимается, но водяной знак не ставится
$koe=$w/800;
$new_h=ceil ($h/$koe);
$newimage=ImageCreateTrueColor (800, $new_h);
ImageCopyResampled ($newimage, $image, 0, 0, 0, 0, 800, $new_h, $w, $h);
// Соединяем новое изображение и водяной знак.(водяной знак будет расположен в нижнем правом углу), можете попробовать его двигать меняя 10 и 5.
imagecopy($newimage, $watermark, $w-$ww-15, $h-$wh-10, 0, 0, $ww, $wh);

}
imagealphablending($newimage, false);
imagesavealpha($newimage, true); // Устанавливаем прозрачность для png файла

//Изменив значение 100, вы можете снизить качество получаемого фото

imagejpeg($newimage, 'cache/' . $nameImageId, $quality);
header('Content-type: image/jpeg');
imagejpeg($newimage, NULL, $quality);
exit();



В качестве теста скрипта вставил не первый скрипт во второй, а наоборот, но все так же водяной знак не наносится
<?php

$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);


$size=GetImageSize ("1.jpg");
$src=ImageCreateFromJPEG ("1.jpg");
$iw=$size[0];
$ih=$size[1];
$koe=$iw/800;
$new_h=ceil ($ih/$koe);
$dst=ImageCreateTrueColor (800, $new_h);
ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih);
imagecopy($src, $watermark, $iw-$ww-15, $ih-$wh-10, 0, 0, $ww, $wh);
imagealphablending($dst, false);
imagesavealpha($dst, true); // Устанавливаем прозрачность для png файла

ImageJPEG ($dst, "small_photo.jpg", 100);

imagedestroy($src);
?>


Да и еще, странно, что готового скрипта, который это делает - почему-то не нашел. Может это как-то по другому делается?

например вот в движке (джумла) есть плагин, он сжимает фотки, но при этом он переименовывает файлы, а это хуже для seo, да и делать кэш с кэша на мой взгляд как-то не очень. вот и подумал как бы объединить сжатие и нанесение налету
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
qpurypaHT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 256
Пользователь №: 40254
На форуме: 2 года, 10 месяцев, 16 дней
Карма: 6




Цитата (nikki4 @ 11.01.2016 - 10:27)
Да и еще, странно, что готового скрипта, который это делает - почему-то не нашел.


--------------------
Если долго в одних стенах живешь, ты с ними сростаешься
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 8 месяцев, 21 день
Карма:




Цитата (Stave @ 11.01.2016 - 06:56)
Цитата (nikki4 @ 11.01.2016 - 10:27)
Да и еще, странно, что готового скрипта, который это делает - почему-то не нашел.

там только добавление водяного знака, без предварительного сжатия исходной картинки до 800х600
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
qpurypaHT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 256
Пользователь №: 40254
На форуме: 2 года, 10 месяцев, 16 дней
Карма: 6




Цитата (nikki4 @ 11.01.2016 - 11:11)
Цитата (Stave @ 11.01.2016 - 06:56)
Цитата (nikki4 @ 11.01.2016 - 10:27)
Да и еще, странно, что готового скрипта, который это делает - почему-то не нашел.

там только добавление водяного знака, без предварительного сжатия исходной картинки до 800х600

$filename = 'test.jpg';

list($width, $height) = getimagesize($filename);
$new_width = 300;
$new_height = 300;

$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

imagejpeg($image_p, 50); //50% это качество 0-100%


Нашел, не проверял


--------------------
Если долго в одних стенах живешь, ты с ними сростаешься
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 8 месяцев, 21 день
Карма:




Цитата (Stave @ 11.01.2016 - 06:56)

Нашел, не проверял

у меня не заработал.
Впрочем по коду видно - что это только сжатие картинки.

выше же писал, что я уже нашел оба скрипта и на сжатие и на водяной знак - оба рабочие.
но нужно чтобы они работали одновременно сразу оба.

сначала картинка сжимается, потом наносится водяной знак и только после этого сохраняется.
я попробовал это сделать, но почему-то не работает. Вот я и обратился поправить, что я не так в коде написал


т.е. я где-то тут что-то не правильно сделал. какую-то переменную или еще одну функцию может добавить
$dst=ImageCreateTrueColor (800, $new_h); 
ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih); // сжимает фотку
imagecopy($dst, $watermark, $iw-$ww-15, $ih-$wh-10, 0, 0, $ww, $wh); //наносит водяной знак, но по факту почему-то не наносит
imagealphablending($dst, false);
imagesavealpha($dst, true); // Устанавливаем прозрачность для png файла

ImageJPEG ($dst, "small_photo.jpg", 100);
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1605
Пользователь №: 28976
На форуме: 5 лет, 11 месяцев, 23 дня
Карма: 100




посмотрите может у вас установлена библиотека Imagick.
через
phpinfo();

будет намного проще.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 8 месяцев, 21 день
Карма:




Цитата (Kusss @ 11.01.2016 - 07:56)
посмотрите может у вас установлена библиотека Imagick.
через
phpinfo();

будет намного проще.

библиотека видимо не установлена (не нашел слов этих)
но попробую разобраться как установить (у меня vds)
если действительно есть готовое и простое решение, а то уже и так столько часов на это потратил.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22932
Пользователь №: 20039
На форуме: 7 лет, 7 месяцев, 14 дней
Карма: 608




А может не будем далеко бегать и заглянем в официальную документацию по PHP ? smile.gif
Не спорю, что у Попова статьи не его, а код - обычный перевод местами неплохих решений, но всё же, когда есть php.net , то только там и надо смотреть же:
http://php.net/manual/ru/image.examples-watermark.php


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 8 месяцев, 21 день
Карма:




Цитата (inpost @ 11.01.2016 - 09:30)
А может не будем далеко бегать и заглянем в официальную документацию по PHP ? :)
Не спорю, что у Попова статьи не его, а код - обычный перевод местами неплохих решений, но всё же, когда есть php.net , то только там и надо смотреть же:
http://php.net/manual/ru/image.examples-watermark.php

да писал же уже.
как поставить водяной знак - понятно
как сжать картинку - понятно.
а как сделать, чтобы сжималась картинка, а потом сразу наносился водяной знак - не понятно.

вот я попробовал тестовый пример сделать. но водяной знак не наносится, а картинка сжимается.
<?php


$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);


$size=GetImageSize ("1.jpg"); //1.jpg - тестовая картинка для обработки
$src=ImageCreateFromJPEG ("1.jpg");
$iw=$size[0];
$ih=$size[1];
$koe=$iw/800;
$new_h=ceil ($ih/$koe); //вычисление новой, пропорциональной высоты картинки

$dst=ImageCreateTrueColor (800, $new_h); //создание черного квадрата 800 в ширину и с новой высотой
ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih);//сжатие картинки (помещение большой картинки в черный квадрат)
imagecopy($src, $watermark, $iw-$ww-15, $ih-$wh-10, 0, 0, $ww, $wh);//нанесение водяного знака
imagealphablending($dst, false);
imagesavealpha($dst, true); // Устанавливаем прозрачность для png файла

ImageJPEG ($dst, "small_photo.jpg", 100);

imagedestroy($src);
?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22932
Пользователь №: 20039
На форуме: 7 лет, 7 месяцев, 14 дней
Карма: 608




nikki4
ImageCopyResampled ($dst - В переменную $dst ты сохранил уменьшенное изображение
imagecopy($src - в $src ты добавил watermark.
ImageJPEG ($dst - вывел $dst

У тебя watermark добавляется в $src изображение, в СТАРОЕ, а не НОВОЕ.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 8 месяцев, 21 день
Карма:




спасибо, короче отбой. до меня только что дошло, что придется все как раньше софтом сжимать фотки.

не сжатые фотки могут до 60мб размер иметь примерно...
это для кулинарного сайта.. а когда там будет 1000 фото-рецептов.. это уже 30-60 гигов одних только фоток...
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6277
Пользователь №: 5552
На форуме: 9 лет, 14 дней
Карма: 164




60мб одна фотография? Это за фото такое? smile.gif


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15394
Пользователь №: 4190
На форуме: 9 лет, 5 месяцев, 15 дней
Карма: 470




Цитата (waldicom @ 11.01.2016 - 18:17)
60мб одна фотография? Это за фото такое?

Если с хорошим разрешением, да в формате BMP... Занефигделать, я думаю smile.gif


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
nikki4  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 135
Пользователь №: 19542
На форуме: 7 лет, 8 месяцев, 21 день
Карма:




Цитата (waldicom @ 11.01.2016 - 14:17)
60мб одна фотография? Это за фото такое? smile.gif

не одна, а пачка фоток.
фото-рецепты для кулинарного сайта. может быть по 7-20 фоток на 1 рецепт.
а фотки по 1-3мб
вот и получается что один фото-рецепт без сжатия 7-60МБ в среднем правда переборщил, обычно около 15мб.. но всеже..

хотя вот смотрю архивы, бывают и по 60-100мб фотки шлют.
вот открыл один из архивов 13 фоток по 7-8 мб каждая
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1605
Пользователь №: 28976
На форуме: 5 лет, 11 месяцев, 23 дня
Карма: 100




уменьшаешь размер до 1200 по ширине (больше и не нужно), и качество 85% . будет максимум 0.7 метра.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса