Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


Recommended Posts

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

<?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.

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

 

Edited by yanos
Link to post
Share on other sites

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
Link to post
Share on other sites

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

 

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

Первый файл содержал текст и имя картинки на которую накладывать текст и передавал переменные файлу 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>

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

Link to post
Share on other sites

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
Link to post
Share on other sites

Сделал. В результате ошибка "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: еще раз спасибо за помощь

 

Edited by yanos
Link to post
Share on other sites

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() если не ошыбаюсь то эта библиотека сразу возвращает адрес готовой картинки но нужно смотреть

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.