4

これは、デフォルトのディレクトリに「coloured_font.png」というファイル名で新しい画像を作成することにより、私のWebサーバーで正常に動作するImageMagickコードです...

<?php 
$cmd = " -background none -pointsize 60 -font Times-Roman -fill red ".
 " -strokewidth 1 -stroke black label:\"google\" ";
exec("convert $cmd coloured_font.png");
?>

しかし今、私は Windows で ImageMagick を実行しています。これはデフォルトのフォルダに画像ファイルを作成しませんが、ImageMagick アプリケーションは正常に動作します (サムネイルを作成してテストしました)。だから今、私の考えは、「coloured_font.png」を他の場所に保存せずにブラウザ画面に表示することです...保存せずに画像を作成して画面に表示するのを手伝ってください。

4

3 に答える 3

6

特別なinline:形式の画像を使用することもできます (ImageMagick はファイルの読み取りにも対応しています)。この形式は、バイナリ データの base64 エンコードです。

(Linux) コマンドラインで:

my_base64_png="$(
convert               \
    -background none  \
    -pointsize 60     \
    -font Times-Roman \
    -fill red         \
    -strokewidth 1    \
    -stroke black     \
     label:\"google\" \
     png:fd:1         \
 |                    \
 base64  -i -  -o -)"

このコマンドは、ImageMagick とシェルが備えているいくつかの特別なトリックを使用します。

  • フォーマット ヒントpng:を使用して、出力が PNG フォーマットであることを伝えます。
  • stdoutを (ファイルの代わりに) 出力チャネルとして使用しfd:1
  • 出力をバイナリの標準入力に直接パイプしてbase64、PNG をエンコードします。
  • Base64 でエンコードされたデータを環境変数に格納しますmy_base64_png

HTML で base64 画像データをインライン化します (最新のすべてのブラウザーでは機能するはずですが、古いブラウザーでは機能しません)。

 <IMG SRC="data:image/png;base64,
         echo "$(my_base64_png)"
  ALT="google" WIDTH=214  HEIGHT=57  VSPACE=5 HSPACE=5 BORDER=0 />

また

 <IMG SRC="data:image/png;base64,
         iVBORw0KGgoAAAANSUhEUgAAAM4AAABJAQMAAABPZIvnAAAABGdBTUEAALGPC/xh
         BQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAA
         OpgAABdwnLpRPAAAAAZQTFRFAAAA/wAAG/+NIgAAAAF0Uk5TAEDm2GYAAAABYktH
         RACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAB6ElEQVQ4y+3UQY7bIBQG4IeQ
         yqYaLhANV+iyi9FwpS69iGyiLuZYpepF6A1YskC8/uCA7SgZtVI3lcoiivkIxu/9
         MdH/8U+N6el2pk0oFyibWyr1Q3+PlO2NqJV+/BnRPMjcJ9zrfJ/U+zQ9oAvo+QGF
         d+npPqFQn++TXElkrEpEJhAtlTBR6dNHUuzIMhFnEhxAmJDkKxlmt7ATXDDJYcaE
         r4Txqtkl42VYSH+t9KrD9b5nxZeog/LWGVHprGInGWVQUTvjDWXca5KdsowqyGSc
         DrZRlGlQUl4kQwpUjiSS9gI9VdECZhHFQ2I+UE2CHJQfkNxTNKCl0RkURqlLowJK
         1h1p3sjc0CJD39D4BIqD7JvvpH/GAxl2/YSq9mtHSHknga7OKNOHKyEdaFC2Dh1w
         9VSJemBeGuHgMuh24EynK03YM1Lr83OjUle38aVSfTblT424rl4LhdglsUag5RB5
         uBJSJBIiELSzaAeIN0pUlEeZEMeClC4cBuH6mxOlgPjC3uLproUCWfy58WPN/MZR
         86ghc888yNdD0Tj8eAucasl2I5LqX19I7EmEjaYjSb9R/G1SYfQA7ZBuT5H6WwDt
         UAfK1BOJmh/eZnKLeKvZ/vA8qonCpj1h6djfbqvW620Tva36++MXUkNDlFREMVkA
         AAAldEVYdGRhdGU6Y3JlYXRlADIwMTItMDgtMjJUMDg6Mzc6NDUrMDI6MDBTUnmt
         AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEyLTA4LTIyVDA4OjM3OjQ1KzAyOjAwIg/B
         EQAAAA50RVh0bGFiZWwAImdvb2dsZSJdcbX4AAAAAElFTkSuQmCC"
  ALT="google" WIDTH=214  HEIGHT=57  VSPACE=5 HSPACE=5 BORDER=0 />

