Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Ne pas ajouter de cadre blanc autour de vos images sous Prestashop

Lorsqu’on upload une image produit (ou autre) dans prestashop, ce dernier la redimensionne selon les différents formats spécifiés dans “préférences/images”. C’est très pratique mais malheureusement prestashop ajoute systématiquement un fond blanc autour de l’image si cette dernière n’est pas exactement proportionnelle aux différents formats (ce qui arrive la plupart du temps).
Voici une solution pour que le fond soit transparent plutôt que blanc, vous pourrez ainsi le gérer plus facilement vos règles CSS.

Il suffit pour cela de faire un override de la méthode “resize” de la classe “ImageManager”.

Créez un fichier nommé “imageManager.php” dans le dossier “override/classes” et ajoutez-y le code suivant:


<?php
class ImageManager extends ImageManagerCore
{

	/**
	 * Resize, cut and optimize image
	 *
	 * @param string $src_file Image object from $_FILE
	 * @param string $dst_file Destination filename
	 * @param integer $dst_width Desired width (optional)
	 * @param integer $dst_height Desired height (optional)
	 * @param string $file_type
	 * @return boolean Operation result
	 */
	public static function resize($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = 'jpg', $force_type = false)
	{
		if (PHP_VERSION_ID < 50300)
			clearstatcache();
		else
			clearstatcache(true, $src_file);
		
		if (!file_exists($src_file) || !filesize($src_file))
			return false;
		list($src_width, $src_height, $type) = getimagesize($src_file);

		// If PS_IMAGE_QUALITY is activated, the generated image will be a PNG with .jpg as a file extension.
		// This allow for higher quality and for transparency. JPG source files will also benefit from a higher quality
		// because JPG reencoding by GD, even with max quality setting, degrades the image.
		if (Configuration::get('PS_IMAGE_QUALITY') == 'png_all'
			|| (Configuration::get('PS_IMAGE_QUALITY') == 'png' &amp;amp;&amp;amp; $type == IMAGETYPE_PNG) &amp;amp;&amp;amp; !$force_type)
			$file_type = 'png';

		if (!$src_width)
			return false;
		if (!$dst_width)
			$dst_width = $src_width;
		if (!$dst_height)
			$dst_height = $src_height;

		$src_image = ImageManager::create($type, $src_file);

		$width_diff = $dst_width / $src_width;
		$height_diff = $dst_height / $src_height;

		if ($width_diff > 1 &amp;amp;&amp;amp; $height_diff > 1)
		{
			$next_width = $src_width;
			$next_height = $src_height;
		}
		else
		{
			if (Configuration::get('PS_IMAGE_GENERATION_METHOD') == 2 || (!Configuration::get('PS_IMAGE_GENERATION_METHOD') &amp;amp;&amp;amp; $width_diff > $height_diff))
			{
				$next_height = $dst_height;
				$next_width = round(($src_width * $next_height) / $src_height);
				$dst_width = (int)(!Configuration::get('PS_IMAGE_GENERATION_METHOD') ? $dst_width : $next_width);
			}
			else
			{
				$next_width = $dst_width;
				$next_height = round($src_height * $dst_width / $src_width);
				$dst_height = (int)(!Configuration::get('PS_IMAGE_GENERATION_METHOD') ? $dst_height : $next_height);
			}
		}

		if (!ImageManager::checkImageMemoryLimit($src_file))
			return false;
		
		$dest_image = imagecreatetruecolor($dst_width, $dst_height);

		//ici on applique un fond transparent quelque soit le type de fichier.
		imagealphablending($dest_image, false);
		imagesavealpha($dest_image, true);
		$transparent = imagecolorallocatealpha($dest_image, 255, 255, 255, 127);
		imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $transparent);

		imagecopyresampled($dest_image, $src_image, (int)(($dst_width - $next_width) / 2), (int)(($dst_height - $next_height) / 2), 0, 0, $next_width, $next_height, $src_width, $src_height);
		return (ImageManager::write($file_type, $dest_image, $dst_file));
	}
}


Si jamais votre override ne s’applique pas pensez à supprimer le fichier “class_index.php” qui se trouve dans le dossier “cache” à la racine de votre boutique.

Poster un Commentaire

11 Commentaires sur "Ne pas ajouter de cadre blanc autour de vos images sous Prestashop"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
Chantal
Invité

Bonjour, j’ai appliqué vos conseils et cela ne fonctionne pas. Dommage.

anelor
Invité
anelor

Bonjour,

j’ai essayé votre méthode mais cela ne fonctionne pas.
Et j’ai bien supprimé le fichier « class_index.php ».

Pouvez vous m’éclairer?

Merci

Anelor

ouazizi mouhssine
Invité

merci mon ami ça marche bien

anelor
Invité
anelor

Bonjour, serait-il possible d’avoir de l’aide?
j’ai toujours mon caré blanc derriere mes photos.

Merci

Claude
Invité
Claude

Pour enlever le pourtour blanc du produit dans l’affichage d’une catégorie,
fichier “prestashop\themes\default-bootstrap\css\product_list.css”,
supprimer la ligne 163 sur le background et mettre le border de la ligne 167 à 0.
Pour une meilleure lisibilité, j’ai voulu que le nom du produit sous la photo du produit soit en gras, fichier “prestashop\themes\default-bootstrap\css\global.css”,
à la ligne 6243, rajouter cette ligne :
font-weight: bold;

Cela fonctionne sur la version 1.6.1.1, mais je pense que cette manip peut se réaliser sur les versions précédentes.

A +

Claude

Repitol
Invité
Repitol

Désolé ça ne fonctionne pas sur ma version 1.6.15
cache vidé, navigateur et PS.

wpDiscuz