2009-11-25 2 views
2

Sur un site Magento, je ne télécharge qu'une image par produit, et je l'utilise comme image de base, petite et miniature. Cependant, mes images ne sont pas carrées, donc j'obtiens un fond noir ajouté à la vignette créée. Des idées pour changer cela en fond blanc?Magento - Suppression du fond noir des miniatures automatiques?

http://www.magentocommerce.com/?ACT=25&fid=10&aid=10785_osKeOnfKFLFvgqVYbr0j&board_id=1

J'ai cherché pour cela, mais ne peut pas trouver une réponse décente partout ...

Répondre

3

J'ai trouvé une solution pour cela. L'effet secondaire est que la classe utilisée pour le redimensionnement de l'image remplira toutes les images avec du blanc (même transparent), mais cela n'affecte pas vraiment Magento car il n'utilise pas de remplissage transparent de toute façon. Donc, pour résoudre le problème faire:

  1. Aller à lib\Varien\Image\Adapter\Gd2.php dans votre dossier magento
  2. Trouver cette ligne

    $this->_fillBackgroundColor($newImage); 
    

    et le remplacer par cette ligne

    $this->_fillBackgroundColor($newImage,$frameWidth,$frameWidth); 
    
  3. Trouver cette ligne

    private function _fillBackgroundColor(&$imageResourceTo) 
    

    et le remplacer par ce

    private function _fillBackgroundColor(&$imageResourceTo,$w,$h) 
    
  4. Trouver ce code

    if (!imagefill($imageResourceTo, 0, 0, $color)) { 
        throw new Exception("Failed to fill image background with color {$r} {$g} {$b}."); 
    } 
    

    et le remplacer par ce

    imagefilledrectangle($imageResourceTo,0,0,$w,$h,$color); 
    

Ce qu'il est. Le problème vient de la fonction PHP imagefill dans Gd2 ne fonctionne pas sur certains réglages. Ceci est une solution de contournement utilisant imagefilledrectangle et a fonctionné pour moi. J'espère que cela résout votre problème aussi.

+0

Cool, je vais essayer. Je me suis contourné moi-même en utilisant les images comme arrière-plans d'un que j'ai mis à la place des images insérées

3

Correction sur le point 4 de Adi's answer:

4. Trouvez ce code

if (!imagefill($imageResourceTo, 0, 0, $color)) { throw new Exception("Failed to fill image background with color {$r} {$g} {$b}."); } 

et le remplacer par:

if (!imagefilledrectangle($imageResourceTo,0,0,$w,$h,$color)) { 
    throw new Exception("Failed to fill image background with color {$r} {$g} {$b}."); 
2

Varien_Image qui est utilisé dans Magento offre une possibilité de définir couleur d'arrière-plan de l'image mise à l'échelle. Vous pouvez utiliser un code similaire quelque part avant la sortie de l'image (redimensionner la méthode?) Pour faire fond blanc:

$image->backgroundColor(array(255, 255, 255)); 
0

Adi de réponse m'a conduit dans la bonne direction, mais j'étais toujours obtenir une ligne noire sur mes images. J'ai découvert que lorsqu'une image est recadrée, Magento crée un fond de toile, puis l'image au-dessus. La toile produisait la ligne noire sur mes images.

j'ai réussi à le corriger en ajoutant les changements de Adi, puis en plus, dans la fonction culture() (dans le même fichier), j'ai ajouté:

list($r, $g, $b) = $this->_backgroundColor; 
$bg_color = imagecolorallocate($canvas, $r, $g, $b); 
imagefill($canvas, 0, 0, $bg_color); 

Une fois la fonction (autour de la ligne 554, après les changements d'adi):

imagecopyresampled 

Maintenant mes images ont la couleur de fond qu'elles devraient avoir!

Une autre chose à noter, au lieu de modifier ce fichier directement dans le noyau, il doit être copié:

app/code/local/Varien/Image/Adapter/Gd2.php 

L'espoir que cela aide quelqu'un aux prises avec le même problème.