#php #image #png #transparent
#php #изображение #png #прозрачный
Вопрос:
Я использовал https://github.com/ttodua/useful-php-scripts/blob/master/text-to-image.php для преобразования текста в изображение.
На самом деле мне нужно создать изображение из текста и отобразить его на разных цветах фона. для этого создано прозрачное изображение, отображаемое на красном фоне. но при создании прозрачного изображения вокруг текста отображаются пятна белого цвета. Как я могу создать гладкое текстовое изображение на любом цвете фона?
Не могли бы вы, пожалуйста, помочь мне в этом. ниже приведен мой код.
Мой Html
<div class="box--h logo_bg_color1_preview fl-d fl-ac" style="background-color:red;">
<div class="box--l fl-d fl-ac">
<img src="logo.png?q=0.73948100 1606166692">
</div>
</div>
Мой преобразованный фон изображения прозрачный
public function hexToRgb($hex, $alpha = false) {
$hex = str_replace('#', '', $hex);
$length = strlen($hex);
$rgb['r'] = hexdec($length == 6 ? substr($hex, 0, 2) : ($length == 3 ? str_repeat(substr($hex, 0, 1), 2) : 0));
$rgb['g'] = hexdec($length == 6 ? substr($hex, 2, 2) : ($length == 3 ? str_repeat(substr($hex, 1, 1), 2) : 0));
$rgb['b'] = hexdec($length == 6 ? substr($hex, 4, 2) : ($length == 3 ? str_repeat(substr($hex, 2, 1), 2) : 0));
if ( $alpha ) {
$rgb['a'] = $alpha;
}
return $rgb;
}
function TextToImage($text="hello world",$textColor)
{
$newline_after_letters=40;
$font='./myfont.ttf';
$size=24;
$rotate=0;
$padding=2;
$transparent=true;
$bg_color=array('red'=>255,'grn'=>255,'blu'=>255);
$textRgbColor = $this->hexToRgb($textColor);
$color=array('red'=>$textRgbColor['r'],'grn'=>$textRgbColor['g'],'blu'=>$textRgbColor['b']);
//other version: pastebin(dot).com/XVVUyWGD
$amount_of_lines= ceil(strlen($text)/$newline_after_letters) substr_count($text, 'n') 1;
$all_lines=explode("n", $text); $text=""; $amount_of_lines = count($all_lines);
foreach($all_lines as $key=>$value){
while( mb_strlen($value,'utf-8')>$newline_after_letters){
$text_final .= mb_substr($value, 0, $newline_after_letters, 'utf-8')."n";
$value = mb_substr($value, $newline_after_letters, null, 'utf-8');
}
$text .= mb_substr($value, 0, $newline_after_letters, 'utf-8') . ( $amount_of_lines-1 == $key ? "" : "n");
}
//
Header("Content-type: image/png");
$width=$height=$offset_x=$offset_y = 0;
if(!is_file($font)) { file_put_contents($font,file_get_contents('https://github.com/potyt/fonts/raw/master/macfonts/Arial Unicode MS/Arial Unicode.ttf')); }
// get the font height.
$bounds = ImageTTFBBox($size, $rotate, $font, "W");
if ($rotate < 0) {$font_height = abs($bounds[7]-$bounds[1]); }
elseif ($rotate > 0) {$font_height = abs($bounds[1]-$bounds[7]); }
else { $font_height = abs($bounds[7]-$bounds[1]);}
// determine bounding box.
$bounds = ImageTTFBBox($size, $rotate, $font, $text);
if ($rotate < 0){
$width = abs($bounds[4]-$bounds[0]);
$height = abs($bounds[3]-$bounds[7]);
$offset_y = $font_height;
$offset_x = 0;
}
elseif ($rotate > 0) {
$width = abs($bounds[2]-$bounds[6]);
$height = abs($bounds[1]-$bounds[5]);
$offset_y = abs($bounds[7]-$bounds[5]) $font_height;
$offset_x = abs($bounds[0]-$bounds[6]);
}
else{
$width = abs($bounds[4]-$bounds[6]);
$height = abs($bounds[7]-$bounds[1]);
$offset_y = $font_height;
$offset_x = 0;
}
$image = imagecreate($width ($padding*2) 1,$height ($padding*2) 1);
$background = ImageColorAllocate($image, $bg_color['red'], $bg_color['grn'], $bg_color['blu']);
$foreground = ImageColorAllocate($image, $color['red'], $color['grn'], $color['blu']);
if ($transparent) ImageColorTransparent($image, $background);
ImageInterlace($image, true);
// render the image
ImageTTFText($image, $size, $rotate, $offset_x $padding, $offset_y $padding, $foreground, $font, $text);
imagealphablending($image, true);
imagesavealpha($image, true);
// output PNG object.
$finalImage="abc.png";
imagePNG($image, $finalImage, 0, NULL);
imagedestroy($image);
}
Комментарии:
1. любой, пожалуйста, предложите