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

Наложить наименование товара на фото товара.


Recommended Posts

1 час назад, yanos сказал:

Добрый день. Помогите наложить наименование товара на фото товара наподобие водяного знака наверное с помощью библиотеки gd.

можна без библиотеки стилями наложить текст на картинку

Надіслати
Поділитися на інших сайтах

стилями знаю как. Но надо именно чтоб текст и картинка был один файл. Как минимум с наименования товара надо сделать картинку.

Что то наподобие

Делал файлик с таким содержимым

<?php  
    $text = urldecode($_GET['name']);
    $imgp = urldecode($_GET['img']);
    $imgs = ImageCreateFromJPEG($imgp);
    $color = imagecolorallocate($imgs, 0, 0, 0);
    $font = 'HelveticaRegular.ttf'
    imagettftext($imgs, 24, 0, 65, 150, $color, $font, $text);
header('Content-type: image/jpeg');
imagejpeg($imgs, NULL, 100);
//imagedestroy($imgs); // Clear Memory

?>

И этому файлу пытался передать переменные.

<img src="img.php?name=<?php echo urlencode($product['name']) ?>&img=<?php echo $product['thumb']; ?>" alt="" />

На примере просто двух файлов .php работает замечательно. В opencart так не работает.

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

Очень нужна помощь.

 

Змінено користувачем yanos
Надіслати
Поділитися на інших сайтах


2 часа назад, yanos сказал:

стилями знаю как. Но надо именно чтоб текст и картинка был один файл. Как минимум с наименования товара надо сделать картинку.

Что то наподобие

Делал файлик с таким содержимым

<?php  
    $text = urldecode($_GET['name']);
    $imgp = urldecode($_GET['img']);
    $imgs = ImageCreateFromJPEG($imgp);
    $color = imagecolorallocate($imgs, 0, 0, 0);
    $font = 'HelveticaRegular.ttf'
    imagettftext($imgs, 24, 0, 65, 150, $color, $font, $text);
header('Content-type: image/jpeg');
imagejpeg($imgs, NULL, 100);
 //imagedestroy($imgs); // Clear Memory

?>

И этому файлу пытался передать переменные.

<img src="img.php?name=<?php echo urlencode($product['name']) ?>&img=<?php echo $product['thumb']; ?>" alt="" />

На примере просто двух файлов .php работает замечательно. В opencart так не работает.

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

Очень нужна помощь.

 

1) если второй файлик это класс то тогда нужно его залить в system/library, и функцию с класа вызывать так $this->yourclass->ImageCreateFromJPEG();

2) если во втором файле только функции тогда нужно их в контролер вставить protected function ImageCreateFromJPEG() {} и вызывать как $this->ImageCreateFromJPEG();

3) или скиньте файл нужного контролера, файл с которого вы тестили и файл с функцыями я помогу разобраться, также укажыте версию опенкарта

  • +1 1
Надіслати
Поділитися на інших сайтах

Спасибо большое за помощь.

 

Я тестировал функцию наложения текста на картинку без опенкарта.

Первый файл содержал текст и имя картинки на которую накладывать текст и передавал переменные файлу img.php который накладывал.

 

<html>
	<body>
	<?php 	
		$name = 'ТЕСТ ТЕСТ ТЕСТ';
		for ($img = 1; $img <= 10; $img++) { ?>
			<img src="img.php?name=<?php echo urlencode($name) ?>&img=<?php echo ($img) ?>" alt="" />
	<?php } ?>
	</body>
</html>

Второй файл с именем img.php

<?php  
	$text = urldecode($_GET['name']);	
	$imgs = ImageCreateFromJPEG(urldecode($_GET['img'].".jpg")); //в opencart расширение jpg надо выкинуть т.к. передается полный путь
	
	$color = imagecolorallocate($imgs, 0, 0, 0);
	$font = 'HelveticaRegular.ttf';
	
	imagettftext($imgs, 24, 0, 65, 150, $color, $font, $text);
	header('Content-type: image/jpeg');
	imagejpeg($imgs, NULL, 100); 
	imagedestroy($imgs); // Clear Memory
?> 

Я хотел текст накладывать на фото товара в карточке категории (catalog/view/theme/default/template/product/category.tpl)

В цикле который выводит товары вставлял

<img src="img.php?name=<?php echo urlencode($product['name']) ?>&img=<?php echo $product['thumb']; ?>" alt="" />

Это несработало.

Как с этого собрать функцию в  catalog/controller/product/category.php (если вы про этот контроллер говорили) совсем не понимаю.

Попробовал