この手順を PHP に翻訳することは難しくありません。;-)

前述したように、ImageMagick はこのinline:形式を読み取ることができます (ここでは読み取りには使用しません)。しかし、完全を期すために、その方法をお見せしましょう:

  convert                                                                   \
        'inline:image/png;data:,
         iVBORw0KGgoAAAANSUhEUgAAAM4AAABJAQMAAABPZIvnAAAABGdBTUEAALGPC/xh
         BQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAA
         OpgAABdwnLpRPAAAAAZQTFRFAAAA/wAAG/+NIgAAAAF0Uk5TAEDm2GYAAAABYktH
         RACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAB6ElEQVQ4y+3UQY7bIBQG4IeQ
         yqYaLhANV+iyi9FwpS69iGyiLuZYpepF6A1YskC8/uCA7SgZtVI3lcoiivkIxu/9
         MdH/8U+N6el2pk0oFyibWyr1Q3+PlO2NqJV+/BnRPMjcJ9zrfJ/U+zQ9oAvo+QGF
         d+npPqFQn++TXElkrEpEJhAtlTBR6dNHUuzIMhFnEhxAmJDkKxlmt7ATXDDJYcaE
         r4Txqtkl42VYSH+t9KrD9b5nxZeog/LWGVHprGInGWVQUTvjDWXca5KdsowqyGSc
         DrZRlGlQUl4kQwpUjiSS9gI9VdECZhHFQ2I+UE2CHJQfkNxTNKCl0RkURqlLowJK
         1h1p3sjc0CJD39D4BIqD7JvvpH/GAxl2/YSq9mtHSHknga7OKNOHKyEdaFC2Dh1w
         9VSJemBeGuHgMuh24EynK03YM1Lr83OjUle38aVSfTblT424rl4LhdglsUag5RB5
         uBJSJBIiELSzaAeIN0pUlEeZEMeClC4cBuH6mxOlgPjC3uLproUCWfy58WPN/MZR
         86ghc888yNdD0Tj8eAucasl2I5LqX19I7EmEjaYjSb9R/G1SYfQA7ZBuT5H6WwDt
         UAfK1BOJmh/eZnKLeKvZ/vA8qonCpj1h6djfbqvW620Tva36++MXUkNDlFREMVkA
         AAAldEVYdGRhdGU6Y3JlYXRlADIwMTItMDgtMjJUMDg6Mzc6NDUrMDI6MDBTUnmt
         AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEyLTA4LTIyVDA4OjM3OjQ1KzAyOjAwIg/B
         EQAAAA50RVh0bGFiZWwAImdvb2dsZSJdcbX4AAAAAElFTkSuQmCC'              \
  my_decoded.png

ImageMagick はコマンドの一部を必要としませんimage/png;(無視することさえあります)。これは、独自の組み込みのマジック データベースを介してとにかくフォーマットを識別できるためです。しかし、どちらも害はありません...

また、ImageMagick のコマンドラインの長さは 5000 文字に制限されてinline:いるため、大きな画像ではデータの読み取りが機能しないことも指摘しておきます。(現時点では、HTML で画像データをインライン化するための制限が何であるかはわかりません...)

于 2012-08-22T07:09:18.183 に答える
0

一時ファイルを作成する必要があります

手順

  1. シェルでコマンドをtemp_image.jpg実行して、一時ファイルを作成しますimagemagick
  2. これをhttp応答として送信します

    $file = 'pathto/temp_image.jpg';
    $type = 'image/jpeg';           // set appropriate type    
    header('Content-Type:'.$type);  // set content type
    header('Content-Length: ' . filesize($file));
    readfile($file);
    
  3. 消去temp_image.jpg

これがにあるとするとgetImage.php、画像タグのソースとして指定できます

<img src="pathto/getImage.php" />
于 2012-08-22T04:38:52.327 に答える