لماذا كل ما عندي من الصور المصغرة التي يتم إنشاؤها تلقائيا مع GD في PHP لديهم الخلفيات السوداء؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

وحسنا أنا باستخدام التعليمات البرمجية التالية لاتخاذ أي صورة القديمة إلى صورة مصغرة 160x120، والمشكلة هي إذا كان هناك تجاوز على خلفية سوداء دائما. لقد تم التطفل حول مستندات PHP ولكن أيا من هذه الوظائف يبدو أن لديها أي نوع من المعلمات اللون. ومن شأن أي أفكار أو مؤشرات تكون كبيرة!

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

وأيضا إذا كنت من غير الواضح ما أعنيه، واتخاذ هذه الصورة ونعتبر أن كان النص في الأصل مجرد أحمر على خلفية بيضاء

هل كانت مفيدة؟

المحلول

وظيفة imagecreatetruecolor يخلق قماش سوداء.

استخدم وظيفة imagefill لرسمه الأبيض ...

نصائح أخرى

وإضافة هذا قبل نسخ أصلية في الجديد:

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

وتحرير:

في الواقع، لم أكن أعرف عن imagefill. . .

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

لا تستخدم imagecreatetruecolor بدلا imagecreate، وأعتقد أن من شأنه أن يحل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top