1

少し前に、テキストを取得して画像として返すスクリプトを作成し、問題なく動作しました。しかし、奇妙なバグがいつから発生し始めたのかはわかりません。左側に (フォント オタクには申し訳ありませんが) 「グリフ」がある文字は右側に押し出されて文字が開始されますが、メインの文字のためだけにスペースが残されます。

代替テキスト
(ソース: esbasura.com )

期待される結果は次のとおりです: (ソース: esbasura.com )代替テキスト

「悪い」ものは、​​明らかに、ここにある私のスクリプトによって生成されました。 %20dog.&fnt=1&size=23&bg=lightgrey そして、良いものは dafont によって生成されました: http://img.dafont.com/preview.php?text=The%20quick%20brown%20fox%20jumps%20over%20the% 20lazy%20dog.&ttf=bleeding_cowboys0&ext=1&size=23&psize=m&y=46

私はスクリプトで何も凝っていません。関連する部分は次のとおりです。

                imagefilledrectangle($im, 0, 0, $width, $height, $$bg);
                imagettftext($im, $size, 0, (-1*$textsize[6]), (-1*$textsize[7]), $$color, $font, $text);
//              imagefttext($im, $size, 0, (-1*$textsize[6]), (-1*$textsize[7]), $$color, $font, $text); same results using imagefttext
                imagecolortransparent($im, $$bg);
                header("Cache-Control: public"); // HTTP/1.1
                header("Content-type: image/png");
                imagepng($im);
                imagedestroy($im);
    }

私が言ったように、以前は完璧に機能していたので、ちょっと驚いています。私のホストが私のマシンを変更したのかもしれません。

