Jump to content

Miniatures, comment faire un crop ? (Prestashop 1.5.5.0)


Recommended Posts

Bonjour,

 

Je viens d'installer un thème sur mon Prestashop 1.5.5.0 et j'ai généré les miniatures...

 

Le problème, c'est qu'elles sont maintenant de forme rectangulaire et j'aimerais qu'elles soient à nouveau de forme carrée... (je vais modifier mon thème ensuite).

 

Elles ont toutes la même taille/proportions, en plus clair j'aimerais couper toutes mes miniatures ainsi :

 

crop.jpg

 

D'avance je remercie la personne qui pourra m'aider !

 

Biwix

Edited by biwix (see edit history)
Link to comment
Share on other sites

Si elles sont de taille rectangulaire, c'est que vous n'avez pas spécifié une taille carré.

Vous pouvez spécifier les tailles de chaque "types" d'image que vous utiliser dans Préférences > Images au dessus du bloc de regénération des miniatures.

Link to comment
Share on other sites

Bonjour,

 

À la base elles étaient de forme carrée. Le thème que j'utilise demandait de définir des images rectangulaires. J'ai donc défini les tailles ainsi, puis j'ai utilisé l'outil de régénération.

 

Mais finalement, je préfère avoir des images carrées. J'ai l'impression que si je redéfinis des images carrées, et que j'utilise l'outils tel quel, ça va bien refaire des images carrées, seulement en ajoutant cette fois ci des bandes blanches à gauche et à droite de l'image, c'est juste ? On est d'accord ?

 

Moi je voudrais forcer l'outils à couper le haut et le bas de l'image, toujours de la même manière, de sorte à avoir à nouveau des images carrées ET SURTOUT sans ces bandes blanches...

 

Je crois que l'on doit modifier quelque chose dans images.inc.php ou dans le style, car sur la version 1.5.5.0 on dirait qu'il faut utiliser une autre méthode, juste ?

 

D'avance je vous remercie...

Link to comment
Share on other sites

Effectivement, il y aurait une bande blanche selon le format initial de l'image.

A l'époque de < 1.5 on pouvait modifier une ligne dans images.inc.php pour cropé/centré les images. Ca fonctionnait pas mal.

CF ce topic : http://www.prestashop.com/forums/topic/56292-resolu-modifier-le-resize-automatique-des-image-de-produits-en-crop/

 

EN 1.5, je pense qu'il faut aller faire la modif dans /classes/ImageManager.php

 

la ligne 157 

			if (Configuration::get('PS_IMAGE_GENERATION_METHOD') == 2 || (!Configuration::get('PS_IMAGE_GENERATION_METHOD') && $width_diff > $height_diff))

deviendrais

			if (Configuration::get('PS_IMAGE_GENERATION_METHOD') == 2 || (!Configuration::get('PS_IMAGE_GENERATION_METHOD') && $width_diff < $height_diff))

Link to comment
Share on other sites

Alors j'avais trouvé ceci, qui consiste à créer de nouvelle miniature en les renommant avec "_btt" à la fin...

 

Voici le code que j'ai trouvé pour "AdminImagesController.php" :

<?php

// Usage:
// Replace the contents of: 
// /overrides/classes/ImageManager.php
// With this document. Then just add a new image size in the Backoffice :
// Preferences -> Images -> Add New
// AND name it whatever_btt (attach '_btt' at the end of the name string)
// THEN just use this image size where you want 

// CAUTION! Check if you're using the same version of Prestashop as we do: 1.5.2
// (should work in all 1.5.xs though but we never checked 

// Good luck - Bazinga Designs
// http://www.bazingadesigns.com/en

class ImageManager extends ImageManagerCore
{

	/**
	 * Resize, cut and optimize image
	 *
	 * Zoom & Croop when the destination file name
	 * contains the '_timthumb' phrase
	 * - Modified by www.bazingadesigns.com/en
	 * (TimThumb ZoomCrop port)
	 *
	 * @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 (!file_exists($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' && $type == IMAGETYPE_PNG) && !$force_type)
			$file_type = 'png';
		
		if (strpos($dst_file, '_btt')!==FALSE)
			$zoomCrop = true;

		if (!$src_width)
			return false;

		if ($zoomCrop == true) {

			if (!$dst_width) $dst_width = 0;
			if (!$dst_height) $dst_height = 0;

		} else {

			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 ($zoomCrop==true) {
		 
			if ($dst_width>0 && $dst_height<1) {
				$dst_height = floor ($src_height * ($dst_width / $src_width));
			} else if ($dst_height>0 && $dst_width<1) {
				$dst_width = floor ($src_width * ($dst_height / $src_height));
			}
				 
			$src_x = $src_y = 0;
			$src_w = $src_width;
			$src_h = $src_height;
			
			$cmp_x = $src_width / $dst_width;
			$cmp_y = $src_height / $dst_height;
			
			if ($cmp_x > $cmp_y) {
			
				$src_w = round (($src_width / $cmp_x * $cmp_y));
				$src_x = round (($src_width - ($src_width / $cmp_x * $cmp_y)) / 2);
			
			} else if ($cmp_y > $cmp_x) {
			
				$src_h = round (($src_height / $cmp_y * $cmp_x));
			  	$src_y = round (($src_height - ($src_height / $cmp_y * $cmp_x)) / 2);
			
			}
			 			
		}

		else if ($width_diff > 1 && $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') && $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);
			}
		}

		$dest_image = imagecreatetruecolor($dst_width, $dst_height);

		// If image is a PNG and the output is PNG, fill with transparency. Else fill with white background.
		if ($file_type == 'png' && $type == IMAGETYPE_PNG)
		{
			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);
		}
		else
		{
			$white = imagecolorallocate($dest_image, 255, 255, 255);
			imagefilledrectangle ($dest_image, 0, 0, $dst_width, $dst_height, $white);
		}

		if ($zoomCrop==true)  			
			imagecopyresampled($dest_image, $src_image, 0, 0, $src_x, $src_y, $dst_width, $dst_height, $src_w, $src_h);
		else
			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));
	}

}

Est-ce que si je change le test à la ligne 48 :

if (strpos($dst_file, '_btt')!==FALSE)

par :

if (strpos($dst_file, '_btt')!==TRUE)

je peux éviter de renommer mes images avec "_btt" à la fin, et au final j'aurai exactement que je veux, ou c'est pas si simple ?

 

 

Encore merci pour vos réponses ;-)

Link to comment
Share on other sites

Bonjour,

 

Je ne pense pas que vous ayez besoin de toucher au php. Il faut simplement remettre vos formats carrés dans l'admin puis regénérer les images. Il vous restera ensuite à adapter le thème pour les images carrées, notamment dans les CSS.

Link to comment
Share on other sites

Bonjour,

 

En fait comme mon image de base était de forme carrée, et puis ensuite régénérée en rectangle, je n'ai eu qu'à redéfinir une forme carrée et refaire une régénération standard... ça fonctionne car mon image à la base était comme je le souhaitais...

 

Merci à tous,

 

Salutations,

 

Biwix

Link to comment
Share on other sites

  • 2 months later...

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
×
×
  • Create New...