この内容の文字列から 1 ビットのビットマップを書き込む可能性を探しています。
$str = "001011000111110000";
ゼロは白で、1 は黒です。BMP ファイルは 18 x 1 ピクセルになります。
24 ビット BMP ではなく、実際の 1 ビット BMP が必要です。
PHPのヘッダーと変換方法を知っている人はいますか?
それはちょっと変わったリクエストです:)
したがって、ここで使用したいのは、まず php-gd です。通常、これは、まともなレポを持つ任意の OS に php をインストールするときに含まれますが、それがあなたのためではない場合に備えて、ここでインストール手順を入手できます。
http://www.php.net/manual/en/image.setup.php
まず、画像の幅がどれくらい必要かを正確に把握する必要があります。高さは明らかに常に 1 です。
そう;
$str = $_GET['str'];
$img_width = strlen($str);
strlen は、$str 文字列に含まれる文字数を教えてくれます。1 文字あたり 1 ピクセルを指定しているため、文字数によって必要な幅が得られます。
アクセスを容易にするために、文字列を配列に分割し、各要素を個別のピクセルごとに配置します。
$color_array = str_split($str);
では、どのピクセルに描画するかの「ポインタ」を設定しましょう。これは php なので、これを初期化する必要はありませんが、整理しておくと便利です。
$current_px = (int) 0;
これで、GD を初期化してイメージの作成を開始できます。
$im = imagecreatetruecolor($img_width, 1);
// Initialise colours;
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
// Now, start running through the array
foreach ($color_array as $y)
{
if ($y == 1)
{
imagesetpixel ( $im, $current_px , 1 , $black );
}
$current_px++; // Don't need to "draw" a white pixel for 0. Just draw nothing and add to the counter.
}
これで画像が描画され、表示するだけで済みます。
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
$white 宣言はまったく必要ないことに注意してください。gd でさまざまな色を宣言する方法を理解してもらうために、そのままにしておきました。
これを使用する前に、おそらくこれを少しデバッグする必要があります。GD を使用してから長い時間が経ちました。とにかく、これが役に立てば幸いです!
それは奇妙な要求ではありません。
私は質問の目的に完全に同意します。実際、1ビットのモノクロ画像を管理する必要があります。
答えは次のとおりです。
imagecreate()
またはを使用する必要がありますimagecreatetruecolor()
imagecreatefrompng()
。さらに、ここから公式ライブラリのオープン ソース コードをダウンロードしました。公式 Bitbucket リポジトリ
私が見つけたものgd.h
?:
上記の関数の定義:
/* Functions to manipulate images. */
/* Creates a palette-based image (up to 256 colors). */
BGD_DECLARE(gdImagePtr) gdImageCreate (int sx, int sy);
/* An alternate name for the above (2.0). */
\#define gdImageCreatePalette gdImageCreate
/* Creates a truecolor image (millions of colors). */
BGD_DECLARE(gdImagePtr) gdImageCreateTrueColor (int sx, int sy);
したがって、「公式」の解決策は次のとおりです。( GD関数imagecreate()
をラップする)で2色のパレット画像を作成します。gdImageCreate()
「代替」の解決策は、外部画像、1 ビットのモノクロ png を作成し、imagecreatefrompng()
上記のようにそれを使用することです。