3

特定のテキストの透明なpngを作成したいと思います。画像の幅と高さを指定したくありませんが、テキストのサイズに合わせて自動的にサイズを調整します。私は imagemagick と PHP の両方を試しましたが、完全には理解できませんでした。これらのテクノロジのいずれか、または他のテクノロジを使用して、どのように行うのでしょうか? また、ある技術が他の技術よりも優れているのはなぜですか?

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);
?>
4

1 に答える 1

0

imagemagick のような外部ライブラリに依存しないように、純粋な php ソリューションを選択します。

ブラウザのキャッシュを使用するのは良い考えかもしれません。そのため、リクエストごとに画像を生成する必要はありません。

「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 -------
}
于 2013-09-30T06:35:06.327 に答える