Pourquoi toutes mes vignettes générées automatiquement avec GD en PHP ont un fond noir?

StackOverflow https://stackoverflow.com/questions/879669

  •  22-08-2019
  •  | 
  •  

Question

Eh bien, je suis en utilisant le code suivant pour prendre une vieille image dans une miniature 160x120, le problème est de savoir s'il y a dépassement l'arrière-plan est toujours noir. J'ai fouiner la documentation PHP, mais aucun de ces fonctions semblent avoir tout type de paramètres de couleur. Toutes les idées ou des pointeurs serait génial!

$original = 'original_image.jpg';
$thumbnail = 'output_thumbnail.jpg';

list($width,$height) = getimagesize($original);
$width_ratio = 160 / $width;
if ($height * $width_ratio <= 120)
{
    $adjusted_width = 160;
    $adjusted_height = $height * $width_ratio;
}
else
{
    $height_ratio = 120 / $height;
    $adjusted_width = $width * $height_ratio;
    $adjusted_height = 120;
}
$image_p = imagecreatetruecolor(160,120);
$image = imagecreatefromjpeg($original);
imagecopyresampled($image_p,$image,ceil((160 - $adjusted_width) / 2),ceil((120 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);
imagejpeg($image_p,$thumbnail,100);

Aussi, si vous n'êtes pas clair ce que je veux dire, prendre cette image et considérer qu'il était à l'origine uniquement du texte rouge sur un fond blanc

Était-ce utile?

La solution

Le fonction imagecreatetruecolor crée une toile noire.

Utilisez la fonction imagefill pour peindre blanc ...

Autres conseils

Ajoutez cette avant de copier l'original dans le nouveau:

$white = ImageColorAllocate($image_p, 255, 255, 255); 
ImageFillToBorder($image_p, 0, 0, $white, $white);

EDIT:

En fait, je ne savais pas imagefill. . .

$white = imagecolorallocate($image_p, 255, 255, 255); 
imagefill($image_p, 0, 0, $white);

N'utiliser imagecreatetruecolor à la place imagecreate, je pense que cela résoudrait

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top