Bonjour,

J'utilise sur mon site le plugin media et le helper image sur cakePHP.

Mais parfois quand je redimensionne une image, il y'a un trait noir qui apparait sur le côté droit et parfois même en bas.
Je préfèrerais qu'ils soient blancs voir pas là !

J'ai tenté de modifié le helper en changant les paramètres de imagecolorallocate et imagecolorallocatealpha pour mettre 255 à la place et en rajoutant un else pour les jpg mais ça ne change rien :'(

// The two image ressources needed (image resized with the good aspect ratio, and the one with the exact good dimensions)
$image_crop = imagecreatetruecolor( $width_crop, $height_crop );
$image_resized = imagecreatetruecolor($width, $height);

imagecopyresampled($image_crop, $image, 0, 0, 0, 0, $width_crop, $height_crop, $width_old, $height_old);
imagecopyresampled($image_resized, $image_crop, 0, 0, ($width_crop - $width) / 2, ($height_crop - $height) / 2, $width, $height, $width, $height);

// This is the resizing/resampling/transparency-preserving magic
if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
    $transparency = imagecolortransparent($image);
    if ($transparency >= 0) {
        $transparent_color  = imagecolorsforindex($image, $trnprt_indx);
        //$transparency       = imagecolorallocate($image_crop, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
        $transparency       = imagecolorallocate($image_crop, 255, 255, 255);
        imagefill($image_crop, 0, 0, $transparency);
        imagecolortransparent($image_crop, $transparency);
        imagefill($image_resized, 0, 0, $transparency);
        imagecolortransparent($image_resized, $transparency);
    }elseif ($info[2] == IMAGETYPE_PNG) {
        imagealphablending($image_crop, false);
        imagealphablending($image_resized, false);
        //$color = imagecolorallocatealpha($image_crop, 0, 0, 0, 127);
        $color = imagecolorallocatealpha($image_crop, 255, 255, 255, 127);
        imagefill($image_crop, 0, 0, $color);
        imagesavealpha($image_crop, true);
        imagefill($image_resized, 0, 0, $color);
        imagesavealpha($image_resized, true);
    }
} else {
    $color = imagecolorallocate($image_crop, 255, 255, 255);
    imagefill($image_crop, 0, 0, $color);
    imagefill($image_resized, 0, 0, $color);
}

// Writing image according to type to the output destination and image quality
switch ( $info[2] ) {
  case IMAGETYPE_GIF:   imagegif($image_resized, $imageDir . $output, $quality);    break;
  case IMAGETYPE_JPEG:  imagejpeg($image_resized, $imageDir . $output, $quality);   break;
  case IMAGETYPE_PNG:   imagepng($image_resized, $imageDir . $output, 9);    break;
  default: return false;
}

Si quelqu’un à idée de pourquoi ça ne fonctionne pas :)

Merci d'avance

1 réponse


charlie404
Auteur
Réponse acceptée

Bon finalement j'ai trouvé une solution pour ne pas avoir les traits noirs.

J'arrondis les variables $height_crop et $width_crop ligne 82 et 83 de imageHelper.php

$height_crop = round($height_old / $optimalRatio);
$width_crop  = round($width_old  / $optimalRatio);