2013-09-10 3 views
3

Я хотел бы создать прозрачный png некоторого заданного текста. Я не хочу указывать ширину и высоту изображения, но автоматически меняю размер текста. Я экспериментировал как с imagemagick, так и с PHP, однако, не получил этого. Как мне это сделать, используя любую из этих технологий или любую другую технологию? Кроме того, почему одна технология лучше, чем другая?Создать прозрачный png заданного текста

ImageMagick решение

работ, за исключением того, требуется размер изображения, которое будет указано вместо автоматического размера к размеру текста.

convert -size 560x85 xc:transparent -font Palatino-Bold -pointsize 72 -fill black -stroke red -draw "text 20,55 'Linux and Life'" linuxandlife.png 

PHP Решение

Работы, кроме котлет немного с правой стороны. Кроме того, если я делаю несколько изображений с текстом того же размера шрифта и типа шрифта, и все они имеют заглавные буквы, высота изображений не одинакова, но я бы ожидал, что они будут одинаковыми. Кроме того, сегодня я впервые играл с функциями изображения, и, пожалуйста, дайте мне знать, если я делаю что-то еще неправильное.

<?php 

    $font_size = 11; 
    $angle=0; 
    //$fonttype="/usr/share/fonts/liberation/LiberationMono-Regular.ttf"; 
    $fonttype="/usr/share/fonts/dejavu/DejaVuSans.ttf"; 

    $text='Some text'; 
    $file='MyFile.png'; 

    $bbox = imagettfbbox($font_size, $angle, $fonttype, $text); 
    $x1 = $bbox[2] - $bbox[0]; 
    $y1 = $bbox[1] - $bbox[7]; 

    $im = @imagecreatetruecolor($x1, $y1); 
    imagesavealpha($im, true); 
    imagealphablending($im, false); 
    $color_background = imagecolorallocatealpha($im, 255, 255, 255, 127); 
    imagefill($im, 0, 0, $color_background); 
    $color_text = imagecolorallocate($im, 255, 0, 0); 
    imagettftext($im, $font_size, $angle, 0, $font_size, $color_text, $fonttype, $text); 
    imagepng($im,$file); 
    imagedestroy($im); 
?> 
+0

Это выглядит нормально для меня, не видя каких-либо культур с правой стороны в моих тестах PHP. – waraker

+0

@waraker Что вы используете для просмотра изображения? – user1032531

+0

Сценарий создает это в корне: http://pic.imagecrisis.com/qysl4.png – waraker

ответ

0

Я бы выбрал чисто php-решение, поэтому вы не зависимы от внешних библиотек, таких как imagemagick.

Возможно, это будет хорошая идея, если вы будете использовать кеширование браузера, поэтому вы не должны генерировать изображения по каждому запросу.

Yust добавьте следующий код перед вашим «imagettfbbox» и поместите код генерации изображения в ELSE.

$string = $text . filemtime($file); 
$eTag = md5($string); 
header("ETag: ".$eTag); 
$httpModEtag = !empty($_SERVER['HTTP_IF_NONE_MATCH'])? $_SERVER['HTTP_IF_NONE_MATCH']:""; 
if($httpModEtag===$eTag) 
{ 
    // tells the browser to use his cached image 
    header("HTTP/1.1 304 Not Modified", true, 304); 
} 
else 
{ 
    // tells the browser to refresh the cache 
    header("Cache-Controll: must-revalidate"); 

    // ------ Place your Image Generation code here ------- 
} 
Смежные вопросы