(ここに私の phpinfo があります: http://www.work4bandwidth.com/info.php ) 関連ビット:

gd
GD Support  enabled
GD Version  bundled (2.0.34 compatible)
FreeType Support    enabled
FreeType Linkage    with freetype
FreeType Version    2.2.1
GIF Read Support    enabled
GIF Create Support  enabled
JPG Support     enabled
PNG Support     enabled
WBMP Support    enabled
XBM Support     enabled

編集:また、画像サイズの計算は、フォントの正しいレンダリングを考慮して行われているようです。次を使用して計算しています:

                $textsize = imagettfbbox($size, 0, $font, $text);

                $width = ($textsize[2] - $textsize[0]);
                $height = ($textsize[3] - $textsize[5]);
4

3 に答える 3

3

残念ながら、見出しのグラフィックを生成するためにPHPとGDLibを使用する場合の問題にも対処する必要がありました。私はほとんどのプロジェクトでCMSとしてTYPO3を使用しています。グラフィカルヘッダーを作成し、GDLibを活用できます。品質の問題に苦労しなければなりませんでした。ローカルの開発マシン(osx)では、フォントは優れた品質でレンダリングされ、本番サーバー(gentoo)では、ぼやけて「薄く」なりました。これらの違いがプラットフォームの違いによるものなのか、PHP/GDLibのバージョンがわずかに異なるためなのかはわかりません。また、特にWebホストが新しいPHPバージョンにアップグレードされたときに、あなたのような問題が発生しました。昨日は見出しが良さそうだった。更新後、文字が置き忘れられたり、ウムラウトがなくなったりした。

サーバーサイドの代替手段はimagemagickである可能性があります。この小さなPHPスニペットは、サンプル画像を作成します(Bleeding_Cowboys.ttfがスクリプトと同じディレクトリにあると仮定します)。

<?php
$currentDir = dirname(__FILE__);
$fontPathname = $currentDir . '/Bleeding_Cowboys.ttf';

$cmd = '  convert -background white -fill black -font "' . $fontPathname . '" -pointsize 23 label:"The quick brown fox jumps over the lazy dog" ' . $currentDir . '/headline.png';
exec($cmd);

print '<img src="headline.png" alt="" border="0" />';

画像は次のようになります。

代替テキスト

-pointsize 23おそらく、引数に別の値を使用してフォントサイズを少し調整する必要があります。

私はこのIMバージョンをWindowsで使用しました:

ImageMagick 6.5.4-6 2009-07-25 Q16 OpenMP 

imagemagicksのテキスト処理機能の詳細については、http://www.imagemagick.org/Usage/text/をご覧ください。

Imagemagickは現在非常に一般的なパッケージですが、IMがインストールされていないホストがまだあります。ただし、静的にコンパイルされたIMバージョンをダウンロードして、FTP経由でディレクトリにアップロードし、バイナリを書き込み可能にしてから、それを使用してイメージを生成することができます。残念ながらドイツ語のみでこれを行う方法のチュートリアルを見つけましたが、提供されているシェルコマンドから基本的な考え方を理解できると確信しています:http ://www.website4all.de/support/support-typo3/imagemagick.html


Imagemagickは実行可能なオプションですが、フォントが埋め込まれたグラフィカルな見出しを作成するために、最終的にクライアント側のjavascriptを使用しました。

最初に、フォントをレンダリングするためにhtmlコンテンツをflashオブジェクトに置き換えるsIFRhttp://wiki.novemberborn.net/sifr/ )に出くわしました。最初は有望に見えましたが、次の理由でダンプしました。

  • 置き換える要素が多いと、Webサイトが非常に遅くなります
  • セットアップは少し面倒です
  • フラッシュに依存しているため、iPhoneやiPadでは見出しは機能しません

サンプルを作成しましたが、ラップトップにAdobeFlashCSをインストールしていません。

とにかく、私はついに私が望んでいたことを実行する優れたクライアント側のjavascript libを見つけました:Cufonhttp://cufon.shoqolate.com/generate/)。ttfファイルをそのサービスにアップロードしてから、作成したjavascriptファイルをCufonベースライブラリと一緒に使用して、見出し要素をグラフィカルな見出しに置き換えます。Cufonは、これを行うためにcanvas要素を使用します。https://github.com/sorccu/cufon/wiki/aboutでそれがどのように行われたかについてもっと読む

私がCufonについて本当に好きなこと:

  • IE 6(およびそれ以降)を含むすべての主要なブラウザーで動作します
  • iPhoneとiPadでうまく機能します
  • 多くの見出しがあっても、非常に高速です
  • 非常に簡単なセットアップ

私がCufonについて持っている唯一の本当の懸念は、ライセンスです。これは、特に商用フォントで問題になる可能性があります。すべてのフォント作成者がこの種の埋め込みを許可しているわけではありません。疑わしい場合は、常に書面による許可を得てください。

しかしとにかく、Cufonを使用した単純なHTMLサイトは次のようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Test</title>
        <script type="text/javascript" src="cufon.js"></script>
        <script type="text/javascript" src="Bleeding_Cowboys_400.font.js"></script>
        <script type="text/javascript">
          Cufon.replace('p', {fontFamily: 'Bleeding Cowboys'});
        </script>
        <style type="text/css">
        p {
            color:#000;
            font-size:23px;
        }
        </style>
    </head>
    <body>
       <p>The quick brown fox jumps over the lazy dog</p>
    </body>
</html>

結果の見出し画像は次のようになります。

代替テキスト

htmlサイトのソースコードでわかるように、CSSを介してフォントサイズ(おそらくこれも調整する必要があります)と色を定義します。次に、what(この場合はすべての要素)をwhatフォントファミリー(この場合は)Cufon.replace('p', {fontFamily: 'Bleeding Cowboys'});に置き換えるようにCufonに指示するために呼び出します。pBleeding Cowboys


私は知っています、これらはあなたの質問に対する直接の答えではありませんが、クライアント側の見出しの作成は、私が試したすべてのサーバー側のソリューションよりもはるかに簡単なセットアップとコードで非常に良い結果をもたらしました。私があなたなら、sIFRかCufonのどちらかを試してみますが、特にサーバーサイドソリューションに制限されている場合は、IMを事前に試す価値があるかもしれません。

于 2010-05-29T09:44:29.150 に答える
1

おそらく GD ライブラリが変更され、それが問題の原因です。フォントファイルの可能性もありますが、可能性は低いです。

それがどれくらい前に機能していたか知っていますか?

PHP 4.3より前でしたか?その時、GD Library が PHP にバンドルされました。

4.3 より前の場合は、別のバージョンのスタンドアロン GD ライブラリを試してください。http://www.libgd.orgを参照

Php 4.3 以降で機能した場合は、別のバージョンの PHP を試して、機能しなくなった場所を見つけてください。

解決策: GD ライブラリのリリースを確認し、古い GD ライブラリ (スタンドアロンまたはバンドル) を使用するバージョンの php をビルドします。

また、ISP と話し合うこともできます。ISP は、PHP をさまざまなバージョンに更新したときの記録を持っている場合があります。

最終的に、どのバージョンの GD ライブラリがソフトウェアを壊したかを正確に突き止めることができます。その後、バグ レポートを提出する必要があります。うまくいけば、修正されます。

または、古いバージョンの php を使用して動的に作成された png を提供するだけの小さなサーバーを作成することもできます。

于 2010-05-25T23:24:17.887 に答える
1

imagettfbbox()バグがあり、それ問題の原因である可能性があります。http://ruquay.com/sandbox/imagettf/imagettfbbox_t()で利用可能な機能を使用してみてください。おそらくそれで解決します。

また、まったく同じttfフォントですか?あなたのバージョンはオリジナルよりも少し大胆に見えるからです.

于 2010-05-26T21:01:18.983 に答える