protected function ImageCreateFromJPEG() {
		
	$text = urldecode($product['name']);	
	$imgs = ImageCreateFromJPEG(urldecode($product['thumb']); 
	
	$color = imagecolorallocate($imgs, 0, 0, 0);
	$font = 'HelveticaRegular.ttf';
	
	imagettftext($imgs, 24, 0, 65, 150, $color, $font, $text);
	header('Content-type: image/jpeg');
	//imagejpeg($imgs, NULL, 100); 
	return (imagejpeg($imgs, NULL, 100));
	imagedestroy($imgs); // Clear Memory
	}

И потом в шаблоне вызвать

<div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $this->Imag eCreateFromJPEG(); ?>" class="img-responsive" /></a></div>

Так тоже ничего не получилось.

Надіслати
Поділитися на інших сайтах


11 часов назад, yanos сказал:

Версия ocstore 2.3.0.2

 

появилось время, начнем:

 

1) вставить в шаблон силку на картинку 

<img src="/?route=product/category/watermark&img=<?php echo $image['thumb']; ?>" alt="" />

 

2) создать функцию на пути ?route=product/category/watermark которая будет принимать переменные text i img

заходим в catalog/controller/product/category.php добавляем функцию

public function watermark() {
        $imgs = imagecreatefromjpeg(urldecode($_GET['img']));

        $color = imagecolorallocate($imgs, 0, 0, 0);
        $font = 'HelveticaRegular.ttf';

        imagettftext($imgs, 24, 0, 65, 150, $color, $font, 'Мой текст');
        header('Content-type: image/jpeg');
        imagejpeg($imgs, NULL, 100);
        imagedestroy($imgs);
    }

 

3) залить шрифт HelveticaRegular.ttf в корень сайта или другую папку но тогда поменяйте переменную $font = 'HelveticaRegular.ttf';

 

4) иногда требуется очистка кэша модули/модификаторы/обновить

 

  • +1 1
Надіслати
Поділитися на інших сайтах

Сделал. В результате ошибка "500".

Шрифт залил в корень сайта. Путь не менял.

Модификаторы все отключены, на всякий случай обновил. Кэш очистил.

 

А можно не передавать параметры, а на постоянной основе (может быть в контроллере) нанести на фото товара имя товара.

Вообще по мануалу php можно:

$img = imagecreatefromjpeg($product['thumb']); //фото товара
$color = imagecolorallocate($img, 0, 0, 0);
//пишем текст на фото
imagefttext($img, 13, 0, 105, 55, $color, $font, '$product['name']'); 
// Вывод изображения
header('Content-Type: image/png');
imagepng($im);

Но у меня никак не получилось такую конструкцию заставить работать даже на примере одного файла

Или может быть можно встроенную функцию "водяного знака" как то использовать?

Которая лежит /catalog/model/tool/imge.php

если после строки $image = new Image(DIR_IMAGE . $image_old);  добавить $image->watermark(new Image(DIR_IMAGE . 'watermark.png'), 'middlecenter'); Можно ли как то заменить watermark.png на наименование товара??

PS: еще раз спасибо за помощь

 

Змінено користувачем yanos
Надіслати
Поділитися на інших сайтах


9 часов назад, yanos сказал:

Сделал. В результате ошибка "500".

Шрифт залил в корень сайта. Путь не менял.

Модификаторы все отключены, на всякий случай обновил. Кэш очистил.

 

А можно не передавать параметры, а на постоянной основе (может быть в контроллере) нанести на фото товара имя товара.

Вообще по мануалу php можно:


$img = imagecreatefromjpeg($product['thumb']); //фото товара
$color = imagecolorallocate($img, 0, 0, 0);
//пишем текст на фото
imagefttext($img, 13, 0, 105, 55, $color, $font, '$product['name']'); 
// Вывод изображения
header('Content-Type: image/png');
imagepng($im);

Но у меня никак не получилось такую конструкцию заставить работать даже на примере одного файла

Или может быть можно встроенную функцию "водяного знака" как то использовать?

Которая лежит /catalog/model/tool/imge.php

если после строки $image = new Image(DIR_IMAGE . $image_old);  добавить $image->watermark(new Image(DIR_IMAGE . 'watermark.png'), 'middlecenter'); Можно ли как то заменить watermark.png на наименование товара??

PS: еще раз спасибо за помощь

 

если через контролер то нужно гдето эту картинку сохранять и вызывать ее по ее адресу, если уже через библиотеку image тогда вызывайте через $this->image() если не ошыбаюсь то эта библиотека сразу возвращает адрес готовой картинки но нужно смотреть

Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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