Убираем шумы с фотографий в Opencart
Делаем фотографии на белом фоне чистыми и привлекательными

Как известно всем пользователям интернет-магазинов на движке Opencart, что при загрузке изображения на сайт оно проходит обработку во встроенном «ресайзере», который создаёт из оригинального изображения множество копий разного размера — миниатюр.
Работает с Opencart 1.5.x, Opencart 2.x, а также с ocStore 1.5.x и ocStore 2.x
При этом ресайзер сильно ухудшает качество исходного изображения, в результате чего на фото появляются паразитные шумы и различные неприятные пятна, которые делают из красивой фотографии отвратительную, поэтому я сделал модуль, который решает эту проблему.
Данный модуль позволяет значительно улучшить качество изображений путём исключения паразитного шума и пятен с загружаемых изображений.
В качестве положительного «побочного эффекта» от работы этого модуля наблюдается уменьшение «веса» финальных миниатюр, что при больших объемах фотографий значительно экономит место на хостинге.
Код и файл модуля для Opencart 1.5.x
Модуль работает с белым фоном и форматом изображений JPG/JPEG
Скопируй код ниже в файл с названием 1.5.X-remove-noise-gd и расширением .xml или скачай готовый файл ниже.
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id>1Z Удаление шума на белом фоне фотографий [1.5.X]</id>
<version>1.0.2</version>
<vqmver>1.1.0</vqmver>
<author>mrcivic</author>
<file name="system/library/image.php">
<operation>
<search position="after"><![CDATA[imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->info['width'], $this->info['height']);]]></search>
<add><![CDATA[
self::clearNoise($this->image, $width, $height);
]]></add>
</operation>
<operation>
<search position="before"><![CDATA[public function watermark($file, $position = 'bottomright') {]]></search>
<add><![CDATA[
public function clearNoise($newImg, $newWidth, $newHeight) {
$colorWhite = imagecolorallocate($newImg, 255, 255, 255);
for($y=0; $y<($newHeight); ++$y)
{
for($x=0; $x<($newWidth); ++$x)
{
$colorat=imagecolorat($newImg, $x, $y);
$r = ($colorat >> 16) & 0xFF;
$g = ($colorat >> 8) & 0xFF;
$b = $colorat & 0xFF;
if(($r == 253 && $g == 253 && $b == 253) || ($r == 254 && $g == 254 && $b ==254)) {
imagesetpixel($newImg, $x, $y, $colorWhite);
}
}
}
}
]]></add>
</operation>
<operation>
<search position="after"><![CDATA[imagecopy($this->image, $image_old, 0, 0, $top_x, $top_y, $this->info['width'], $this->info['height']);]]></search>
<add><![CDATA[
self::clearNoise($this->image, $bottom_x - $top_x, $bottom_y - $top_y);
]]></add>
</operation>
</file>
</modification>
Загрузи и установи файл модификатора через vQmod и очисти кэш модификаторов. Также обязательно необходимо очистить кэш изображений у тебя на сайте и в браузере.
Код и файл модуля для Opencart 2.x
Модуль также работает с белым фоном и форматом изображений JPG/JPEG
Скопируй код ниже в файл с названием 2.X-remove-noise-gd.ocmod и расширением .xml или скачай готовый файл ниже.
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<name>1Z Удаление шума на белом фоне фотографий [2.x]</name>
<code>1Z Удаление шума на белом фоне фотографий [2.x]</code>
<version>1.0.1</version>
<author>mrcivic</author>
<link>https://opencartforum.com/user/716269-mrcivic/</link>
<file path="system/library/image.php">
<operation error="skip">
<search><![CDATA[public function watermark($watermark, $position = 'bottomright') {]]></search>
<add position="before">
<![CDATA[
public function clearNoise($newImg, $newWidth, $newHeight) {
$colorWhite = imagecolorallocate($newImg, 255, 255, 255);
for($y=0; $y<($newHeight); ++$y)
{
for($x=0; $x<($newWidth); ++$x)
{
$colorat=imagecolorat($newImg, $x, $y);
$r = ($colorat >> 16) & 0xFF;
$g = ($colorat >> 8) & 0xFF;
$b = $colorat & 0xFF;
if(($r == 253 && $g == 253 && $b == 253) || ($r == 254 && $g == 254 && $b ==254)) {
imagesetpixel($newImg, $x, $y, $colorWhite);
}
}
}
}
]]></add>
</operation>
<operation error="skip">
<search><![CDATA[imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->width, $this->height);]]></search>
<add position="after">
<![CDATA[
self::clearNoise($this->image, $width, $height);
]]></add>
</operation>
<operation error="skip">
<search><![CDATA[imagecopy($this->image, $image_old, 0, 0, $top_x, $top_y, $this->width, $this->height);]]></search>
<add position="after">
<![CDATA[
self::clearNoise($this->image, $bottom_x - $top_x, $bottom_y - $top_y);
]]></add>
</operation>
</file>
</modification>
Загрузи и установи файл модификатора через Ocmod-установщик в админке и следом очисти кэш модификаторов. Затем обязательно очисти кэш изображений в админке сайта и у себя в браузере.
Вывод
В качестве вывода можно сказать о том, что модуль «Удаление шума с фотографий Opencart» — необычайно полезная штука, которая повысит качество фотографий твоих товаров и услуг, предлагаемых на сайте, а в след за этим и конверсия увеличится. Людям нравятся красивые фотографии, а не пожеванные как, из жопы.
Плюс к этому модуль уменьшает объем миниатюр, что положительно отразится на количестве занимаемого места на хостинге и скорости их загрузки в браузерах клиентов.
Модуль работает только с изображениями в формате JPG/JPEG, которые имеют белый фон.
Если у тебя возникли вопросы, замечания и/или пожелания — напиши мне в комментариях к этой записи, я с радостью тебе отвечу!
Также почитать об этом модуле и скачать файлы ты можешь на OpenCartForum: https://opencartforum.com/files/file/4055-udalenie-shuma-s-fotografiy-na-belom-fone/