Jump to content
clem_b

Enlever bord blanc des images uniquement pour les images "large_default"

Recommended Posts

Bonjour, est il possible d'enlever les bord blanc UNIQUEMENT pour les images "large_default".

J'ai trouvé ceci: 

<?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' && $type == IMAGETYPE_PNG) && !$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 && $height_diff > 1)
        {
            $next_width = $src_width;
            $next_height = $src_height;
        }
        else
        {
            if (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 2 OR (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 0 AND $heightDiff > $widthDiff))

            {
                $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));
    }
}

 

Cependant cela l'applique à toutes mes images... 

Pouvez-vous m'aider ?

Share this post


Link to post
Share on other sites

bonjour,

effectivement quand tu vas régénérer tes images produit cela va s'appliquer a tous tes formats, il va falloir trouver une autre solution a ton pb comme avec un développement spécifique,

cordialement

Share this post


Link to post
Share on other sites

Ou alors définir le format large_default dans le même ratio (largeur / hauteur) que l'image d'origine et l'image sera juste redimensionnée sans créer de bords.

Share this post


Link to post
Share on other sites
37 minutes ago, Eolia said:

Ou alors définir le format large_default dans le même ratio (largeur / hauteur) que l'image d'origine et l'image sera juste redimensionnée sans créer de bords.

ça ne m'arrange pas beaucoup de faire comme ceci, ça me ferai changer beaucoup d'image...

Sinon je vais essayer de détourner mon problème.

Est-il possible de mettre l'image d'origine (image produit) en ayant JqZoom activer ?

J'ai pourtant enlever le "large_default" dans Product.tpl:

<span id="view_full_size">

                        {if $jqZoomEnabled && $have_image && !$content_only}
                            <a class="jqzoom" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" rel="gal1" href="{$link->getImageLink($product->link_rewrite, $cover.id_image, '')|escape:'html':'UTF-8'}">
                                <img itemprop="image" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')|escape:'html':'UTF-8'}" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}"/>
                            </a>
                        {else}
                                <img id="bigpic" itemprop="image" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, '')|escape:'html':'UTF-8'}" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" width="{$largeSize.width}" height="{$largeSize.height}"/>
                            {if !$content_only}
                                <span class="span_link no-print">{l s='View larger'}</span>
                            {/if}
                        {/if}
                    </span>

 

Cependant c'est toujours l'image large_default qui apparaît... 

Share this post


Link to post
Share on other sites

tu es d'accord que chaque image produit a un ID , le produit id 100 par exemple a une image dont l id est 250, sur prestashop l'image va se mettre dans le repertoire /img / p (p comme product) ensuite prestashop va créer des dossiers en fonction de l'ID image, ici https://www.tonsite.com/img/p/2/5/0/ ensuite il va copier l image d origine en ID.jpg, donc ici ton image se trouve  https://www.tonsite.com/img/p/2/5/0/250.jpg . dans mon message du haut on essaye de trouver cette image d'origine dynamiquement avec la variable smarty $ cover .id_image et la fonction spacify,

cordialement

Edited by Alexandre Carette (see edit history)

Share this post


Link to post
Share on other sites

vérifier qu'aucun cache n'est encore actif.

Il faut savoir aussi que le product.js peut toucher aux images suivant les thèmes.

Share this post


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

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More